qibio 发表于 2020-9-30 10:27:58

【小白求助】用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)


afula 发表于 2020-9-30 11:36:48

因为 if 语句只会判断一次, while是循环,只要条件符合,就会不停运行。比如你第一层递归,linelen进入到第二层的时候数值是250-5即245。等到第二层再往里运行完了之后linelen的数值还是245,这个时候第一层的 if 等第二层运行完了之后就结束了。但是while等第二层结束之后,由于linelen的数值还是245(里层的数值变化不会影响外层的),所以会继续循环。

疾风怪盗 发表于 2020-9-30 11:57:41

把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)

qibio 发表于 2020-10-2 13:39:51

疾风怪盗 发表于 2020-9-30 11:57
把while里的draw(t, linelen)去掉,貌似不影响画图,循环也终止了,说明出错就在这里
这句话是为什么要加 ...

看了上面的回答我懂了。if 判断的时候因为要利用递归画图,所以这句话要有;但是while判断的时候,条件满足本身就会不断执行,所以这句话就多余了。谢谢!

qibio 发表于 2020-10-2 13:41:15

afula 发表于 2020-9-30 11:36
因为 if 语句只会判断一次, while是循环,只要条件符合,就会不停运行。比如你第一层递归,linelen进入到 ...

结合 疾风怪盗 的回答,我知道了:while判断的时候递归多余了,谢谢!!
页: [1]
查看完整版本: 【小白求助】用turtle画螺旋线出现了奇怪的现象!