添加数字并退出哨兵

Bar*_*oys 8 python loops sentinel

我的任务是使用循环来添加一系列数字,并且该循环需要它的sentinel值0才能停止.然后它应该显示添加的总数.到目前为止,我的代码是:

total = 0
print("Enter a number or 0 to quit: ")
while True:
    number = int(input("Enter a number or 0 to quit: "))
    print("Enter a number or 0 to quit: ")
    if number == 0:
        break
        total = total + number
        print ("The total number is", total)
Run Code Online (Sandbox Code Playgroud)

然而,当我运行它时,我输入后不打印总数0.它只是打印"Enter a number or 0 to quit",虽然它不是一个无限循环.

Mar*_*nen 6

你的代码是不工作的主要原因是因为break结束最内层的循环(在这种情况下你的while循环)立即,从而突破后你的代码行不会被执行.这可以使用其他人指出的方法轻松修复,但我想建议while稍微改变你的循环结构.目前您正在使用:

while True:
    if <condition>:
        break
Run Code Online (Sandbox Code Playgroud)

而不是:

while <opposite condition>:
Run Code Online (Sandbox Code Playgroud)

您可能有这样的理由,但是从您提供给我们的代码中看不到它.如果我们更改您的代码以使用后一种结构,那么这将简化程序并解决主要问题.您还可以"Enter a number or 0 to quit:"多次打印,这是不必要的.你可以把它传递给input那就足够了.

total = 0
number = None
while number != 0:
    number = int(input("Enter a number or 0 to quit: "))
    total += number  # Same as: total = total + number
print("The total number is", total)
Run Code Online (Sandbox Code Playgroud)

唯一的"缺点"(只是化妆品)是我们需要number在循环之前定义.

另请注意,我们要total整个循环结束后打印数字,因此最后的打印是缩进的,并且不会在循环的每个循环中执行while.

  • 这个和其他答案利用了sentinel值为0的事实,因此无条件地将输入数添加到总数中是安全的,并在之后检查循环是否应该退出.这可行,但它可能有点太聪明 - 如果哨兵价值有一天改为-1,那么可能很容易错过我们不仅要改变测试`数字!= 0`到`number!= -1`,但实际上改变了循环的整个结构. (3认同)