Функция 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() особенно часто встречается в учебных задачах и в программах с консольным интерфейсом.