如何使用龟模块绘制斐波纳契数列

问题描述 投票:6回答:1

这是我的第一个问题,直到永远,我是一个彻头彻尾的初学者,所以请不要吃我:)我试图向是绘制使用Python乌龟模块斐波纳契数列。我的代码如下:

import turtle

zuf = turtle.Turtle()

while True:

  zuf.forward(10)
  zuf.left(3.1415)

然而,这带动周围只有圈。我试图创建一个变量,比如X,并指定一个斐波那契规则给它,然后xn = xn-1 + xn-2我把它放在这里zuf.forward(x),但它不工作。我想的是多种变化,但没有一个似乎工作。请不要放弃一个整体解决方案,只有一些提示,非常感谢。

python fibonacci turtle-graphics
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

这是不是对你的整体解决方案,这仅是可以根据你绘制你的方块来完成,这是一个基于时间戳的解决方案,它通过不同的规则起到了暗示。

© www.soinside.com 2019 - 2024. All rights reserved.