python - 如何使用海龟模块绘制斐波那契数列
问题描述
这是我有史以来的第一个问题,我是一个完整的初学者,所以请不要吃我:) 我想要的是使用 Python 乌龟模块绘制一个斐波那契数列。我的代码如下:
import turtle
zuf = turtle.Turtle()
while True:
zuf.forward(10)
zuf.left(3.1415)
然而,这只是绕圈子。我试图创建一个变量,比如 X,并为其分配一个斐波那契规则,xn = xn-1 + xn-2
然后我将它放在这里,zuf.forward(x)
但它不起作用。我尝试了多种变体,但似乎都没有。请不要给出完整的解决方案,仅提供一些提示,非常感谢。
解决方案
我想我可以把你从你所在的地方带到你想去的地方。首先,您调用:
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 在他的评论中链接到的斐波那契绘图代码给我留下了深刻的印象,我编写了一个使用冲压而不是绘图的高速版本:
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()
这对您来说不是一个完整的解决方案,只是提示您在绘制正方形时可以做什么,这是一个基于图章的解决方案,它遵循不同的规则。
推荐阅读
- mongodb - 如何在使用 mongo shell 获取匹配的父母时删除子条目
- ios - 如何在 Azure 管道中运行 iOS 移动应用程序的 XCTest(UI 测试用例)?
- vue.js - vue-router 中某些路由的单独导航抽屉
- ruby-on-rails - 如何将变量和纯文本放在Haml表的同一列中
- c# - 通过调用另一个方法将参数传递给方法。有性能差异吗?
- javascript - 我对原型“字符串”的更新无法使用日志打印到
- python - mysql.connector.errors.InterfaceError:执行操作失败;Python 类型 UUID 无法转换
- java - Maven Java Fx 示例不运行 - 不重复
- javascript - mxgraph:我想添加一个按钮来禁用/启用图形和工具栏
- javascript - 在 Node 中读取小 CSV 文件时出现问题