Функция input() в Python: ввод и преобразование данных
Обновлено:
Функция:
input()
позволяет программе получить данные, которые пользователь вводит через терминал.
Например:
name = input()
print(name)
Когда выполнение программы дойдёт до input(), она остановится и будет ждать ввода пользователя.
Пользователь может написать:
Alex
и нажать Enter.
После этого:
name
будет ссылаться на строку:
Alex
1. input() всегда возвращает строку
Очень важное правило:
Функция
input()всегда возвращает объект классаstr.
Например, пользователь вводит:
25
Код:
age = input()
print(age)
print(type(age))
Результат:
25
<class 'str'>
Несмотря на то что пользователь визуально ввёл число:
25
для Python это строка:
'25'
То же самое произойдёт с:
3.14
-100
0
Результатом input() всё равно будет str.
Текст перед вводом
2. Необязательный аргумент prompt
В input() можно передать строку, которая будет выведена перед ожиданием пользовательского ввода:
name = input(
'Введите ваше имя: '
)
В терминале появится:
Введите ваше имя:
Пользователь вводит значение:
Введите ваше имя: Alex
В переменной:
name
окажется:
Alex
Переданная строка называется приглашением к вводу — prompt.
3. input() не добавляет перенос строки после prompt
Обычно в конце приглашения специально оставляют пробел:
input('Введите имя: ')
Тогда ввод выглядит аккуратно:
Введите имя: Alex
Если пробел не добавить:
input('Введите имя:')
получится:
Введите имя:Alex
Преобразование введённых данных
4. Получение целого числа
Если программе нужно именно целое число, результат input() можно сразу передать в:
int()
Например:
age = int(
input('Введите возраст: ')
)
print(age)
print(type(age))
Пользователь вводит:
25
Получаем:
25
<class 'int'>
Сначала выполняется:
input('Введите возраст: ')
и возвращает:
'25'
Затем:
int('25')
создаёт:
25
5. Получение float
Аналогично:
temperature = float(
input('Введите температуру: ')
)
print(temperature)
print(type(temperature))
Пользователь вводит:
18.5
Результат:
18.5
<class 'float'>
Возможная ошибка
6. Преобразование должно быть допустимым
Например:
age = int(
input('Введите возраст: ')
)
Если пользователь введёт:
Python
Python попытается выполнить:
int('Python')
и возникнет:
ValueError
То же самое возможно при использовании:
float()
если введённую строку нельзя преобразовать в вещественное число.
Поэтому в реальных программах пользовательский ввод обычно приходится проверять.
Очистка введённой строки
7. input() удобно использовать вместе со строковыми методами
Пользователь может случайно ввести лишние пробелы:
Python
или:
Python
Поэтому часто используется:
user_input = input(
'Введите значение: '
).strip()
Если пользователь введёт:
Python
после:
strip()
получим:
Python
Это пример цепочки:
input()
↓
получили str
↓
strip()
↓
получили очищенную str
Определение типа введённого значения
8. Практический пример
Предположим, программа получает пользовательский ввод и хочет определить:
- целое это число;
- вещественное число;
- или обычная строка.
user_input = input(
'Пожалуйста, введите значение: '
).strip()
if user_input.removeprefix('-').isdecimal():
value = int(user_input)
elif (
user_input
.removeprefix('-')
.replace('.', '', 1)
.isdecimal()
):
value = float(user_input)
else:
value = user_input
print(value)
print(type(value))
9. Если пользователь вводит целое число
Ввод:
25
Первая проверка:
user_input.removeprefix('-').isdecimal()
фактически проверяет:
'25'.isdecimal()
Результат:
True
Поэтому выполняется:
value = int(user_input)
Получаем:
25
<class 'int'>
10. Отрицательное целое число
Пользователь вводит:
-25
Сначала:
user_input.removeprefix('-')
получаем:
25
Затем:
'25'.isdecimal()
возвращает:
True
После этого исходная строка:
'-25'
передаётся в:
int()
И результат:
-25
<class 'int'>
Вещественное число
11. Проверка точки
Пользователь вводит:
25.5
Первая проверка:
'25.5'.isdecimal()
даст:
False
Переходим к следующей проверке:
(
user_input
.removeprefix('-')
.replace('.', '', 1)
.isdecimal()
)
Происходит:
'25.5'
↓ replace('.', '', 1)
'255'
↓ isdecimal()
True
Поэтому:
value = float(user_input)
Результат:
25.5
<class 'float'>
12. Отрицательное вещественное число
Ввод:
-25.5
Цепочка проверки:
'-25.5'
↓ removeprefix('-')
'25.5'
↓ replace('.', '', 1)
'255'
↓ isdecimal()
True
После этого:
value = float(user_input)
получаем:
-25.5
<class 'float'>
Почему удаляем только одну точку
13. Некорректное значение
Предположим, пользователь ввёл:
25.5.7
Мы выполняем:
user_input.replace(
'.',
'',
1,
)
Удаляется только одна точка:
25.57
Одна точка остаётся.
Поэтому:
'25.57'.isdecimal()
вернёт:
False
Строка не будет ошибочно распознана как обычное вещественное число.
Если введён обычный текст
14. Строка остаётся строкой
Пользователь вводит:
Python
Первая проверка:
'Python'.isdecimal()
даёт:
False
Вторая проверка также возвращает:
False
Поэтому выполняется:
value = user_input
И результат:
Python
<class 'str'>
input() в учебных и реальных программах
15. Учебные задачи
input() очень часто используется в учебных задачах:
number = int(
input('Введите число: ')
)
Это позволяет написать программу, которая работает с разными данными без изменения исходного кода.
16. Консольные программы
input() применяется и в реальных программах с терминальным интерфейсом.
Например:
command = input(
'Введите команду: '
).strip().lower()
if command == 'start':
print('Запуск программы')
elif command == 'stop':
print('Остановка программы')
else:
print('Неизвестная команда')
Пользователь управляет программой непосредственно из терминала.
Главное по теме
Функция:
input()
получает пользовательский ввод из терминала.
Она всегда возвращает str:
value = input()
Даже если пользователь ввёл:
100
результатом будет:
'100'
В input() можно передать необязательную строку-приглашение:
name = input(
'Введите имя: '
)
Чтобы получить целое число:
number = int(
input('Введите число: ')
)
Чтобы получить вещественное:
number = float(
input('Введите число: ')
)
Но неудачное преобразование может привести к:
ValueError
Очень часто пользовательский ввод сначала очищают:
user_input = input(
'Введите значение: '
).strip()
А затем выполняют необходимую проверку и преобразование.
input() особенно часто встречается в учебных задачах и в программах с консольным интерфейсом.