【小白求助】用turtle画螺旋线出现了奇怪的现象!
本帖最后由 qibio 于 2020-9-30 10:31 编辑最近在看递归,就写了一个画螺旋线的小程序,代码中用if判断终止条件的时候画出的线是正常的,但是改成while后就结果很奇怪,不会终止(如图)。求大佬们解答!!
from turtle import Turtle
def draw(t, linelen):
if linelen > 0:
t.forward(linelen)
t.right(90)
linelen -= 5
draw(t, linelen)
t = Turtle()
draw(t, 250)
因为 if 语句只会判断一次, while是循环,只要条件符合,就会不停运行。比如你第一层递归,linelen进入到第二层的时候数值是250-5即245。等到第二层再往里运行完了之后linelen的数值还是245,这个时候第一层的 if 等第二层运行完了之后就结束了。但是while等第二层结束之后,由于linelen的数值还是245(里层的数值变化不会影响外层的),所以会继续循环。 把while里的draw(t, linelen)去掉,貌似不影响画图,循环也终止了,说明出错就在这里
这句话是为什么要加进去?
from turtle import Turtle
def draw(t, linelen):
while linelen > 0:
t.forward(linelen)
t.right(90)
linelen -= 5
print(linelen)
# draw(t, linelen)
t = Turtle()
draw(t, 250) 疾风怪盗 发表于 2020-9-30 11:57
把while里的draw(t, linelen)去掉,貌似不影响画图,循环也终止了,说明出错就在这里
这句话是为什么要加 ...
看了上面的回答我懂了。if 判断的时候因为要利用递归画图,所以这句话要有;但是while判断的时候,条件满足本身就会不断执行,所以这句话就多余了。谢谢! afula 发表于 2020-9-30 11:36
因为 if 语句只会判断一次, while是循环,只要条件符合,就会不停运行。比如你第一层递归,linelen进入到 ...
结合 疾风怪盗 的回答,我知道了:while判断的时候递归多余了,谢谢!!
页:
[1]