【问题标题】:How to draw fibonacci sequence using turtle module如何使用海龟模块绘制斐波那契数列
【发布时间】:2019-06-29 20:49:03
【问题描述】:

这是我有史以来的第一个问题,我是一个完全的初学者,所以请不要吃我 :) 我想要做的是使用 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-forum.io/Thread-Fibonacci-Sequence-on-Turtle 也许您想快速浏览一下以了解基本概念,似乎他们使用for 循环代替:) 好运气
  • 谢谢哥们:)
  • import turtle zuf = turtle.Turtle() n = 0 y = (n-1)+(n-2) while True: zuf.forward(y) zuf.left(3.1415) 这没有'似乎也不起作用

标签: python fibonacci turtle-graphics


【解决方案1】:

我想我可以把你从你所在的地方带到你想去的地方。首先,您调用:

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()

这对您来说不是一个完整的解决方案,只是提示您在绘制正方形时可以做什么,这是一个基于图章的解决方案,遵循不同的规则。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-05
    • 2011-05-06
    • 2016-08-09
    • 1970-01-01
    • 2013-08-03
    • 2014-05-19
    相关资源
    最近更新 更多