导入 random 会影响 while 循环的使用吗?

Does importing random affect use of while loops?

此代码片段来自 python 中学教授的课程。该文件导入 turtle,然后导入 random 以允许在绘制正方形时从列表中选择颜色。我尝试将 if 更改为 while 循环,但得到了意想不到的结果。循环在 num = 0 之后继续,无限期地打印 0。我尝试在调用之外删除减量 sqspin(num-1) 并像这样在上面的行上进行递减:num = num -1 在 num 第一次达到 0 之后,此更改开始为每个连续循环创建 num 的打印值的随机更改。我不明白为什么 while num > 0 在 num = 0 时不终止循环,或者 num 的那些随机值来自哪里。有什么线索吗? 我是运行3.4.3,但是学校用的是2.7.

from turtle import *
from random import *

shape("turtle")
st()

def sq():
    fd(100)
    rt(90)
    fd(100)
    rt(90)
    fd(100)
    rt(90)
    fd(100)
    rt(90)

colors = ['red', 'green', 'orange', 'blue', 'yellow']

def  pickcolor():
    return choice(colors)

def sqspin(num):
    print(num)
    if num > 0:
        sq()
        rt(5)
        mycolor = pickcolor()
        pencolor(mycolor)
        sqspin(num-1)

sqspin(5)

您可以按照您的建议进行操作,但仅将 if 更改为 while 是不够的。您感到困惑的地方在于 递归 迭代 之间的区别。该算法目前是递归的,要使其迭代我们可以:

def sqspin(num):
    while num > 0:
        print(num)
        sq()
        rt(5)
        pencolor(pickcolor())
        num -= 1

请注意,除了 if 变成 while 之外,我们删除了对 sqspin() 的递归调用并在循环内递减 num 而不是在递归内调用参数。 (并将 print(num) 移动到循环中,以便它可以执行其原始目的。)