我正在尝试编写一个程序,要求用户输入一组浮点值。当用户输入的值不是数字时,我需要给予用户另一次输入该值的机会。如果用户第二次输入非数字,我需要结束循环并输出所有输入数字的总和。预期的输出如下所示:
Enter a number, or 2 non-numbers to quit: 2
Enter a number, or 2 non-numbers to quit: 3
Enter a number, or 2 non-numbers to quit: f
Enter a number, or another non-number to quit: 1
Enter a number, or 2 non-numbers to quit: g
Enter a number, or another non-number to quit: g
The total is 6.0
Enter a number, or 2 non-numbers to quit: g
Enter a number, or another non-number to quit: g
The total is 0
下面是我的代码:
try:
#ask user for to input set of floating-point values
num = input("Enter a number, or 2 non-numbers to quit: ")
#keep track of sum, counts of inputs that are not floats
sum = 0
count = 0
#while the input is a digit and the non-digit input is less than 2, enter loop
while num.isdigit() and count < 2:
sum += float(num)
num = input("Enter a number, or 2 non-numbers to quit: ")
if count == 2 and not num.isdigit():
break
print("The total is ", sum)
except ValueError:
print("Invalid input. Please enter a number")
这个程序在第一个例子中输出5.0而不是6.0,因为它在一个无效输入后对值进行求和。我可以做什么改变,以便它要求用户输入另一个非数字,并继续添加到总数中,直到用户连续输入两个非数字?
3条答案
按热度按时间1bqhqjot1#
你的程序在一个非数字输入后结束,因为你在
while
条件中检查了num.isdigit()
。只要你输入一个.isdigit()
不返回True
的输入,循环就结束了。相反,考虑在 * 无限循环 * 中阅读数字,然后决定如何处理它。请注意,当字符串包含小数点或负号时,
.isdigit()
返回False
,这两者都可能出现在有效的float
s中。您应该使用try..except
来捕获非数字输入的情况。这给出了所需的输出:
注:我将
sum
变量重命名为total
。你不应该将变量命名为sum
,因为这会导致它隐藏内置的sum()
函数。sqxo8psd2#
当用户输入
"f"
时,num.isdigit()
为false,它退出while循环并点击print。与其直接将输入存储在
num
中,不如先尝试存储在另一个变量中,只有在确定它是一个数字后才将其添加到求和中。zmeyuzjn3#
使用类型函数,找到他们输入的类型,然后创建一个if函数。如果是float,则程序继续,如果是str,则程序通过中断while true循环而停止。
另外,我建议你不要在if语句中使用and,它给我带来了很多问题,有时候并不能完全工作。