Почему следующее оценивает ValueError в python? - PullRequest
1 голос
/ 08 января 2020

Мы что-то кодировали некоторое время go, и мы столкнулись с небольшой проблемой. Мы хотели попытаться преобразовать числа с плавающей точкой в ​​целые числа

Вот код:

x = int(input(())
print x

Мы попробовали код и поставили 5.5. Это оценивается до ValueError. По логике это звук в логи c. Но если мы попробуем следующий код:

x = int(float(input(())) ИЛИ x = int(5.5), он получит значение 5.

Почему это происходит?

Ответы [ 3 ]

2 голосов
/ 08 января 2020

В первом случае вы вызываете int ("5.5"), потому что input () возвращает строку. это ошибка ValueError, потому что 5.5 не является целым числом, и разработчики python решили не выполнять неявное приведение.

Во втором случае вам нужно вызвать float ("5.5"), то есть 5.5, потому что «5.5» можно преобразовать в число с плавающей точкой, как вы просили, а затем int (5.5), что является результатом преобразования числа с плавающей точкой в ​​целое (python использует для этого усечение; вместо этого вы можете вызвать round (), если это не так. что вы хотите).

Третий случай такой же, как второй шаг второго случая.

2 голосов
/ 08 января 2020

Это из-за input () принимает значение как строковый тип данных. Когда вы берете "5" , тогда преобразование в int () работает, но преобразование строкового ввода "5.5" в int () приведет к ошибке, поскольку это не поддерживается python. В таком случае вы должны сначала преобразовать его в float (), а затем int () , чтобы получить целочисленное значение.

0 голосов
/ 08 января 2020

Я думаю, x = int(5.5) не привело к ошибке значения. Первая проблема, да, вы не можете напрямую сравнить входной результат с int или float. Чтобы убедиться в этом, давайте проведем этот небольшой эксперимент:

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

Из этого эксперимента вы увидите, что даже если вы введете «любое число» для ввода, он вернет ваш ввод в виде строки. И давайте проверим, что происходит с операцией 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'

Эта проблема возникает, когда вы пытаетесь «напрямую» преобразовать число с плавающей точкой в ​​целое число. 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

Надеюсь, это поможет вам. Удачи!

...