如何使用turtle模块绘制斐波那契数列

7
这是我第一次提问,我是一个完全的初学者,请不要责怪我 :) 我想用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),但是它不起作用。我尝试了多种变化,但似乎都不起作用。请不要给出整个解决方案,只需要一些提示,非常感谢。


你要求提示,我找到了这个链接:https://python-forum.io/Thread-Fibonacci-Sequence-on-Turtle 也许你想快速浏览一下,以便了解基本思路,看起来他们使用 for 循环 :) 祝你好运 - IvanS95
谢谢你,伙计 : ) - Ejdzbikej
导入海龟库zuf = turtle.Turtle() n = 0 y = (n-1)+(n-2)

循环开始

while True:

海龟前进

zuf.forward(y)

海龟左转

zuf.left(3.1415) # 此处似乎不起作用
- Ejdzbikej
1个回答

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)

如果您正确组装所有部件,您应该得到一个如下图所示的图形:

enter image description here

展示斐波那契数值增加的大小。图片不是最好看的,您仍然需要进行一些工作来清理它,使其看起来漂亮。
最后,我印象深刻的是@IvanS95在他的评论中提供了斐波那契绘图代码,我编写了一个高速版本,它使用盖章而不是绘制
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()

enter image description here

这并不是一个完整的解决方案,只是一个提示,可以在绘制正方形时使用。这是一种基于印章的解决方案,遵循不同的规则。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接