Python: уроки, справочник и задачи

input() в Python 3: ввод данных пользователем

Раздел: Основы Python · Обновлено 31.10.2026

Функция input() в Python 3 читает строку, которую пользователь вводит с клавиатуры, и возвращает ее программе. Ниже разобрано, как вывести подсказку, превратить ввод в число, прочитать несколько значений из одной строки, обработать неверный ввод и быстро считывать большие объемы данных в олимпиадных задачах.

input python 3
Фото: John Snyder / CC BY-SA 4.0, Wikimedia Commons
Содержание статьи
  1. Синтаксис и принцип работы
  2. input() всегда возвращает строку
  3. Несколько значений в одной строке
    1. Ввод нескольких строк
  4. Проверка ввода и обработка ошибок
  5. Быстрый ввод через sys.stdin
  6. Сравнение способов ввода
  7. Частые вопросы
    1. Чем input() в Python 3 отличается от Python 2?
    2. Как ввести список чисел?
    3. Почему программа зависает на input()?
    4. Можно ли задать значение по умолчанию?

Синтаксис и принцип работы

У функции один необязательный параметр prompt - текст подсказки, который выводится перед ожиданием ввода:

input(prompt='')

Когда программа доходит до вызова, она печатает подсказку без перевода строки и останавливается, пока пользователь не нажмет Enter. Затем функция возвращает введенный текст. Символ конца строки в результат не попадает.

name = input('Введите свое имя: ')
print(f'Привет, {name}!')
# Введите свое имя: Тимур
# Привет, Тимур!

Подсказку удобно заканчивать пробелом или двоеточием с пробелом, иначе ввод пользователя прилипнет к тексту. Если подсказка не нужна, функцию вызывают без аргументов: line = input(). Как input() сочетается с выводом через print(), подробнее рассказано в статье про ввод и вывод в Python.

input() всегда возвращает строку

Что бы ни ввел пользователь, результат имеет тип str. Это главный источник ошибок у начинающих: при сложении двух введенных чисел строки склеиваются, а не суммируются.

a = input('Первое число: ')   # 2
b = input('Второе число: ')   # 3
print(a + b)                  # 23
print(type(a))                # <class 'str'>

Чтобы работать с числами, ввод преобразуют сразу при чтении:

age = int(input('Возраст: '))
height = float(input('Рост в метрах: '))
print(age + 1, height * 100)

int() принимает только запись целого числа, пробелы по краям допускаются. Строка '1.75' для него ошибочна. float() принимает и целые, и дробные числа, но разделителем должна быть точка: на '1,75' он выдаст ValueError. Если пользователи привыкли к запятой, замените ее заранее: float(s.replace(',', '.')).

Несколько значений в одной строке

В учебных и олимпиадных задачах данные часто приходят одной строкой через пробел. Метод split() делит строку на части, а map() применяет преобразование к каждой из них.

a, b = map(int, input().split())          # ввод: 5 7
print(a * b)                               # 35

nums = list(map(int, input().split()))     # ввод: 3 1 4 1 5
print(sum(nums), max(nums))                # 14 5

x, y = map(float, input().split(';'))     # ввод: 1.5;2.5
print(x + y)                               # 4.0

Без аргумента split() делит по любым пробельным символам и игнорирует лишние пробелы. С аргументом он делит строго по указанному разделителю. Подробнее о разбиении строк написано в статье про split, а о функции map() в материале про zip и map.

При распаковке число переменных должно совпадать с числом введенных значений. Если ввести одно число там, где ждут два, появится ValueError: not enough values to unpack (expected 2, got 1).

Ввод нескольких строк

Когда сначала вводится количество строк, а затем сами строки, используют генератор списка. Если количество заранее неизвестно, читают до пустой строки.

n = int(input())
words = [input() for _ in range(n)]

lines = []
while (line := input()) != '':
    lines.append(line)

Оператор := присваивает значение прямо в условии цикла и доступен с Python 3.8.

Проверка ввода и обработка ошибок

Пользователь может ввести что угодно, поэтому программа не должна падать на первой опечатке. Преобразование помещают в блок try и повторяют запрос в цикле, пока данные не станут корректными.

def ask_int(prompt, low=None, high=None):
    while True:
        try:
            value = int(input(prompt))
        except ValueError:
            print('Введите целое число')
            continue
        if (low is None or value >= low) and (high is None or value <= high):
            return value
        print(f'Допустимо от {low} до {high}')

month = ask_int('Номер месяца: ', 1, 12)

Кроме ValueError, при вводе встречаются еще два исключения. EOFError возникает, если поток ввода закончился: пользователь нажал Ctrl+D в Linux или Ctrl+Z и Enter в Windows, либо данные из файла кончились. KeyboardInterrupt появляется при нажатии Ctrl+C. Подробнее о перехвате ошибок рассказано в статье про обработку исключений.

Быстрый ввод через sys.stdin

Для одной-двух строк input() подходит идеально. Но если нужно прочитать сотни тысяч строк, например в задачах на Codeforces или в ЕГЭ по информатике с файлами, удобнее работать с sys.stdin напрямую: накладные расходы на каждую строку меньше.

import sys

input = sys.stdin.readline          # быстрая замена
n = int(input())
data = list(map(int, input().split()))

# или прочитать сразу все числа до конца ввода
numbers = list(map(int, sys.stdin.read().split()))

В отличие от встроенной функции, sys.stdin.readline() оставляет в конце символ \n. Для чисел это не важно, int() его проигнорирует, а у строк конец нужно убрать вызовом rstrip('\n').

Сравнение способов ввода

В таблице собраны основные способы получить данные от пользователя в консольной программе.

СпособЧто возвращаетКогда использовать
input()Строку без \nДиалог с пользователем, небольшой ввод
int(input())Целое числоОдно число в строке
map(int, input().split())Итератор чиселНесколько чисел в одной строке
sys.stdin.readline()Строку с \nБольшой объем данных
getpass.getpass()Строку, ввод не отображаетсяПароли и секретные ключи

Функция getpass() из модуля getpass работает как input(), но не показывает набираемые символы на экране. В некоторых IDE, где нет настоящего терминала, она выводит предупреждение и показывает ввод.

Частые вопросы

Ответы на вопросы, которые часто возникают при работе с input().

Чем input() в Python 3 отличается от Python 2?

В Python 2 было две функции: raw_input() возвращала строку, а input() выполняла введенный текст как выражение. В Python 3 осталась только input(), и она работает как старая raw_input(), то есть всегда возвращает строку.

Как ввести список чисел?

Если числа идут через пробел: nums = list(map(int, input().split())). Вариант с генератором списка дает тот же результат: [int(x) for x in input().split()].

Почему программа зависает на input()?

Функция ждет ввода, пока не будет нажат Enter. В некоторых онлайн-редакторах и средах запуска ввод нужно заранее записать в отдельное поле stdin, иначе программа получит EOFError или будет ждать бесконечно.

Можно ли задать значение по умолчанию?

Встроенного параметра нет, но легко сделать так: city = input('Город [Москва]: ') or 'Москва'. Пустая строка считается ложной, поэтому при простом нажатии Enter подставится значение по умолчанию.