使用带十进制数的 int()
Using int() with decimal numbers
我有一段代码用于数据验证用户输入以确保只取大于零的数字,如下所示:
while True:
x = raw_input("Please enter a number greater than zero.")
try:
x = int(x)
num = True
except ValueError:
print "Sorry, you entered an invalid input. Please ensure you enter only numbers greater than zero."
if x > 0:
if num == True:
break
elif x <= 0:
print "Sorry, you entered an invalid input for time. Please ensure you enter only positive numbers. \n"
但是,此语句正在捕获大于零的十进制数,我想允许它通过。我应该改变什么以防止这种情况发生?
P.S:还有,谁能准确解释一下为什么会发生这种情况?
使用 float 而不是 int。
Float 允许小数,但对于不是数字的字符串会引发错误。
至于为什么这部分发生了:
使用 int(value) 将始终向下舍入值。即使是 0.99 也会变成 0,这就是您的系统捕捉小数点的原因。按照 Martín Muñoz del Río 的建议,使用 float 不会舍入,这就是它起作用的原因。
作为旁注,使用
if num == True:
您的代码可以简化为
if num:
因为您之前已经将 num 设置为布尔值 (num = True)。
另外,你的代码有一个缩进错误(while 循环下的代码没有缩进),但我想这没什么大不了的 ;)
希望能帮到你!
我有一段代码用于数据验证用户输入以确保只取大于零的数字,如下所示:
while True:
x = raw_input("Please enter a number greater than zero.")
try:
x = int(x)
num = True
except ValueError:
print "Sorry, you entered an invalid input. Please ensure you enter only numbers greater than zero."
if x > 0:
if num == True:
break
elif x <= 0:
print "Sorry, you entered an invalid input for time. Please ensure you enter only positive numbers. \n"
但是,此语句正在捕获大于零的十进制数,我想允许它通过。我应该改变什么以防止这种情况发生?
P.S:还有,谁能准确解释一下为什么会发生这种情况?
使用 float 而不是 int。 Float 允许小数,但对于不是数字的字符串会引发错误。
至于为什么这部分发生了:
使用 int(value) 将始终向下舍入值。即使是 0.99 也会变成 0,这就是您的系统捕捉小数点的原因。按照 Martín Muñoz del Río 的建议,使用 float 不会舍入,这就是它起作用的原因。
作为旁注,使用
if num == True:
您的代码可以简化为
if num:
因为您之前已经将 num 设置为布尔值 (num = True)。
另外,你的代码有一个缩进错误(while 循环下的代码没有缩进),但我想这没什么大不了的 ;)
希望能帮到你!