在Python中打转吗?
我最近在玩Python里的turtle模块,试着修改一些别人写的代码(是Dmitri Kurilo写的)。我用这个模块画出了一个很不错的图形,形成了美丽的曲线。因为我对数学了解不多,也许你们能帮我理解一下这里发生了什么!非常感谢,下面是代码!:
import turtle, random
from math import *
def fib(n):
for n in range(400):
turtle.color("black")
turtle.right(pi*19)
turtle.forward(n)
if n > 400:
break
turtle.title("The Looping ball")
turtle.colormode(255)
turtle.color("white")
turtle.goto(0,0)
turtle.color("black")
turtle.speed(500)
fib(1)
turtle.getscreen()._root.mainloop()
2 个回答
这是原程序的一个更清晰的版本:
import turtle
def fib(num, rot=59.7, scale=1.0):
for n in range(num):
turtle.right(rot)
turtle.forward(n*scale)
turtle.title('The Looping ball')
turtle.speed(2000)
turtle.pencolor('blue')
fib(400, rot=92, scale=0.75)
turtle.getscreen()._root.mainloop()
这个版本去掉了一些不必要的内容,并且把一些数值变成了可以调整的参数,这样提问者就可以自己尝试修改行数、每行的旋转角度和行的长度。这样做可以帮助理解每个参数的变化对结果的影响。
import turtle, random
from math import *
这里引入的 random
模块其实是多余的。最后只用了 turtle
和 math.pi
。
def fib(n):
for n in range(400):
turtle.color("black")
turtle.right(pi*19)
turtle.forward(n)
if n > 400:
break
画一个由400条线段组成的图形,每两条线段之间的角度是59.69度(turtle
模块默认使用度数),而且每条线段比前一条长一单位。这样画出来的图形几乎是一个六角螺旋(spirangle),但因为线段之间的角度不是360度的六分之一(60度),所以看起来会有点偏差。
需要注意的是,参数 n
没有被使用,因为在循环中它被重新赋值了。条件 n > 400
永远不会成立(因为 range(400)
的范围是从0到399),所以循环的最后部分没有什么值得提的内容。
现在进入主要部分:
turtle.title("The Looping ball")
turtle.colormode(255)
turtle.color("white")
turtle.goto(0,0)
turtle.color("black")
turtle.speed(500)
设置了一些窗口的参数:设置了标题,设置了 colormode
(这是指定颜色值的方式;这里没有用到),画了一条白线到屏幕中心,并让海龟停在那里(最好用 turtle.penup()
和 turtle.pendown()
来实现这个),并把绘图速度设置为最快(turtle.speed(0)
也能达到同样的效果,任何大于十的值都和 turtle.speed(0)
一样)。
fib(1)
螺旋图形被画出来了。
turtle.getscreen()._root.mainloop()
程序的控制权交给了 turtle
窗口的主事件循环。如果不这样做,窗口在绘图完成后会立即关闭。如果你“运行”主循环,程序会在窗口打开时保持运行。