Функция input
в Python
Функция input
запрашивает строку ввода у пользователя и возвращает её в качестве результата. В функцию можно передать строку-приглашение, которая будет выведена на экран перед ожиданием ввода. Другими словами, функция input
позволяет получать данные, введенные с клавиатуры, и использовать их в программе. Введенные данные всегда возвращаются в виде строки, даже если пользователь ввел число.
Вызов и аргументы input
Функция input
может быть вызвана без аргументов или с одним аргументом. В первом случае, на экран будет выведена строка-приглашение. Как правило, это используется для того, чтобы пользователь знал, что именно от него требуется ввести:
name = input("Как вас зовут? ")
print("Привет", name)
Как вас зовут? Иван
Привет Иван
Во втором случае, когда функция вызывается без передачи аргумента, она будет ожидать ввода данных с клавиатуры без каких-либо подсказок:
name = input()
print("Привет", name)
Иван
Привет Иван
Программы без строки-приглашения могут быть неудобны для пользователя, так как он не знает, какие именно данные нужны программе. Как правило, лучше всегда передавать строку-приглашение и описывать, что требуется ввести.
Ввод чисел
Как было сказано ранее, функция 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 — это ложь равна False
, проверку на пустой ввод можно сделать так:
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
не рекомендуется, если вы не уверены в том, что ввод пользователя не представляет угрозы. Если быть честными, ввод пользователя вообще никогда не следует использовать в eval
. Даже с близкими родственниками.