了解 break 语句在 zybook 中的工作原理 python 问题 5.10.1

Understanding how a break statement functions in zybook question for python 5.10.1

提问人:Ben Turner 提问时间:10/8/2023 最后编辑:Ben Turner 更新时间:10/8/2023 访问量:48

问:

这是一个周末,我的教授不回复电子邮件,我们在课堂上复习了休息语句,我确信我理解了它,但我总是得到这样的错误问题(它希望你显示输出):

    stop = int(input())
    result = 0
    for a in range(3):
        for b in range(4):
            result += a + b
        print(result)
        if result > stop:
            break

我用输入“17”把它放到 Pycharm 中(我之前尝试过很多次自己得到答案,但 zybooks 在他们的挑战活动中给你随机的问题,它没有给出一个有用的解释),因为我想尝试逆向工程为什么解决方案是这样的, 输出为:

6
16
30

首先,我不确定为什么在它中断后它会输出最后一个数字,因为外部“for”循环没有 print 语句。如果我忽略这一点,我得到的输出是:

6 16

18

我甚至写下了我认为RAM如何存储这些值并更改它们(我的教授说,如果你遇到麻烦,这是一个好主意,因为它有助于逐步完成计算机所采取的过程。下面包含该图片的链接,如果它没有意义,我很抱歉。https://imgur.com/a/t5o24Mo

我不是想作弊,这个作业是星期天到期的,如果可以的话,我会给我的教授发电子邮件寻求帮助。

我试图手动遍历每个迭代,并弄清楚每个变量是什么以及它如何改变每个迭代。我正确地完成了外循环的前 2 次迭代,但 break 语句是我遇到问题的地方。

python for 循环 输出 中断

评论

0赞 John Gordon 10/8/2023
18 将是正确的答案,如果中断在循环内。但事实并非如此,因此该循环始终运行其完整的四次迭代。for b in range(4):
0赞 Ben Turner 10/8/2023
啊,所以 break 语句在完成所有四次迭代之前不会执行,并且循环再次开始,即使结果已经超过了 stop 定义的限制,因为 break 语句是针对循环的。了解到我必须更加注意缩进和行位置如何改变代码的行为。非常感谢!for b in range(4):for a in range(3):for a in range(3):

答:

1赞 John Gordon 10/8/2023 #1

如果你不确定代码为什么要做某事,一个帮助你弄清楚的简单方法是添加更多的 print 语句,这样你就可以在执行的每个步骤中看到变量。

像这样的东西:

for a in range(3):
    print("At the top of a range loop, a is:", a)
    for b in range(4):
        print("At the top of b range loop, b is:", b)
        print("a+b is:", a+b)
        print("Before adding, result is:", result)
        result += a + b
        print("After adding, result is now:", result)
    if result > stop:
        print("result", result, "is bigger than stop", stop, "so we will break the loop")
        break
    else:
        print("result", result, "is not bigger than stop", stop, "so the loop will keep going")

评论

0赞 Ben Turner 10/8/2023
我一定会使用这个绝妙的主意,这很有帮助。