Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.
Как работает оператор ввода данных 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 раза, причем в двух последних случаях он не принимает никаких значений, а нужен для перехода к следующей части кода и для выхода из программы.
Выше мы написали готовую программу, но можно делать это построчно и в интерпретаторе 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 для выхода')Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.