【问题标题】:Get input from users until it's negative, and then calculate their sum.(using while loop)从用户那里获取输入,直到它为负数,然后计算它们的总和。(使用 while 循环)
【发布时间】:2022-01-27 18:11:10
【问题描述】:

所以练习是从用户那里获取输入,直到他们输入一个负数,然后计算负数之前的数字总和。 (使用 while 循环)。

while True:
a = 0
summ = 0
while a >= 0:
    a = int(input("enter a number: "))
    summ = summ + a
    if a < 0:
        print(summ)

这是我为此练习编写的代码,但问题是它也计算了负数。 我对python很陌生,这是我应该做的python练习之一,以了解更多关于算法的知识。

【问题讨论】:

  • 第一行应该(可能?)被删除。然后将summ = summ + a 向下移动 2 行。它应该在if 语句的下方。在if 语句中应该有一个break。否则循环继续。
  • 在输入下方添加否定无检查条件

标签: python python-3.x algorithm while-loop range


【解决方案1】:

您根本不需要ifwhile 已经检查了条件。无需在体内再次检查。

这里有两种方法可以解决您的问题。

第一种选择:通过减法取消额外的加法

a = 0
summ = 0
while a >= 0:
    a = int(input("enter a number: "))
    summ = summ + a
summ = summ - a
print(summ)

第二种选择:只添加非负数

prompt = "enter a number: "
summ = 0
a = int(input(prompt))
while a >= 0:
    summ = summ + a
    a = int(input(prompt))
print(summ)

【讨论】:

    【解决方案2】:
    allNonNegative = True
    summ = 0
    while allNonNegative:
        a = int(input("enter a number: "))
        if a >= 0:
            summ = summ + a
        else:
            allNonNegative= False
            print(summ)
    

    【讨论】:

    • 我建议使用比state 更明确的名称。 while state: 根本不明确。像while allNonNegative: 这样更明确的东西会让停止条件实际上是什么更清楚。
    • 已接受建议,已编辑答案
    【解决方案3】:

    您需要使用 IF 语句来检查负值

    summ = 0
    while True:
        a = int(input("enter a number: "))
        if a < 0:
            break
        summ = summ + a
        print(summ)
    

    【讨论】:

    • 您从while 中删除了条件,将其隐藏为循环主体中间的break 语句。这只是混淆了代码。
    • @Stef 有没有更简单的方法来模拟“do-while 循环”?
    • 我想“更容易”在这里主要是一个偏好问题。但是看看OP的代码。乍一看,很明显循环将输入的数字相加,直到数字为负。确切的细节,例如是否将负数添加到总和中,需要更仔细地阅读,但主要思想一目了然。使用您的代码,我觉得情况恰恰相反-乍一看,发生了什么并不明显,因为“虽然为真”并没有给出任何提示。因此,在我们了解其主要思想之前,需要非常仔细地阅读您的代码。
    • 请注意,使用“while True / if break”被引用为拒绝 do-while PEP 的原因:mail.python.org/pipermail/python-ideas/2013-June/021610.html。尽管如此,使用明确的条件使代码更易于阅读,我认为这是值得的。
    • 感谢提供信息,我想我还没有完全忘记C语言的便利性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 2011-10-31
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    相关资源
    最近更新 更多