我对这个哨兵值的实现有什么问题?

时间:2021-03-13 03:00:21

标签: python

问题在于:该程序读取浮点值序列并计算它们的平均值。零值用作标记​​。改进循环,只有在用户输入字母 Q 时才退出循环。

这是我的代码:

total = 0.0
count = 0

# TODO: Fix this program so that it only stops reading numbers
# when the user enters Q.

value = float(input("Enter a real value or Q to quit: "))
while value != "Q" :
   total = total + value
   count = count + 1
   value = float(input("Enter a real value or Q to quit: "))
  
avg = total / count
print(avg)

这是我的错误信息: 文件“/tmp/codecheck.zUZpqo8apX/computesum.py”,第 11 行,在 value = float(input("输入一个实际值或Q退出:")) ValueError: 无法将字符串转换为浮点数:'Q'

1 个答案:

答案 0 :(得分:1)

关于您的代码:

value = float(input("Enter a real value or Q to quit: "))

如果您想处理像 Q 这样的非浮点值,此时您应该将其视为 string,而不是立即尝试将其转换为 {{1 }}(如您所见,float 时会失败)。

换句话说,类似于:

Q

如果您输入的值既不是value = input("Enter a real value or Q to quit: ") while value != "Q" : total = total + float(value) count = count + 1 value = input("Enter a real value or Q to quit: ") 也不是有效的Q,但您可以通过捕获异常并调整行为来处理此问题:< /p>

float

如果在这种情况下 value = input("Enter a real value or Q to quit: ") while value != "Q" : try: total = total + float(value) count = count + 1 except ValueError: print("Not a valid float value, try again.") value = input("Enter a real value or Q to quit: ") 调用失败,则 float()total 都不会更新,count 块将被执行,让用户知道有一个问题。


我要提到的另一件事是,您应该考虑第一件事 是输入 except 的情况。在这种情况下,Q 仍将设置为零,因此您可能想除以它。相反,您可以执行以下操作:

count