【问题标题】:Does importing random affect use of while loops? [closed]导入随机数会影响 while 循环的使用吗? [关闭]
【发布时间】:2017-09-05 23:43:32
【问题描述】:

这段代码 sn-p 来自一所中学教授的 Python 课程。该文件导入turtle,然后随机导入以允许在绘制正方形时从列表中选择颜色。我尝试将 if 更改为 while 循环,并得到了意想不到的结果。在 num = 0 之后循环继续,无限期地打印 0。我尝试在调用之外删除减量 sqspin(num-1) 并在上面的行上进行减量,如下所示: num = num -1 在 num 首次达到 0 后,此更改开始对每个连续循环的 num 的打印值进行随机更改。我不明白为什么当 num = 0 或 num 的随机值来自哪里时,当 num > 0 时不会终止循环。有什么线索吗? 我运行的是 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)

【问题讨论】:

  • 为什么要添加行号?
  • 因为你永远不会改变num!你在递归调用中传递了num - 1,但这不会改变调用者中的num
  • 你说了两次“我尝试改变...”。你有没有尝试过一种改变,然后是另一种?或者您是否同时尝试了两种更改?你能分享你最终得到的确切代码,而不是你开始的代码吗?
  • 欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确描述问题之前,我们无法有效地帮助您。给我们一个特定的问题,你得到的输出,你期望的输出,以及重现它所需的代码。您当前的代码没有运行。
  • 不要将代码放入 cmets。没有办法让它清晰易读。改为编辑问题

标签: python random turtle-graphics


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的建设性回复。递归调用产生了一个我在更改为 while 循环时没有考虑过的问题。我现在对 if 和 while 用法的区别有了更好的理解。
猜你喜欢
  • 1970-01-01
  • 2017-11-10
  • 1970-01-01
  • 1970-01-01
  • 2014-02-11
  • 2020-12-15
  • 1970-01-01
  • 2016-12-29
  • 1970-01-01
相关资源
最近更新 更多