Как работает функция input в Python
Функция input — это команда «спроси и подожди»: программа замирает на этой строке, пока человек не введёт ответ и не нажмёт Enter. Введённый текст становится значением функции, и его обычно сразу сохраняют в переменную.
imya = input()
print("Рад знакомству,", imya)
Если ввести «Саша», программа выведет «Рад знакомству, Саша». Без переменной введённый текст пропадёт: input() вернёт его, но сохранить будет некуда. Поэтому почти всегда пишут имя_переменной = input().
В тренажёре и редакторе на этом сайте input открывает поле ввода под окном вывода: наберите ответ и нажмите Enter. В среде IDLE ввод набирают прямо в окне Shell, где программа напечатала вопрос. Сама функция работает одинаково: официальная документация Python описывает её как чтение одной строки из стандартного ввода без завершающего перевода строки[1].
Ввод данных — тема, с которой начинается любая интерактивная программа: викторина, калькулятор, игра «угадай число». По федеральной образовательной программе программирование на уроках информатики начинается в 8 классе[2], и уже первые учебные задачи устроены так: программа получает числа, что-то считает и выводит ответ. Так же устроено и задание 16 ОГЭ по материалам ФИПИ: решение на Python должно прочитать входные данные через input.
Подсказка в скобках
Внутрь скобок input можно передать текст-подсказку: он появится на экране перед курсором ввода. Подсказка не попадает в результат — функция вернёт только то, что набрал пользователь.
gorod = input("В каком городе ты живёшь? ")
print("Ого,", gorod, "— отличное место!")
Обратите внимание на пробел в конце подсказки: без него ответ прилипнет к знаку вопроса. Подсказки удобны в программах для людей, например в викторине. А вот в задачах с автопроверкой их писать не стоит: проверяющая система сравнивает весь вывод программы с ожидаемым, и лишний текст «Введите число:» сделает правильное решение неверным. В тренажёре ниже все заготовки написаны без подсказок именно поэтому.
Input в Python 3, Scratch и школьных языках
Input в Python 3 — прямой аналог блока «спросить и ждать» в Scratch: там ответ попадает в блок «ответ», а здесь — в переменную, которую вы назвали сами. Идея одна: программа задаёт вопрос и ждёт человека.
В старом Python 2 было две функции: raw_input() возвращала строку, а input() пыталась вычислить набранное как выражение. В третьей версии оставили одну функцию input, и она всегда возвращает строку — так безопаснее и понятнее. Вторая версия не поддерживается с 1 января 2020 года, поэтому если в старом учебнике встретился raw_input, просто замените его на input. В Школьном алгоритмическом языке, который тоже разрешён на уроках по ФОП, для этого есть команда «ввод», а в Паскале — readln.
По материалам ФИПИ, в ОГЭ решение задания 16 можно написать на Python, и входные данные в нём читают именно через input. Поэтому запись int(input()) стоит довести до автоматизма ещё в 8 классе: на экзамене не должно быть сомнений, как прочитать число. Так что input в Python — не мелочь из первого урока, а инструмент, который пригодится до самого выпуска.
input всегда возвращает строку
Функция input всегда возвращает строку, даже если пользователь набрал одни цифры. Поэтому «5» из ввода нельзя сразу прибавить к числу — сначала его превращают в int или float.
a = input()
b = input()
print(a + b)
Если ввести 2 и 3, программа выведет 23, а не 5: плюс склеил две строки. Исправленная версия оборачивает каждый ввод в int():
a = int(input())
b = int(input())
print(a + b)
| Нужно получить | Как записать | Пример ввода | Результат |
| Текст | s = input() | кот | "кот" |
| Целое число | n = int(input()) | 15 | 15 |
| Дробное число | x = float(input()) | 2.5 | 2.5 |
| Список слов | w = input().split() | да нет | ['да', 'нет'] |
| Список чисел | list(map(int, input().split())) | 4 8 1 | [4, 8, 1] |
Дробные числа вводят через точку: float("2,5") вызовет ошибку. Пробелы по краям int() и float() прощают: ввод « 15 » превратится в 15. Подробнее о том, чем строка отличается от числа, — в уроке о типах данных Python.
Несколько значений в одной строке: split
Чтобы прочитать 2 и больше значений из одной строки, её режут методом split(): он делит текст по пробелам и возвращает список частей. Затем части превращают в числа.
a, b = map(int, input().split())
print("Сумма:", a + b)
Здесь три шага в одной строке: input() читает «3 9», split() превращает её в список ['3', '9'], а map(int, …) применяет int к каждой части. Слева две переменные, поэтому значений во вводе должно быть ровно два — иначе Python сообщит об ошибке ValueError.
Если чисел заранее неизвестно сколько, их собирают в список: chisla = list(map(int, input().split())). Метод описан в официальной документации вместе с другими методами строк. Разделитель можно задать: input().split(",") разрежет строку «1,2,3» по запятым. Такая запись встречается почти в каждой олимпиадной задаче, поэтому её стоит выучить наизусть.
Ввод нескольких строк подряд
Каждый вызов input читает ровно 1 строку. Если данные идут на разных строках, input вызывают столько раз, сколько строк нужно прочитать — чаще всего в цикле.
n = int(input())
summa = 0
for i in range(n):
chislo = int(input())
summa += chislo
print(summa)
Первая строка ввода сообщает, сколько чисел будет дальше, а цикл читает их по одному. Именно так оформлены входные данные во многих школьных задачах: сначала количество, потом сами значения. Перед решением всегда внимательно читайте формат ввода в условии: числа «в одной строке через пробел» и «каждое на новой строке» читаются по-разному.
Типичные ошибки и сообщения интерпретатора
Ошибки ввода почти всегда сводятся к 3 случаям: строку не превратили в число, превратили не то или ввели неожиданное количество значений. Вот что при этом пишет Python.
| Ситуация | Сообщение | Что сделать |
int(input()), а ввели «abc» | ValueError: invalid literal for int() | Проверить данные и формат условия |
int(input()), а ввели «3.5» | ValueError | Использовать float() |
a, b = …split(), а ввели 3 числа | ValueError: too many values to unpack | Сверить число переменных и значений |
input() + 1 | TypeError | Обернуть в int() |
Сообщение об ошибке подсказывает строку и причину. В редакторе на сайте под ним появляется пояснение на русском. Подробный разбор — на странице об ошибке ValueError.
Задачи с автопроверкой
Тренажёр вверху страницы содержит 7 задач на чтение данных (input в Python во всех вариантах): выберите номер, напишите решение и нажмите «✓ Проверить». Программа запустит его на нескольких тестах, каждый тест подаёт свой ввод, а справа видно «Ожидалось» и «Получилось».
Начните с «Эха» и «Суммы двух чисел», затем переходите к split. В условии каждой задачи указан пример ввода — повторяйте его формат точно. Если не выходит, откройте «Подсказку»; «Показать решение» нажимайте только после нескольких попыток, а через пару дней решите те же задачи снова — повторение с перерывами запоминается прочнее[3]. Когда чтение данных освоено, следующий шаг — условия if, elif и else: программа начнёт отвечать по-разному на разные данные.
Когда input не подходит
Ввод с клавиатуры не подходит, если данных много, они приходят не от человека или программа должна работать без остановки. В этих 4 случаях нужен другой способ.
- Данных больше 100 строк. Набирать их вручную долго; такие данные читают из файла.
- Игра, где персонаж двигается 30 раз в секунду. Ожидание Enter остановит всю игру; клавиши обрабатывают событиями, как в модуле turtle.
- Нужно 1 и то же значение при каждом запуске. Проще записать его в переменную прямо в коде.
- Пароль на 1 общий компьютер. Введённый текст виден на экране; для этого есть специальные средства.
Миф: «Если ввести цифры, input вернёт число». Это не подтверждается ни документацией Python, ни практикой: результат всегда строка, и без преобразования «2» + «2» даст «22».
Миф: «Подсказка в input обязательна, без неё программа не работает». Такого требования не существует: скобки можно оставить пустыми, а в задачах с автопроверкой подсказку как раз лучше не писать.
Чего делать нельзя
Нельзя считать с введённой строкой, не превратив её в число: результат будет неверным или программа упадёт. Вот 6 правил.
- Нельзя забывать int() или float() для чисел. Иначе плюс склеит строки.
- Не следует писать подсказки в задачах с автопроверкой. Лишний текст в выводе провалит тест.
- Не стоит читать два числа одной командой int(input()). Строку «3 4» так не превратить, нужен split().
- Нельзя набирать дробные числа через запятую. float() понимает только точку.
- Не стоит вызывать input без переменной. Ответ пользователя пропадёт.
- Не следует путать порядок вызовов. Первый input читает первую строку ввода, второй — вторую.
Чтобы красиво вывести полученные данные, вспомните урок о функции print: параметры sep и end и f-строки хорошо дополняют чтение данных.
Источники
[1] The Python Tutorial (официальная документация Python 3). Python Software Foundation.
[2] Приказ Минпросвещения России от 18.05.2023 № 370 «Об утверждении федеральной образовательной программы основного общего образования».
[3] Cepeda N. J., Pashler H., Vul E., Wixted J. T., Rohrer D. Distributed practice in verbal recall tasks: A review and quantitative synthesis // Psychological Bulletin. 2006. Vol. 132, № 3. P. 354–380.
Вопросы и ответы
Можно ли ввести число сразу, без int()?
Нет, функция всегда возвращает строку. Это сделано специально: программа сама решает, как понимать текст — как число, слово или список.
Как прочитать числа через запятую?
Передайте разделитель в split: input().split(","). Затем превратите части в числа через map или цикл.
Что вернёт input, если сразу нажать Enter?
Пустую строку "". Если обернуть её в int(), получится ValueError, поэтому пустой ответ иногда проверяют отдельно.
Как читать строки до слова «стоп»?
Используйте цикл while: читайте строку, сравнивайте её со словом «стоп» и выходите из цикла, когда они совпали.
Работает ли input в Python одинаково в IDLE и на сайте?
Да, поведение одинаковое: функция ждёт строку и возвращает её. Отличается только место, где набирают ответ, — окно Shell в IDLE или поле под выводом на сайте.
Почему в задачах нельзя писать «Введите число»?
Проверка сравнивает весь вывод с эталоном. Подсказка тоже попадает в вывод, и тест не совпадёт, хотя расчёт верный.