input в Python: ввод данных с клавиатуры, преобразование типов и проверка значений
input в Python — один из первых инструментов, с которым сталкивается новичок. С его помощью программа может задавать вопросы пользователю и получать ответы прямо из консоли. Несмотря на простоту, у input() есть важные особенности: функция всегда возвращает строку, может выбросить ошибку при отсутствии ввода и требует аккуратного преобразования типов.
Базовый синтаксис input()
Функция input() останавливает выполнение программы и ждёт, пока пользователь введёт данные и нажмёт Enter. Внутрь можно передать подсказку — текст, который будет показан перед вводом.
name = input('Как вас зовут? ')
print('Привет, ' + name + '!')
Если пользователь введёт Анна, программа выведет:
Привет, Анна!
Подсказка не добавляет перенос строки автоматически. Если он нужен, укажите его явно:
answer = input('Введите команду:\n> ')
Главное правило: input() всегда возвращает строку
Даже если пользователь вводит число, Python получает его как строку. Это самая частая ошибка при изучении функции input в Python.
age = input('Введите возраст: ')
print(type(age))
Если ввести 25, результат будет:
<class 'str'>
Поэтому такой код приведёт к ошибке:
age = input('Введите возраст: ')
print(age + 1) # TypeError: можно сложить строку со строкой, но не с числом
Правильный вариант — преобразовать строку в число:
age = int(input('Введите возраст: '))
print(age + 1)
Ввод целых и дробных чисел
Для целых чисел используйте int(), для дробных — float().
count = int(input('Сколько товаров? '))
price = float(input('Цена одного товара: '))
total = count * price
print('Итого:', total)
Важно: float() ожидает точку, а не запятую. То есть нужно вводить 12.5, а не 12,5. Если хотите поддержать запятую, замените её перед преобразованием:
text = input('Введите цену: ')
price = float(text.replace(',', '.'))
print(price)
Как безопасно проверять ввод пользователя
Пользователь может ввести что угодно: пустую строку, буквы вместо числа, пробелы. Поэтому в реальных программах лучше не доверять вводу напрямую.
while True:
text = input('Введите целое число: ')
try:
number = int(text)
break
except ValueError:
print('Ошибка: нужно ввести именно целое число.')
print('Вы ввели:', number)
Такой цикл будет повторять вопрос, пока пользователь не введёт корректное целое число. Это хороший базовый шаблон для консольных программ.
Проверка диапазона значений
Часто мало проверить, что введено число. Например, возраст должен быть в разумных пределах, а оценка — от 1 до 5.
while True:
try:
rating = int(input('Поставьте оценку от 1 до 5: '))
except ValueError:
print('Введите число.')
continue
if 1 <= rating <= 5:
break
print('Оценка должна быть от 1 до 5.')
print('Спасибо за оценку:', rating)
Обратите внимание на continue: он сразу запускает следующую итерацию цикла, если преобразование в число не удалось.
Ввод нескольких значений в одной строке
Иногда удобно попросить пользователя ввести несколько значений через пробел. Для этого используют split().
first_name, last_name = input('Введите имя и фамилию: ').split()
print('Имя:', first_name)
print('Фамилия:', last_name)
Для чисел часто применяют связку split() и map():
a, b = map(int, input('Введите два числа через пробел: ').split())
print('Сумма:', a + b)
Но у такого подхода есть ограничение: если пользователь введёт не два значения, а одно или три, возникнет ошибка. Для учебных задач это нормально, а в пользовательских приложениях лучше добавлять проверку.
parts = input('Введите два числа через пробел: ').split()
if len(parts) != 2:
print('Нужно ввести ровно два числа.')
else:
a = int(parts[0])
b = int(parts[1])
print('Произведение:', a * b)
Удаление лишних пробелов
input() убирает символ перевода строки в конце, но не удаляет пробелы, введённые пользователем. Поэтому для имён, команд и логинов часто используют strip().
login = input('Введите логин: ').strip()
if login == '':
print('Логин не может быть пустым.')
else:
print('Ваш логин:', login)
Если нужно сделать ввод команды нечувствительным к регистру, добавьте lower():
command = input('Команда: ').strip().lower()
if command == 'start':
print('Запускаю программу...')
elif command == 'stop':
print('Останавливаю программу...')
else:
print('Неизвестная команда.')
input() и пароли: важное ограничение
Не используйте обычный input() для ввода пароля, если не хотите показывать символы на экране. Для этого в стандартной библиотеке есть модуль getpass.
from getpass import getpass
password = getpass('Введите пароль: ')
print('Пароль получен')
Это полезно для консольных утилит, где пользователь вводит токен, пароль или секретный ключ.
Что делать с EOFError
Иногда ввод может закончиться неожиданно: например, пользователь нажал Ctrl+D в Linux/macOS или Ctrl+Z в Windows, либо программа получает данные не из интерактивной консоли. В таком случае input() может вызвать EOFError.
try:
text = input('Введите текст: ')
except EOFError:
text = ''
print('Получено:', text)
Для простых учебных программ это редко требуется, но для устойчивых консольных скриптов такую ситуацию стоит учитывать.
Мини-проект: калькулятор скидки
Закрепим ввод данных в Python на небольшом практическом примере. Программа спросит цену товара и процент скидки, проверит значения и посчитает итоговую цену.
def read_float(message):
while True:
text = input(message).replace(',', '.').strip()
try:
return float(text)
except ValueError:
print('Введите корректное число.')
price = read_float('Цена товара: ')
discount = read_float('Скидка в процентах: ')
if price < 0:
print('Цена не может быть отрицательной.')
elif discount < 0 or discount > 100:
print('Скидка должна быть от 0 до 100.')
else:
final_price = price * (1 - discount / 100)
print('Цена со скидкой:', round(final_price, 2))
Здесь мы вынесли чтение дробного числа в отдельную функцию. Это делает код короче и удобнее: если ввод чисел нужен несколько раз, не приходится копировать один и тот же блок try/except.
Частые ошибки при использовании input()
- Забыть преобразовать строку в число. Используйте int() или float(), если планируете математические операции.
- Не проверять пользовательский ввод. Любой ввод извне потенциально некорректен.
- Считать, что split() всегда вернёт нужное количество частей. Пользователь может ввести больше или меньше значений.
- Не учитывать пробелы. Для текстовых команд часто нужен strip().
- Использовать input() для паролей. Лучше применять getpass().
Рекомендации
Если вы только начинаете изучать Python, тренируйтесь писать небольшие консольные программы: калькулятор, конвертер валют, анкету пользователя, игру «угадай число». Именно в таких задачах хорошо закрепляются input(), условия, циклы и преобразование типов. А если хотите пройти путь системно — от первых программ до уверенного владения языком, посмотрите курс «Python с нуля до уровня Гуру: практическая программа обучения».
Итоги
input в Python используется для получения данных от пользователя через консоль. Главное помнить: результат всегда является строкой. Для чисел требуется преобразование через int() или float(), для надёжности — обработка ошибок и проверка диапазонов. Освоив эти приёмы, вы сможете писать более удобные и устойчивые консольные программы.
-
Создано 14.09.2026 17:00:38
-
Михаил Русаков

Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.