添加数字并使用哨兵退出

Add numbers and exit with a 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)

然而当我运行它时,它在我输入0后并没有打印总数。它只是打印 "Enter a number or 0 to quit",尽管它不是无限循环。

total = 0
while True:
    number = int(input("Enter a number or 0 to quit: "))
    if number == 0:
        break

    total = total + number

print("The total number is", total)

如果您将 break 放在您的其他代码之前,那么循环将结束并且您在 break 之后的代码将不会 运行。

顺便说一句,如果用户没有输入数字,您可以使用 try...except 来捕获错误:

total = 0
while True:
    try:
        number = int(input("Enter a number or 0 to quit: "))
    except ValueError:
        print('Please enter a number')
        continue

    if number == 0:
        break

    total = total + number

print("The total number is", total)

如果数字为 0,则您要做的第一件事是 break,这将结束循环。

您也不会将该数字添加到总数中,除非它为 0,这不是您想要的。

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

您应该在循环内对数字求和,即使它们不是零,但在循环结束后打印总数,而不是在循环内:

total = 0
while True:
    number = int(input("Enter a number or 0 to quit: "))
    total = total + number
    if number == 0:
        break

print ("The total number is", total)

你已经很接近了,但是你有一些缩进问题。

首先,为什么所有这些 print 声明?我猜你想在接受输入之前打印它。为此,下面一行就足够了。

number = int(input("Enter a number or 0 to quit: "))

其次,区分你想做什么,当只有 number==0 和每次迭代要做什么。

您想在每次迭代中使用以下指令,因为您希望每个数字都与 total 相加。所以,把它放在 if 块之外。

total = total + number

而当 number==0 时,您首先想要 print 一些东西,然后 break 循环。

if number == 0:
        print ("The total number is", total)
        break

确保先用 total 添加,然后检查 if 条件,因为一旦打破循环,以后就无法将数字添加到总数中。

所以,解决方案可能是这样的,

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

您的代码不工作的主要原因是因为 break 结束了最内层的循环(在本例中是您的 while 循环)立即,因此中断后的代码行将不会执行。 这可以使用其他人指出的方法轻松解决,但我想建议稍微更改 while 循环的结构。 目前您正在使用:

while True:
    if <condition>:
        break

而不是:

while <opposite condition>:

您可能有这样做的原因,但从您提供给我们的代码中看不到。 如果我们更改您的代码以使用后一种结构,仅此一项就可以简化程序并解决主要问题。 您还多次打印 "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)

唯一的"downside"(只是装饰品)是我们需要在循环之前定义number

还要注意我们要在整个循环结束后打印total数字,因此最后的打印是无缩进的,不会在while 循环的每个循环。