#python #if-statement
#python #if-оператор
Вопрос:
num1 = int(input("Enter the first integer: "))
num2 = int(input("Enter the second integer: "))
if (str(num1).isdigit()) and (str(num2).isdigit()):
if num1>num2:
print(num2, num1)
else:
print(num1, num2)
else:
print("That is not an integer!")
Ошибка, которую я получаю:
Обратная трассировка (последний последний вызов):
Файл «C:Usersshrad.spyder-py3temp.py «, строка 183, в num2 = int(ввод(«Введите второе целое число: «))
Ошибка значения: недопустимый литерал для int() с основанием 10: ‘2.2’
Комментарии:
1. 2.2 — это float, а не int, но вы пытаетесь преобразовать его в int.
2. Ваш код отлично работает в моем редакторе pycharm. просто удалите int и напишите num1 = input(«Введите первое целое число: «).
Ответ №1:
Вы пытаетесь преобразовать в значение int до того, как проверите, состоит ли оно из цифр. Подождите, пока вы не выполните этот тест, прежде чем выполнять преобразование.
num1 = input("Enter the first integer: ") # keep it as a string for now
num2 = input("Enter the second integer: ")
if num1.isdigit() and num2.isdigit():
num1 = int(num1) # NOW convert to int
num2 = int(num2)
if num1>num2:
print(num2, num1)
else:
print(num1, num2)
else:
print("That is not an integer!")
Кстати, имейте в виду, что ваш isdigit
тест не будет работать для целых отрицательных чисел.
Ответ №2:
int()
будет принимать только целое число — то есть число без десятичной точки, поэтому оно не будет принимать 2.2. Вы, вероятно, захотите использовать float() .
Ответ №3:
2.2
является float
, а не int
an, но вы пытаетесь преобразовать его в int
.
Ответ №4:
Ну, вы знаете, что они говорят: «никогда не доверяйте пользовательскому вводу». Даже если пользователь — это, ну, вы сами.
Оператор: input("Enter the first integer: ")
возвращает строку (ту, которую вы ввели), которая, в свою очередь, передается в int()
, которую пытаются преобразовать в целое число.
При вводе строки в качестве входных данных функция int требует, чтобы эта строка строго отображала целое число (а не число с плавающей запятой, как, скажем, 2.2)
Вы можете поэкспериментировать с самой первой строкой: num1 = int(input("Enter the first integer: "))
затем print(num1)
, чтобы выяснить, как это работает для себя; когда это вызывает, а когда нет.
Проблема в опубликованном вами коде заключается в том, что вы сначала пытаетесь преобразовать в int, а позже проверяете, действительно ли входные данные были int. Итак, интерпретатору Python пришлось сначала столкнуться с проблемой и использовать свой собственный автоматический способ сообщить об этом: исключение.
Способ обойти это может заключаться в том, чтобы отложить покрытие string -> int до тех пор, пока это действительно не понадобится. К счастью, это только одно место в сравнении, которое затем станет: if int(num1) > int(num2):
. Это избавило бы вас от проблем с преобразованиями int () в начале, плюс обратные преобразования в строку для проверки int ( if (str(num1).isdigit()) and (str(num2).isdigit()):
может просто стать if num1.isdigit() and num2.isdigit():
, поскольку num1, num2 еще не были скрыты. )
В качестве альтернативы, если вы хотите, чтобы десятичные числа с запятой преобразовывались без ошибок, вы можете использовать float()
функцию (которая также может удобно преобразовывать значение int).
Вы также можете попробовать использовать обработку исключений, например:
try:
num1 = int(input("Enter the first integer: "))
num2 = int(input("Enter the second integer: "))
except Exception as e:
print("Error converting input to integers", e)
что, в свою очередь, избавит вас от необходимости проверки приведенных ниже входных данных…