Функция 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. Даже с близкими родственниками.