导入 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)
移动到循环中,以便它可以执行其原始目的。)
此代码片段来自 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)
移动到循环中,以便它可以执行其原始目的。)