我有一个空的列表n。n应该有10个来自用户的浮点值。如果用户输入e,代码应该会跳出循环。如果用户输入任何其他文本(不是数字),它应该显示"Not a number“,并继续从用户获取值。我尝试了以下代码。当我输入e作为输入时,代码不会跳出for循环,总是转到else块,并显示"Not a number“。我该如何纠正这个问题呢?
n = []
for i in range(10):
try:
inp_val = float(input('Enter value (e to exit)'))
n.append(inp_val)
except ValueError:
if inp_val == 'e'
break
else:
print("not a number")
continue
发布于 2016-03-06 03:09:10
inp_val = float(input('Enter value (e to exit)'))
这是这样执行的:
temp_val = input('Enter value (e to exit)')
temp_val = float(temp_val)
inp_val = temp_val
因此,由于您正在尝试转换ValueError
,因此在引发'e'
时,尚未分配inp_val
。因此,当您在except
块中检查inp_val
的值时,并不是在比较输入的值。
为此,您需要单独存储输入的字符串:
try:
text_input = input('Enter value (e to exit)')
inp_val = float(text_input)
n.append(inp_val)
except ValueError:
if text_input == 'e':
break
else:
print("not a number")
continue
发布于 2016-03-06 03:10:01
inp_val
是用float
值设置的,因此它永远不能为e
。一种解决方法是将inp_val
赋值给输入值,并在追加列表时将其转换为浮点数:
n = []
for i in range(10):
try:
inp_val = input('Enter value (e to exit)')
n.append(float(inp_val))
except ValueError:
if inp_val == 'e'
break
else:
print("not a number")
continue
发布于 2016-03-06 03:10:19
如果你想确保你得到10个数字,使用一个while loop,它会一直循环直到你在列表中得到10个数字,并且忘记让用户退出,在此之前,如果我有一个空的列表n,那么退出是没有意义的。n应该有10个来自用户的浮点值。
n = []
while len(n) < 10:
try:
inp_val = float(input('Enter value'))
n.append(inp_val)
except ValueError:
print("not a number")
当len(n) < 10
赋值为False时,你将在列表中存储10个浮点数,你不能使用range来做同样的事情,因为当迭代结束时,就没有回头路了。
要纠正你自己的代码,你只需要做几处修改,只有在你检查输入是否等于e
之后才进行强制转换,如果它是break,或者试图将浮点数附加到列表中,else/continue在你自己的代码中也是多余的,你无法中断并到达打印,并且无论何时到达代码的最后一行,循环都将继续:
n = []
for i in range(10):
try:
inp_val = (input('Enter value (e to exit)'))
if inp_val == "e":
break
n.append(float(inp_val))
except ValueError:
print("not a number")
但同样,如果你想确保你得到10个数字,那么这个或任何使用range的逻辑都不会起作用,你需要while。
https://stackoverflow.com/questions/35818500
复制相似问题