Функция input
в Python: ввод строк, чисел и обработка ошибок
Функция input
запрашивает строку ввода у пользователя и возвращает её в качестве результата. В функцию можно передать строку-приглашение, которая будет выведена на экран перед ожиданием ввода. Введенные данные всегда возвращаются в виде строки, даже если пользователь ввел число.
input()
input(prompt)
prompt
(необязательный) — строка, которая будет выведена на экран перед ожиданием ввода.
Ввод чисел
Функция input
всегда возвращает строку и даже если пользователь ввел число, оно будет возвращено в виде строки. Программа ниже, например, выведет на экран не сумму чисел, а склеенную строку:
a = input("Введите первое число: ")
b = input("Введите второе число: ")
print("Сумма чисел:", a + b)
Введите первое число: 2
Введите второе число: 3
Сумма чисел: 23
Если требуется работать с введенными данными как с числами, нужно явно преобразовать строку в число используя функцию int
или float
:
a = int(input("Введите первое число: "))
b = int(input("Введите второе число: "))
print("Сумма чисел:", a + b)
Введите первое число: 2
Введите второе число: 3
Сумма чисел: 5
Обработка ошибок ввода
Используя функцию input
, вы должны быть готовы к тому, что пользователь может ввести что угодно. Например, программа ожидает ввод числа, а пользователь введет строку. В этом случае программа завершится с ошибкой:
a = int(input("Введите число: "))
Введите число: abc
ValueError: invalid literal for int() with base 10: 'abc'
Чтобы обезопасить программу от таких ошибок, можно либо проверять входные данные перед преобразованием, либо использовать конструкцию try-except
, чтобы перехватить исключение и обработать его.
Проверка перед преобразованием
a = input("Введите число: ")
if a.isdigit():
a = int(a)
print("Число:", a)
else:
print("Это не число")
Такая проверка, однако, не позволит вам ввести отрицательное число или число с плавающей точкой, так как метод isdigit
возвращает True
только для строк, состоящих из цифр, а знак минуса или точка числом не являются. Конечно, можно написать более сложную проверку, учитывающую эти нюансы, но в большинстве случаев проще использовать конструкцию try-except
.
Обработка исключения
try:
a = int(input("Введите число: "))
print("Число:", a)
except ValueError:
print("Это не число")
Повторный ввод при ошибке
Чтобы дать пользователю возможность ввести данные при ошибке повторно, можно использовать цикл while
.
while True:
try:
a = float(input("Введите число: "))
print("Число:", a)
break
except ValueError:
print("Это не число")
Введите число: abc
Это не число
Введите число: 123.5
Число: 123.5
Проверка пустого ввода
Если пользователь ничего не введет и нажмет ⏎, функция input
вернет пустую строку, но не False
или None
. Пустая строка в логическом контексте Python — это ложь, проверку на пустой ввод можно сделать так:
something = input("Введите что-нибудь: ")
if something:
print("Вы ввели:", something)
else:
print("Вы ничего не ввели")
raw_input
и input
В версии Python 2 функция input
работала иначе, чем в Python 3. В Python 2 input
возвращала результат вычисления введенного выражения, а raw_input
возвращала строку. В Python 3 функция input
всегда возвращает строку, а функция raw_input
не существует.
Если вам нужна такая же функциональность (вычисление выражений) в Python 3, можно использовать функцию eval
:
a = input("Введите выражение: ")
print("Результат:", eval(a))
Введите выражение: 2 + 3
Результат: 5
Использовать eval
с пользовательским вводом небезопасно, так как пользователь может ввести произвольный код, который будет выполнен. Поэтому использование eval
не рекомендуется, если вы не уверены в том, что ввод пользователя не представляет угрозы.