我正在尝试将下面的函数转换为递归函数但我在尝试时遇到错误。
TypeError: unsupported operand type(s) for *: 'float' and 'NoneType'
def turtle_spiral(forward):
minus = 8
t = turtle.Turtle()
t.pendown()
t.shape("turtle")
#while forward > 10:
randm = random.randrange(5)
colours = ["blue", "orange", "yellow", "green", "purple","black","red","pink"]
t.goto(-100,0)
if forward <= 10:
return False
else:
t.color(colours[randm])
#t.speed(10)
t.fd(turtle_spiral(forward*minus))
#t.circle(forward, 360)
t.right(90)
#forward -= minus
turtle_spiral(100)
wd.mainloop()
答案 0 :(得分:0)
我已经开始修改您的代码以执行我想要做的:
import turtle
import random
def turtle_spiral(forward):
minus = 8
randm = random.randrange(5)
colours = ["blue", "orange", "yellow", "green", "purple","black","red","pink"]
if forward <= 10:
return 0
else:
t.color(colours[randm])
t.right(90)
t.fd(forward)
return turtle_spiral(forward-minus)
t = turtle.Turtle()
t.pendown()
t.shape("turtle")
turtle_spiral(100)
递归的关键是定义递归的结束点。在你的情况下,当乌龟被要求前进一个小于10的距离时。在结束点,递归函数不应该调用自己而只是返回。
在其他情况下,我们希望函数在某个时刻调用自身,并使用一个参数使其更接近终点。在您的情况下,此参数为forward-minus
,此值将越来越接近结束条件,turtle_spiral
递归调用自身越多。
答案 1 :(得分:0)
尽管John Sharp很好地分析了你的代码,想出你想让你的乌龟做什么,但我还是读了一下你的注释代码,想出你真正希望你的乌龟可以做的事情:
turtle_spiral()
我还改变了一些风格 - 看看它们是否对你有意义。例如:colors
无需返回值,也无需查看结果;从正在运行的代码中获取全局定义,如turtle_spiral()
数组;将乌龟和其他信息传递给function run(){
document.body.style.backgroundColor = 'red';
alert('Contratulations!');
}
作为参数 - 通过事件计时器,您可以一次运行多个这样的事件;保持你的乌龟不可见,直到你到达起点然后揭示它。