Давайте дружить в Телеграме: рассказываем про новые фичи, общаемся в комментах, прислушиваемся к вашим идеям Подписаться

Оператор ввода в Python: руководство

Роман Андреев
Роман Андреев
Технический писатель
29 сентября 2022 г.
1908
7 минут чтения
Средний рейтинг статьи: 1.2

Интерактивные возможности в Python обеспечиваются за счет ряда инструментов, одним из которых является функция input(). Ее также называют оператор ввода в Python. Главное назначение этого оператора заключается в том, чтобы принимать пользовательский ввод. Можно сказать, что он наполняет программы в Python смыслом, ведь без взаимодействия пользователя с приложением толку от последнего немного.

Как работает оператор ввода данных Python

Эта функция работает следующим образом:

user_name = input('Введите свое имя: ')
user_age = int(input('Сколько вам лет? '))

Сначала мы просим пользователя указать имя, а затем возраст, и оба этих ввода реализуются с помощью специального оператора, который принимает введенные значения и записывает их в переменные user_name и user_age. А далее мы работаем с этими значениями. Например, можно создать условие для входа на сайт по возрасту (для этого нам понадобится перевести значение возраста в целое число при помощи инструкции int()) и написать приветствие, используя введенное имя пользователя:

if user_age < 18:
    print('Извините, но вход только для совершеннолетних')
else:
    print('Добро пожаловать на сайт,', user_name, '!')

А что будет, когда int() примет пустое значение? Например, если пользователь нажмет Enter. Допишем программу и посмотрим:

user_name = input('Введите свое имя: ')
user_age = int(input('Сколько вам лет? '))
if user_age < 18:
    print('Извините, но вход только для совершеннолетних')
else:
    print('Добро пожаловать на сайт,', user_name, '!')
    input('Нажмите Enter для перехода в меню')
    print('Добро пожаловать в меню')

При нажатии Enter программа переходит к следующей строке кода. А если ее нет, то выполняется выход из программы: такова логика работы функции. Поэтому последняя строка может быть такой:

input('Нажмите Enter для выхода')

И, если никаких строк в программе больше нет, произойдет выход. Вот полная версия программы:

user_name = input('Введите свое имя: ')
user_age = int(input('Сколько вам лет? '))
if user_age < 18:
    print('Извините, но вход только для совершеннолетних')
else:
    print('Добро пожаловать на сайт,', user_name, '!')
    input('Нажмите Enter для перехода в меню')
    print('Добро пожаловать в меню')
input('Нажмите Enter для выхода')

Если пользователь укажет разрешенный возраст, то увидит текст в блоке else, а если нет, то только в блоке if, а затем завершающее сообщение, которое высветится в конце для всех: Нажмите Enter для выхода. В программе оператор ввода используется 4 раза, причем в двух последних случаях он не принимает никаких значений, а нужен для перехода к следующей части кода и для выхода из программы.

input() в интерпретаторе

Выше мы написали готовую программу, но можно делать это построчно и в интерпретаторе Python. Правда в этом случае, чтобы переходить к написанию следующих строк кода, нам придется вводить данные сразу же:

>>> user_name = input('Введите свое имя: ')
Введите свое имя: Вася
>>> user_age = int(input('Сколько вам лет? '))
Сколько вам лет? 18

И так далее. Код тоже будет исполняться, а значения записываться в переменные, и таким способом можно тестировать отдельные блоки. Только помните, что значения будут сохраняться только до выхода из интерактивного режима, поэтому желательно параллельно дублировать код в файл с расширением .py.

Методы преобразования ввода: int(), float(), split()

В некоторых случаях необходимо преобразовать введенные данные в определенный тип: например, в целое число, рациональное число с запятой или в строку. С первым типом преобразования мы уже познакомились в прошлом примере:

user_age = int(input('Сколько вам лет? '))

Инструкция int() переводит значение в целочисленное, позволяя интерпретатору Python оперировать с ним как с числовым типом (цифры, введенные по умолчанию, не являются такими объектами, поэтому Питону нужна дополнительная инструкция). Добавим, что присвоение числовым переменным целочисленного значения реализуется и более длинным способом:

user_age = input('Сколько вам лет? ')
user_age = int(user_age)

Конечно, первый способ удобнее, но зато подробная запись более наглядна, что полезно для понимания работы функций и инструкций.

Для преобразования ввода в рациональные числа с плавающей запятой используется инструкция float():

height = float(input('Введите свой рост в формате 1.72: '))
weight = float(input('Введите точный вес (до 0,1 кг) в формате 80.3: '))

Или другим способом:

height = input('Введите свой рост в формате 1.72: ')
height = float(height)
weight = input('Введите точный вес (до 0,1 кг) в формате 80.3: ')
weight = float(weight)

Теперь программа преобразует введенные числа в числа с плавающей запятой и затем сможет оперировать ими в расчетах.

Инструкция split() позволяет преобразовывать вводимые слова в списки. Вот как она работает:

animals = input('Введите названия любимых животных через пробел: ').split()
print('Вот они в виде списка:', animals)

Получим такой вывод:

Введите названия любимых животных через пробел: кот собака заяц лиса медведь
Вот они в виде списка: ['кот', 'собака', 'заяц', 'лиса', 'медведь']

Боремся с ошибками ввода

Нередко случается, что пользователи ошибаются при вводе или вводят некорректные символы намеренно. В этом случае неверный ввод может спровоцировать вылет:

>>> height = float(input('Введите свой рост в формате 1.72: '))
Введите свой рост в формате 1.72: 1ю72
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    height = float(input('Введите свой рост в формате 1.72: '))
ValueError: could not convert string to float: '1ю72'

Появилась ошибка, в описании которой указано, что интерпретатор не может преобразовать строку в число. Поэтому для таких случаев мы должны предусмотреть защиту. Реализуется она с помощью условной конструкции try-except:

try:
    height = float(input('Введите свой рост в формате 1.72: '))
except ValueError:
    height = float(input('Введите свой рост в указанном формате: '))

Теперь вспомним нашу первую программу и сделаем более надежной и ее, переписав блок кода с вводом возраста таким образом:

try:
    user_age = int(input('Сколько вам лет? '))
except ValueError:
    user_age = int(input('Введите число: '))

Однако при повторной ошибке ввода такие программы всё равно вылетят. Для максимальной устойчивости можно организовать ввод с использованием цикла:

while True:
    try:
        height = float(input('Введите свой рост в формате 1.72: '))
        break
    except ValueError:
        print('Давайте ещё разок,')
        continue
print('Спасибо!')

Мы использовали цикл while с инструкциями break и continue. Теперь программа работает так: если введенное значение корректно, цикл прерывается (действует оператор break) и программа переходит к завершающему блоку кода: print('Спасибо!'). Если же введенное значение нельзя преобразовать в число с плавающей запятой, мы обрабатываем ошибку ValueError при помощи исключения except и инструкции continue. Последняя не позволяет программе вылетать после очередной ошибки ввода, а возвращает ее к началу цикла. В результате, поскольку условие try не выполняется, программа будет предлагать пользователю ввести данные до тех пор, пока он не сделает это корректно.

Для устойчивой к ошибкам программы с возрастом полный код будет выглядеть так:

user_name = input('Введите свое имя: ')
while True:
    try:
        user_age = int(input('Сколько вам лет? '))
        break
    except ValueError:
        print('А если серьезно?')
        continue
if user_age < 18:
    print('Извините, но вход только для совершеннолетних')
else:
    print('Добро пожаловать на сайт,', user_name, '!')
    input('Нажмите Enter для перехода в меню')
    print('Добро пожаловать в меню')
input('Нажмите Enter для выхода')

Конечно, в этих программах вы сможете ввести любые цифры (и рост 3 метра, и возраст 300 лет), но, чтобы заставить пользователей вводить реалистичные данные, потребуется использовать диапазоны значений. Впрочем, это выходит за рамки данной статьи, а с вводом и с исключением ошибок ввода мы уже разобрались.

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону