为什么以下计算结果为 python 中的 ValueError?

Why does the following evaluate to a ValueError in python?

我们刚才在编写代码,遇到了一个小问题。我们想尝试将浮点数转换为整数

代码如下:

x = int(input(())
print x

我们尝试了代码并输入了 5.5。它评估为 ValueError。从逻辑上讲,它在逻辑上是合理的。但是如果我们尝试下面的代码:

x = int(float(input(()))x = int(5.5),计算结果为 5。

为什么会这样?

这是因为input()将值作为字符串数据类型。当您使用 "5" 然后转换为 int() 工作但将字符串输入 "5.5""5.5" 转换为 int() 将给出错误,因为这个python 不支持。在这种情况下,您必须先将其转换为 float(),然后再将其转换为 int() 以获得整数值。

在第一种情况下,您正在调用 int("5.5"),因为 input() returns 是一个字符串。这是一个 ValueError 因为 5.5 不是一个整数,python 的设计者决定不做任何隐式转换。

在第二种情况下,你关心调用 float("5.5"),它是 5.5,因为 "5.5" 可以按照你的要求转换为 float,然后调用 int(5.5),这是转换的结果一个浮点数到一个整数(python 为此使用截断;如果这不是你想要的,你可以调用 round() 代替)。

第三种情况与第二种情况的第二步相同

我认为 x = int(5.5) 没有导致任何值错误。第一个问题是,是的,您不能直接将输入结果与 int 或 float 进行比较。为了确保它让我们做这个小实验:

>>> x = input()
>>? 20
>>> print(type(x))
>>> <class 'str'>

从这个实验中,你看到即使你输入 "any numerical" 来输入,它也会 return 你的输入作为字符串。让我们检查一下 int(input()) 操作发生了什么:

    x = int(input())
    5.5
Traceback (most recent call last):
  File "<input>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '5.5'

当您尝试 'directly' 将浮点数转换为整数时会出现此问题。 Python 无法将字面上的 float 直接转换为 int。还有另一个技巧可以帮助解决这个问题,方法是将 float 指定为数字原始数据类型。这是发生在什么时候,让我们看看我们是否将 float 添加为另一个解析器:

x = int(float(input()))
5.5
print(type(x))
<class 'int'>

解决方法很简单,直接将你的输入解析为int,然后进行比较即可:

x = int(float(input()))
if x == 5 or x == int(5.5):
    #do something

希望对您有所帮助。祝你好运!