Python 用乌龟画图案
我正试图在一个正方形内画一个点的图案。我已经设法画出图案,但是在正方形中间有一个缝隙(由于X坐标的倒置引起)。如何更正此错误?我曾尝试反转范围(而不是x坐标),但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):
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
在两个循环中都处于错误的范围内,所以这个想法只是稍微修改一下,尽管可能需要一些小的调整。顺便说一句,我的答案末尾的简化代码正确地绘制了所有内容!