Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我实现这个sentinel值有什么问题?_Python - Fatal编程技术网

Python 我实现这个sentinel值有什么问题?

Python 我实现这个sentinel值有什么问题?,python,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 valu

问题是:此程序读取浮点值序列并计算其平均值。零的值用作哨兵。改进循环,使循环仅在用户输入字母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行,在 值=浮点(输入(“输入一个实际值或Q以退出:”) ValueError:无法将字符串转换为float:'Q'

关于您的代码:

value=float(输入(“输入一个实际值或Q以退出:”)
如果要处理像
Q
这样的非浮点值,那么此时应将其视为字符串,而不是立即尝试将其转换为
float
(如您所发现的那样,
Q
将失败)

换句话说,类似于:

value=input(“输入实际值或Q以退出:”)
而价值!=“Q”:
总计=总计+浮动(值)
计数=计数+1
值=输入(“输入实际值或Q以退出:”)

如果您输入的值既不是
Q
,也不是有效的
float
,则仍然会导致问题,但您可以通过捕获异常并调整行为来处理此问题:

value=input(“输入实际值或Q以退出:”)
而价值!=“Q”:
尝试:
总计=总计+浮动(值)
计数=计数+1
除值错误外:
打印(“不是有效的浮点值,请重试。”)
值=输入(“输入实际值或Q以退出:”)
如果在这种情况下
float()
调用失败,则
total
count
都不会更新,并且将执行
except
块,让用户知道有问题


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

如果计数==0:
打印(“没有输入值,因此没有平均值”)
其他:
平均值=总数/计数
打印(平均值)

为什么不在测试输入是否等于
'Q'
后将其转换为浮点?你的
float()
太快了。我不明白……谢谢。除此之外,我们还没有了解到,但第一个答案是有效的。谢谢你的帮助。这本书教给我的最重要的事情之一就是如何寻求帮助。当你看到人们改进了你大学课本上的代码,你开始意识到即使是大学教授也会犯错误时,这简直是疯了。@hunt67241你在说教授犯了什么错误?@Kelly Bundy教授写了那本书,并为这个问题写了大部分代码。我唯一更改的是while值!=0到while值!=paxdiablo指出,如果输入的字符串值不是“Q”,代码仍然会崩溃。因此,本质上,代码并不完美。这仍然是一种错误,我觉得我从paxdiablo那里学到了更多关于这个问题的知识,而不是为每个人编写Pyhon的教授们。我想我应该将这句话改为“我想代码总是可以改进的,不管你有多少经验。”@hunt67241问题是,在你做出更改之前,代码一直工作正常(因为0是有效的
float
)。所以本质上,你引入了bug。这是一个很好的观点。。。我没有想到这一点。这段代码本来就是有缺陷的,所以如果他们在第一段代码中添加了异常。