如何用python turtle画斐波那契螺旋曲线?

要用turtle画,需要曲线,正方形和不同的填充颜色。... 要用turtle画,需要曲线,正方形和不同的填充颜色。 展开
 我来答
努力成为不熬夜的熊猫
2019-05-03 · TA获得超过209个赞
知道小有建树答主
回答量:102
采纳率:84%
帮助的人:41万
展开全部

我把矩形和圆弧都用不同颜色填充了,你按照自己的需求修改一下吧,你的题目说的不清楚。

# Python3.6
# 使用turtle绘制Fibonacci螺旋
def draw_fibonacci(x):
    # F0=1
    # F1=1
    # Fn=F(n-1)+F(n-2)

    # 产生斐波那契数列,用于查表
    # 像这种计算复杂性指数增长的计算,不要写个函数去每次求一个数
    # 最好的办法是,按照规律写出查找表,用查找的方法来得到数据
    f_list = []
    for i in range(x):
        if i == 0:
            f_list.append(1)
        elif i == 1:
            f_list.append(1)
        else:
            f_list.append(f_list[i-1]+f_list[i-2])

    # 像素比例
    f0 = 50

    # 设置画笔属性
    turtle.pensize(5)
    turtle.pencolor("black")
    turtle.penup()
    turtle.home()
    turtle.pendown()

    for i in range(0, len(f_list)):
        # 绘制速度,1~10个不同速度等级,小于1或者大于10立即绘制
        turtle.speed(1)
        turtle.pendown()

        # 绘制矩形
        if i == 0:
            fill_color = "black"
        else:
            fill_color = (random.random(), random.random(), random.random())
        turtle.fillcolor(fill_color)
        turtle.begin_fill()
        turtle.forward(f_list[i]*f0)
        turtle.left(90)
        turtle.forward(f_list[i]*f0)
        turtle.left(90)
        turtle.forward(f_list[i]*f0)
        turtle.left(90)
        turtle.forward(f_list[i]*f0)
        turtle.left(90)
        turtle.end_fill()

        # 绘制圆弧
        fill_color = (random.random(), random.random(), random.random())
        turtle.fillcolor(fill_color)
        if i == 0:
            turtle.forward(f_list[i] * f0 / 2)
            turtle.begin_fill()
            turtle.circle(f_list[i] * f0 / 2, 360)
            turtle.end_fill()
            # 移动到一下起点
            turtle.forward(f_list[i] * f0 / 2)
            continue
        else:
            turtle.begin_fill()
            turtle.circle(f_list[i] * f0, 90)
            turtle.left(90)
            turtle.forward(f_list[i] * f0)
            turtle.left(90)
            turtle.forward(f_list[i] * f0)
            turtle.end_fill()

        # 移动到一下起点
        turtle.speed(0)
        turtle.penup()
        turtle.left(90)
        turtle.forward(f_list[i] * f0)
        turtle.left(90)
        turtle.forward(f_list[i] * f0)

    turtle.done()


if __name__ == "__main__":
    draw_fibonacci(6)

下面是我跑出来的结果:

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式