- Оператор ввода в Python: руководство
- Как работает оператор ввода данных Python
- input() в интерпретаторе
- Методы преобразования ввода: int(), float(), split()
- Боремся с ошибками ввода
- Пользовательский ввод (input) в Python
- Чтение ввода с клавиатуры
- Преобразование вводимые данные
- Input() → int
- Input() → float
- Input() → list (список)
- Ввод в несколько переменных
Оператор ввода в Python: руководство
Интерактивные возможности в 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 "", line 1, in
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 лет), но, чтобы заставить пользователей вводить реалистичные данные, потребуется использовать диапазоны значений. Впрочем, это выходит за рамки данной статьи, а с вводом и с исключением ошибок ввода мы уже разобрались.
Пользовательский ввод (input) в Python
Обычно программа работает по такой схеме: получает входные данные → обрабатывает их → выдает результат. Ввод может поступать как непосредственно от пользователя через клавиатуру, так и через внешний источник (файл, база данных).
В стандартной библиотеке Python 3 есть встроенная функция input() (в Python 2 это raw_input() ), которая отвечает за прием пользовательского ввода. Разберемся, как она работает.
Чтение ввода с клавиатуры
Функция input([prompt]) отвечает за ввод данных из потока ввода:
s = input() print(f»Привет, !») > мир # тут мы с клавиатуры ввели слово «мир» > Привет, мир!
- При вызове функции input() выполнение программы приостанавливается до тех пор, пока пользователь не введет текст на клавиатуре (приложение может ждать бесконечно долго).
- После нажатия на Enter , функция input() считывает данные и передает их приложению (символ завершения новой строки не учитывается).
- Полученные данные присваиваются переменной и используются дальше в программе.
Также у input есть необязательный параметр prompt – это подсказка пользователю перед вводом:
name = input(«Введите имя: «) print(f»Привет, !») > Введите имя: Вася > Привет, Вася!
📃 Более подробное описание функции из документации:
def input([prompt]): «»» Read a string from standard input. The trailing newline is stripped. The prompt string, if given, is printed to standard output without a trailing newline before reading input. If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError. On *nix systems, readline is used if available. «»» pass
Преобразование вводимые данные
Данные, введенные пользователем, попадают в программу в виде строки, поэтому и работать с ними можно так же, как и со строкой. Если требуется организовать ввод цифр, то строку можно преобразовать в нужный формат с помощью функций явного преобразования типов.
☝️ Важно : если вы решили преобразовать строку в число, но при этом ввели строку (например: test), возникнет ошибка:
ValueError: invalid literal for int() with base 10: ‘test’
На практике такие ошибки нужно обрабатывать через try except . В примере ниже пользователь будет вводить данные до тех пор, пока они успешно не преобразуются в число.
def get_room_number(): while True: try: num = int(input(«Введите номер комнаты: «)) return num except ValueError: print(«Вы ввели не число. Повторите ввод») room_number = get_room_number() print(f»Комната успешно забронирована!») > Введите номер комнаты: test > Вы ввели не число. Повторите ввод > Введите номер комнаты: 13 > Комната 13 успешно забронирована!
Input() → int
Для преобразования в целое число используйте функцию int() . В качестве аргумента передаются данные которые нужно преобразовать, а на выходе получаем целое число:
age_str = input(«Введите ваш возраст: «) age = int(age_str) print(age) print(type(age)) > Введите ваш возраст: 21 > 21 >
То же самое можно сделать в одну строку: age = int(input(«Введите ваш возраст: «)) .
Input() → float
Если нужно получить число с плавающей точкой (не целое), то его можно получить с помощью функции float() .
weight = float(input(«Укажите вес (кг): «)) print(weight) print(type(weight)) > Укажите вес (кг): 10.33 > 10.33 >
Input() → list (список)
Если в программу вводится информация, которая разделяется пробелами, например, «1 word meow», то ее легко преобразовать в список с помощью метода split() . Он разбивает введенные строки по пробелам и создает список:
list = input().split() print(list) print(type(list)) > 1 word meow > [‘1’, ‘word’, ‘meow’] >
💭 Обратите внимание, что каждый элемент списка является строкой. Для преобразования в число, можно использовать int() и цикл for. Например, так:
int_list = [] for element in input().split(): int_list.append(int(element)) print([type(num) for num in int_list]) > 1 2 3 > [, , ]
Ввод в несколько переменных
Если необходимо заполнить одним вводом с клавиатуры сразу несколько переменных, воспользуйтесь распаковкой:
В этом примере строка из input() разбивается по пробелу функцией split() . Далее применяется синтаксис распаковки – каждый элемент списка попадает в соответствующую переменную.
Все переменные после распаковки будут строкового типа. Преобразовать их (например в int) можно так:
a, b = [int(s) for s in input().split()] print(f»type a: , type b: «) > 13 100 > type a: , type b:
☝️ Важно : не забывайте обрабатывать ошибки:
- если введенных значений больше чем переменных, получите ошибку – ValueError: too many values to unpack (expected 3) ;
- если введенных значений меньше чем переменных, получите ошибку – ValueError: not enough values to unpack (expected 3, got 2) ;
- если преобразовываете в int, а вводите строку – ValueError: invalid literal for int() with base 10: ‘test’ .
В этом руководстве вы узнали, как принимать данные от пользователя, введенные с клавиатуры, научились преобразовывать данные из input и обрабатывать исключения.