鱼C论坛

 找回密码
 立即注册
查看: 1794|回复: 4

[已解决]【小白求助】用turtle画螺旋线出现了奇怪的现象!

[复制链接]
发表于 2020-9-30 10:27:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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判断的

这是if判断的

这是while判断的

这是while判断的

最佳答案
2020-9-30 11:36:48
因为 if 语句只会判断一次, while是循环,只要条件符合,就会不停运行。比如你第一层递归,linelen进入到第二层的时候数值是250-5即245。等到第二层再往里运行完了之后linelen的数值还是245,这个时候第一层的 if 等第二层运行完了之后就结束了。但是while等第二层结束之后,由于linelen的数值还是245(里层的数值变化不会影响外层的),所以会继续循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-30 11:36:48 | 显示全部楼层    本楼为最佳答案   
因为 if 语句只会判断一次, while是循环,只要条件符合,就会不停运行。比如你第一层递归,linelen进入到第二层的时候数值是250-5即245。等到第二层再往里运行完了之后linelen的数值还是245,这个时候第一层的 if 等第二层运行完了之后就结束了。但是while等第二层结束之后,由于linelen的数值还是245(里层的数值变化不会影响外层的),所以会继续循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

看了上面的回答我懂了。if 判断的时候因为要利用递归画图,所以这句话要有;但是while判断的时候,条件满足本身就会不断执行,所以这句话就多余了。谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

结合 疾风怪盗 的回答,我知道了:while判断的时候递归多余了,谢谢!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 13:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表