Python练手小项目(5)斐波那契数列及其曲线的绘制

本文介绍了斐波那契数列的基本概念和在自然界的应用,并通过Python编程展示了如何使用turtle库打印数列及绘制数列曲线。文章包含两个任务,一是利用print()输出斐波那契数列,二是利用turtle库画出数列对应的1/4圆曲线,并讨论了改进图像的方法。

斐波那契数列,也叫黄金分割数列、兔子繁殖数列等,其实很简单,数列的前几项是这样的:1、1、2、3、5、8、13、21、34、……从第三项开始,后面的一项等于前面两项之和,在科学领域有很多应用,在自然界也能找到很多遵循该数列排列的很多自然现象或生物特征。

图片源自网络,出处不详。

任务一:print() 数列。

任务二:用turtle库画出数列曲线。

#任务一完整代码
def fib(n):
    a,b=1,1
    print(a,end=(','))#第一次定义a值
    for i in range(n):
        a,b=b,a+b#迭代有重叠部分
        print(a,end=(','))#第2~n次定义a值
fib(10)

导入turtle库,以a值为半径,画1/4圆曲线。

#任务二完整代码:
import turtle as t
t.speed(0)
t.pensize(3)
t.pencolor('blue')
def fibarc(n):#重新定义arc函数
    a,b=1,1
    for i in range(n):
        a,b=b,a+b
        t.circle(a,90)#半径为a,数列前两个1只保留第二个,90度圆弧
fibarc(13)
t.exitonclick()

绘制出的图像不是特别完美,问题主要是半径较小的部分看不明显,还可以改进一下。 

### 使用Python绘制斐波那契数列图形 为了实现斐波那契数列的可视化,可以采用`turtle`库来完成绘图工作。下面提供了一种基于`turtle`库的方法,该方法不仅能够生成斐波那契螺旋线,还展示了如何通过编程手段将抽象的数据转换成直观的几何图案。 #### 准备工作 首先需要导入必要的模块: ```python import turtle ``` 接着定义一个函数用于计算斐波那契序列中的数值,并利用这些数值指导海龟画笔的动作路径。 #### 绘制斐波那契螺旋线 这里给出一段完整的代码片段,它会创建一系列逐渐增大的正方形并连接它们的一角形成平滑过渡的曲线,这正是著名的黄金比例螺线——即斐波那契螺旋线[^2]。 ```python def draw_fibonacci_spiral(num_terms): # 设置初始参数 factor = 1 a, b = 0, 1 # 初始化turtle环境 t = turtle.Turtle() screen = turtle.Screen() # 调整窗口大小适应较大范围内的图像显示 screen.setup(width=800, height=600) # 开始绘画前移至合适位置 t.penup() t.goto(-screen.window_width()/4, screen.window_height()/4) t.pendown() # 循环迭代num_terms次构建斐波那契矩形和弧度 for _ in range(num_terms): forward_distance = (a + b) * factor # 绘制四分之一圆作为当前阶段的一部分 circle_radius = forward_distance / math.pi t.circle(circle_radius, extent=90) move_forward(t, forward_distance) # 更新下一个斐波那契项 temp = a + b a = b b = temp screen.mainloop() def move_forward(turt, dist): """辅助函数:使乌龟能够向前移动指定距离""" angles = [0, 90, 180, 270] angle_index = int((turt.heading() // 90)) % 4 turt.setheading(angles[(angle_index + 1) % 4]) turt.forward(dist) if __name__ == "__main__": num_of_terms = eval(input("请输入要展示的斐波那契数列长度: ")) draw_fibonacci_spiral(num_of_terms) ``` 上述程序中包含了两个重要部分:一个是负责实际绘图逻辑的`draw_fibonacci_spiral()`;另一个则是用来调整方向以便于连续绘制多个相连圆形边界的`move_forward()`辅助功能。当执行这段脚本时,用户会被提示输入期望看到多少个斐波那契数字构成的螺旋形状。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北大培文张老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值