Как программа получает ответ пользователя: функция input с примерами

Pythonобновлено 07.10.20269 мин чтенияесть тренажёр

Функция input в Python останавливает программу, ждёт, пока пользователь наберёт текст и нажмёт Enter, и возвращает этот текст строкой. Чтобы получить число, строку превращают через int() или float(), а несколько значений в одной строке разрезают методом split(). Ниже — примеры, ошибки и 7 задач с автопроверкой.

Загружаем…

Как работает функция 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())1515
Дробное числоx = float(input())2.52.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() + 1TypeErrorОбернуть в 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 или поле под выводом на сайте.

Почему в задачах нельзя писать «Введите число»?

Проверка сравнивает весь вывод с эталоном. Подсказка тоже попадает в вывод, и тест не совпадёт, хотя расчёт верный.