Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用乌龟画图案_Python_Turtle Graphics - Fatal编程技术网

Python 用乌龟画图案

Python 用乌龟画图案,python,turtle-graphics,Python,Turtle Graphics,我正试图在一个正方形内画一个点的图案。我已经设法画出图案,但是在正方形中间有一个缝隙(由于X坐标的倒置引起)。如何更正此错误?我曾尝试反转范围(而不是x坐标),但python不接受这种格式 import turtle T = turtle.Turtle() turtle.tracer(0,0) T.speed(10) T.pensize(3) zoom = 40 def verticalSaddle2(T,n,k): for j in range(((n+1)//2),n+1):

我正试图在一个正方形内画一个点的图案。我已经设法画出图案,但是在正方形中间有一个缝隙(由于X坐标的倒置引起)。如何更正此错误?我曾尝试反转范围(而不是x坐标),但python不接受这种格式

import turtle

T = turtle.Turtle()
turtle.tracer(0,0)
T.speed(10)
T.pensize(3)

zoom = 40 

def verticalSaddle2(T,n,k):
   for j in range(((n+1)//2),n+1):
          
    for i in range(1,(n+1)//2):
     
        if k <= 1 :
            return()

        else:
                        
                            T.penup()
                            T.setpos((j)* zoom, (i) * zoom)
                            T.pendown()
                            

                            T.dot(k)
                            k=k-2

    for i in range(((n+1)//2),n+1):
     
        if k <= 1 :
            return()
        else:
                        
                            T.penup()
                            T.setpos((j)* zoom, (i) * zoom)
                            T.pendown()
                            

                            T.dot(k)
                            k=k+2

 k=10
 n=7


 verticalSaddle2(T,n,k)

def verticalSaddle3(T,n,k):
for j in range(1,((n+1)//2)):
    
            for i in range(1,(n+1)//2):
             
                if k <= 1 :
                    return()

                else:
                                
                                    T.penup()
                                    T.setpos((-j)* zoom, (i) * zoom)
                                    T.pendown()
                                    

                                    T.dot(k)
                                    k=k-2

            for i in range(((n+1)//2),n+1):
             
                if k <= 1 :
                    return()
                else:
                                
                                    T.penup()
                                    T.setpos((-j)* zoom, (i) * zoom)
                                    T.pendown()
                                    

                                    T.dot(k)
                                    k=k+2
        
k=12
n=7
            
verticalSaddle3(T, n, k)

turtle.update()
turtle.done()
导入海龟
T=海龟。海龟()
海龟示踪物(0,0)
T.速度(10)
潘西(3)
缩放=40
def垂直鞍座2(T、n、k):
对于范围内的j((n+1)//2),n+1):
对于范围(1,(n+1)//2)内的i:

如果k一个函数为负片
x
绘制了图片的左侧部分,另一个函数为正片
x
绘制了几乎相同的图片,那么这两个部分只是另一部分的镜像版本
x
j
循环处理。为了在没有间隙的情况下绘制相同的左右图片,您的两个
j
循环应固定在相同的范围内,从
0
(n+1)//2
。产生的固定代码如下:

import turtle

T = turtle.Turtle()
turtle.tracer(0,0)
T.speed(0.01)
T.pensize(3)

zoom = 40 

def verticalSaddle2(T,n,k):
    for j in range(0,(n+1) // 2):
              
        for i in range(1,(n+1)//2):
         
            if k <= 1 :
                return()

            else:
                            
                T.penup()
                T.setpos((j)* zoom, (i) * zoom)
                T.pendown()
                

                T.dot(k)
                k=k-2

        for i in range(((n+1)//2),n+1):
         
            if k <= 1 :
                return()
            else:
                            
                T.penup()
                T.setpos((j)* zoom, (i) * zoom)
                T.pendown()
                

                T.dot(k)
                k=k+2

k=10
n=7


verticalSaddle2(T,n,k)

def verticalSaddle3(T,n,k):
    for j in range(0,((n+1)//2)):
        
        for i in range(1,(n+1)//2):
         
            if k <= 1 :
                return()

            else:
                            
                T.penup()
                T.setpos((-j)* zoom, (i) * zoom)
                T.pendown()
                

                T.dot(k)
                k=k-2

        for i in range(((n+1)//2),n+1):
         
            if k <= 1 :
                return()
            else:
                            
                T.penup()
                T.setpos((-j)* zoom, (i) * zoom)
                T.pendown()
                

                T.dot(k)
                k=k+2
        
k=12
n=7
            
verticalSaddle3(T, n, k)

turtle.update()
turtle.done()

其中一个函数为负片
x
绘制图片的左侧部分,另一个函数为正片
x
绘制几乎相同的图片,这两个部分只是另一部分的镜像版本
x
j
循环处理。为了在没有间隙的情况下绘制相同的左右图片,您的两个
j
循环应固定在相同的范围内,从
0
(n+1)//2
。产生的固定代码如下:

import turtle

T = turtle.Turtle()
turtle.tracer(0,0)
T.speed(0.01)
T.pensize(3)

zoom = 40 

def verticalSaddle2(T,n,k):
    for j in range(0,(n+1) // 2):
              
        for i in range(1,(n+1)//2):
         
            if k <= 1 :
                return()

            else:
                            
                T.penup()
                T.setpos((j)* zoom, (i) * zoom)
                T.pendown()
                

                T.dot(k)
                k=k-2

        for i in range(((n+1)//2),n+1):
         
            if k <= 1 :
                return()
            else:
                            
                T.penup()
                T.setpos((j)* zoom, (i) * zoom)
                T.pendown()
                

                T.dot(k)
                k=k+2

k=10
n=7


verticalSaddle2(T,n,k)

def verticalSaddle3(T,n,k):
    for j in range(0,((n+1)//2)):
        
        for i in range(1,(n+1)//2):
         
            if k <= 1 :
                return()

            else:
                            
                T.penup()
                T.setpos((-j)* zoom, (i) * zoom)
                T.pendown()
                

                T.dot(k)
                k=k-2

        for i in range(((n+1)//2),n+1):
         
            if k <= 1 :
                return()
            else:
                            
                T.penup()
                T.setpos((-j)* zoom, (i) * zoom)
                T.pendown()
                

                T.dot(k)
                k=k+2
        
k=12
n=7
            
verticalSaddle3(T, n, k)

turtle.update()
turtle.done()

我相信你把这个问题弄得太难了。我会首先让代码简单地画一个均匀点的网格。然后修改代码,根据点在网格中的位置调整其大小。比如:

from turtle import Screen, Turtle

DISTANCE = 40

def saddle(t, n, minimum=1):
    assert n % 2 == 1, "n should be odd"

    t.penup()

    for x in range(-n // 2 + 1, n // 2 + 1):
        t.setx(x * DISTANCE)

        for y in range(-n // 2 + 1, n // 2 + 1):
            t.sety(y * DISTANCE)
            t.dot(2 * (minimum + abs(x) + abs(y)))

screen = Screen()
screen.tracer(False)

turtle = Turtle()
turtle.hideturtle()

saddle(turtle, 7)

screen.tracer(True)
screen.exitonclick()


我已经让我的代码坚持使用奇数表示
n
,否则模式就不是对称的。

我相信你让这个问题变得比必要的更困难了。我会首先让代码简单地画一个均匀点的网格。然后修改代码,根据点在网格中的位置调整其大小。比如:

from turtle import Screen, Turtle

DISTANCE = 40

def saddle(t, n, minimum=1):
    assert n % 2 == 1, "n should be odd"

    t.penup()

    for x in range(-n // 2 + 1, n // 2 + 1):
        t.setx(x * DISTANCE)

        for y in range(-n // 2 + 1, n // 2 + 1):
            t.sety(y * DISTANCE)
            t.dot(2 * (minimum + abs(x) + abs(y)))

screen = Screen()
screen.tracer(False)

turtle = Turtle()
turtle.hideturtle()

saddle(turtle, 7)

screen.tracer(True)
screen.exitonclick()


我已经让我的代码坚持使用奇数表示
n
,否则模式是不对称的。

怎么样?仅修复了两个鞍形函数中
j
循环的范围。结果图像。基本上,您的
j
循环的范围应该相同,从
0
(n+1)//2
。一个函数为同一范围的正
x
绘制,另一个函数为负
x
绘制。好的,如果它解决了您的任务,我将发布此代码作为答案!要获得递减范围,必须指定负增量。例如,试试
范围(10,0,-1)
,看看。@Grace500我也发布过,它只有一个绘图函数,范围从
-(n+1)//2
(n+1)//2
,怎么样?仅修复了两个鞍形函数中
j
循环的范围。结果图像。基本上,您的
j
循环的范围应该相同,从
0
(n+1)//2
。一个函数为同一范围的正
x
绘制,另一个函数为负
x
绘制。好的,如果它解决了您的任务,我将发布此代码作为答案!要获得递减范围,必须指定负增量。例如,试试
范围(10,0,-1)
,然后看。@Grace500我也发布过,它只有一个绘图函数,范围从
-(n+1)//2
(n+1)//2
。我已经运行了所有三个示例解决方案,但没有一个能够生成所需的图像。仔细看看每幅作品的输出。@cdlane问题的作者同意,事实上我的画是正确的,他想要什么。在我的机器上,第一个代码绘制,这就是作者想要的。问题帖子中显示的图片不是期望的输出,而是作者的代码当前显示的内容,他希望输出。我的评论基于上面的第4列和第5列,它们是相同的,尽管在OP发布的图片中,它们是不同的。在备选解决方案中,相邻行是相同的,与OP的图像不同。它们不会生成与上面相同的图像。虽然我按照您建议的方式更改了代码,但在上面提供的代码中,第4列和第5列是相同的,不应该是相同的。但是,更改我发布的代码中的j循环是有效的@Grace500是的,这只是我的一个想法,即
j
在两个循环中都处于错误的范围内,所以这个想法只是稍微修改一下,尽管可能需要一些小的调整。顺便说一句,我的答案末尾的简化代码正确地绘制了所有内容!我已经运行了您的三个示例解决方案,但没有一个能够生成所需的图像。仔细看看每幅作品的输出。@cdlane问题的作者同意,事实上我的画是正确的,他想要什么。在我的机器上,第一个代码绘制,这就是作者想要的。问题帖子中显示的图片不是期望的输出,而是作者的代码当前显示的内容,他希望输出。我的评论基于上面的第4列和第5列,它们是相同的,尽管在OP发布的图片中,它们是不同的。在备选解决方案中,相邻行是相同的,与OP的图像不同。它们不会生成与上面相同的图像。虽然我按照您建议的方式更改了代码,但在上面提供的代码中,第4列和第5列是相同的,不应该是相同的。但是,更改我发布的代码中的j循环是有效的@Grace500是的,这只是我的一个想法,即
j
在两个循环中都处于错误的范围内,所以这个想法只是稍微修改一下,尽管可能需要一些小的调整。顺便说一句,我的答案末尾的简化代码正确地绘制了所有内容!