【问题标题】:Using int() with decimal numbers使用带十进制数的 int()
【发布时间】:2015-11-03 18:22:27
【问题描述】:

我有一段代码用于验证用户输入的数据,以确保只采用大于零的数字,如下所示:

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:另外,谁能准确地解释一下为什么会发生这种情况?

【问题讨论】:

  • 我想我是怎么做到的,将 int 更改为 float 并假设一切都是 float 数据类型?当然,您可以尝试 int、throw、尝试 float、throw
  • 这是模糊的。请发布工作代码、示例输入、预期输出和实际结果。
  • 如果用户输入“0.5”,你想要什么结果?
  • 用户提出问题后再也回不来的那一刻……
  • 对不起,我有一些家庭问题。我现在回来了。我想要做的是让用户能够给我任何输入,但是让我的程序抛出一个错误,告诉用户如果他们输入了数字以外的任何内容,他们做错了什么。我现在已经编辑了问题以包含工作代码。

标签: python python-2.7 floating-point decimal


【解决方案1】:

使用浮点数代替整数。 浮点数允许小数,对于不是数字的字符串会引发错误。

【讨论】:

  • 或使用 int(float(user_input)) 获取浮点数的 int 部分,如果这是你想要的。我们正在抓住稻草,因为问题不明确。
【解决方案2】:

至于为什么会发生这种情况的部分:

使用 int(value) 将始终向下舍入该值。即使是 0.99 也会变成 0,这就是您的系统捕获小数的原因。正如 Martín Muñoz del Río 所建议的那样,使用 float 不会舍入,这就是它起作用的原因。

作为旁注,使用

if num == True:

在您的代码中可以简化为

if num:

因为您之前已经将 num 设置为布尔值 (num = True)。

另外,您的代码有缩进错误(while 循环下的代码没有缩进),但我想这没什么大不了的;)

希望能帮到你!

【讨论】:

  • 在stackoverflow中输入代码时出现缩进错误。此外,它正在捕获大于一的小数 - 例如 1.2、6.66 等。知道为什么会发生 吗?
猜你喜欢
  • 2014-04-20
  • 1970-01-01
  • 2015-09-17
  • 1970-01-01
  • 2015-01-21
  • 2012-01-05
  • 2013-04-01
  • 2016-07-19
  • 2020-06-03
相关资源
最近更新 更多