这是我有史以来的第一个问题,我是一个完整而完全的初学者,所以请不要吃我:)我要尝试的是使用Python turtle模块绘制斐波那契序列。我的代码如下:
import turtle
zuf = turtle.Turtle()
while True:
zuf.forward(10)
zuf.left(3.1415)
但是,这只会绕圈转。我试图创建一个变量,例如X,并为其指定一个xn = xn-1 + xn-2
的斐波那契规则,然后将其放在此处zuf.forward(x)
,但它不起作用。我尝试了多种变体,但似乎都没有效果。请不要给出完整的解决方案,仅提供一些提示,非常感谢。
答案 0 :(得分:3)
我想我可以帮助您从您所处的位置到想要成为的地方。首先,您的调用:
zuf.left(3.1415)
似乎表明您在考虑弧度,这很好。但是您需要告诉乌龟:
zuf = turtle.Turtle()
zuf.radians()
这仍然会使您的代码进入圈子,但圈子却大不相同。接下来,我们要用我们的斐波那契值替换10
。在while
循环之前,初始化您的斐波那契计数器:
previous, current = 0, 1
作为while
循环中的最后一条语句,将它们向上推:
previous, current = current, current + previous
,然后在您的forward()
通话中,将10
替换为current
。接下来,我们需要将其绘制的线变成正方形。为此,我们需要做两件事。首先,循环绘制代码四次:
for i in range(4):
zuf.forward(current)
zuf.left(3.1415)
然后,将角度替换为pi / 2:
zuf.left(3.1415 / 2)
如果正确组装所有这些,您应该得到一个像这样的图形:
显示斐波那契值的大小不断增加。不是最漂亮的图像,您仍然必须对其进行一些处理以使其看起来干净。
最后,@ IvanS95在他的评论中链接到的斐波那契绘图代码给我留下了深刻的印象,我编写了一个使用 stamping 而不是 drawing :
from turtle import Screen, Turtle
SCALE = 5
CURSOR_SIZE = 20
square = Turtle('square', visible=False)
square.fillcolor('white')
square.speed('fastest')
square.right(90)
square.penup()
previous_scaled, previous, current = 0, 0, 1
for _ in range(10):
current_scaled = current * SCALE
square.forward(current_scaled/2 + previous_scaled/2)
square.shapesize(current_scaled / CURSOR_SIZE)
square.left(90)
square.forward(current_scaled/2 - previous_scaled/2)
square.stamp()
previous_scaled, previous, current = current_scaled, current, current + previous
screen = Screen()
screen.exitonclick()
这不是一个完整的解决方案,只是提示您绘制正方形时可以做什么,这是一个基于图章的解决方案,它遵循不同的规则。