Все статьи
Программирование Редакционная политика

input() в Python: ввод строк, чисел и списков

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

Автор
Ольга Миронова Ольга Миронова Главный редактор
Проверил эксперт/редактор
input() в Python: ввод строк, чисел и списков

Как работает input() в Python

input() — встроенная функция Python для чтения одной строки. Программа ждёт ввод, пользователь набирает текст и нажимает Enter. Функция возвращает строку без завершающего перевода строки.

name = input("Как вас зовут? ")
print("Здравствуйте,", name)
          

Текст внутри скобок называется приглашением к вводу. Python выводит его перед ожиданием ответа. Добавлять отдельный print() необязательно.

Результат input() всегда имеет тип str. Даже если пользователь ввёл 25, программа сначала получает строку "25".

Ввод целого числа

Для вычислений строку преобразуют функцией int():

age = int(input("Сколько вам лет? "))
print(age + 1)
          

Если ввести 20, программа напечатает 21. Без преобразования выражение age + 1 не сработает, потому что складывать строку и число нельзя.

int() принимает запись целого числа со знаком и пробелами по краям, например -7 или 42 . Значение 3.5 целым не является и вызовет ValueError.

Ввод дробного числа

Для десятичного числа используют float():

temperature = float(input("Температура: "))
print(temperature)
          

В Python десятичная часть отделяется точкой: 18.5. Если программа рассчитана на ввод с запятой, её можно заменить перед преобразованием:

text = input("Цена: ").replace(",", ".")
price = float(text)
print(price * 2)
          

Такой вариант разумен только тогда, когда вы действительно разрешаете оба формата. Для денежных расчётов, где важна точность до копейки, тип float подходит не всегда; обычно используют decimal.Decimal.

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

Метод split() разбивает строку по пробелам. Два слова можно сохранить в разные переменные:

first_name, last_name = input("Имя и фамилия: ").split()
print(last_name, first_name)
          

Здесь должно быть ровно две части. Если пользователь введёт одно слово или три, распаковка завершится ошибкой. Когда количество элементов заранее неизвестно, оставьте результат списком.

words = input("Введите слова: ").split()
print(words)
          

Несколько целых чисел

Каждый фрагмент нужно отдельно преобразовать в число. Для этого удобно применить map():

a, b = map(int, input("Введите два числа: ").split())
print(a + b)
          

При вводе 8 13 результат будет равен 21.

Список чисел

numbers = list(map(int, input("Числа через пробел: ").split()))
print(sum(numbers))
          

Например, строка 5 10 15 превращается в список [5, 10, 15]. Пустая строка даст пустой список, а любой нечисловой элемент приведёт к ValueError.

Ввод данных с разделителем

Без аргументов split() объединяет серии пробельных символов и не создаёт пустые элементы по краям. Для CSV-подобной строки можно явно указать запятую, а лишние пробелы убрать методом strip():

line = input("Города через запятую: ")
cities = [item.strip() for item in line.split(",")]
print(cities)
          

При вводе Омск, Томск, Новосибирск получится список из трёх названий без пробелов в начале.

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

Если передать в int() слово, Python возбудит исключение ValueError. Для повторного запроса используйте цикл и try/except:

while True:
    try:
        number = int(input("Введите целое число: "))
        break
    except ValueError:
        print("Нужна запись целого числа, например 12 или -3.")

print("Получено:", number)
          

В блок try лучше помещать только действие, от которого вы ожидаете конкретную ошибку. Широкий перехват всех исключений может скрыть ошибку в другом месте программы.

Проверка диапазона

Корректный тип ещё не означает корректное значение. Возраст, оценку или процент следует проверить отдельно:

while True:
    try:
        score = int(input("Оценка от 1 до 5: "))
    except ValueError:
        print("Введите целое число.")
        continue

    if 1 <= score <= 5:
        break

    print("Число должно быть от 1 до 5.")

print("Оценка:", score)
          

Как ввести логическое значение

Запись bool(input()) почти всегда ошибочна для ответов «да» и «нет». Любая непустая строка, включая "нет" и "False", преобразуется в True.

Сравните нормализованный текст с разрешёнными ответами:

answer = input("Продолжить? да/нет: ").strip().lower()

if answer == "да":
    print("Продолжаем")
elif answer == "нет":
    print("Останавливаемся")
else:
    print("Ответ не распознан")
          

Метод strip() убирает пробелы по краям, а lower() приводит буквы к нижнему регистру.

Простой калькулятор с input()

Небольшой пример объединяет ввод, преобразование типов и выбор операции:

a = float(input("Первое число: "))
operation = input("Операция (+, -, *, /): ").strip()
b = float(input("Второе число: "))

if operation == "+":
    result = a + b
elif operation == "-":
    result = a - b
elif operation == "*":
    result = a * b
elif operation == "/":
    if b == 0:
        result = "На ноль делить нельзя"
    else:
        result = a / b
else:
    result = "Неизвестная операция"

print(result)
          

В рабочей программе стоит также обработать ValueError, чтобы текст вместо числа не завершал выполнение.

Чтение нескольких строк

Один вызов input() читает одну строку. Когда количество строк известно, используйте цикл:

count = int(input("Сколько строк? "))
lines = []

for _ in range(count):
    lines.append(input())

print(lines)
          

В задачах с большим потоком данных можно читать из sys.stdin, но для обычного диалога и учебных программ input() понятнее.

Что происходит в конце ввода

В интерактивной программе Enter завершает текущую строку. Если поток данных закончился совсем, input() вызывает EOFError. Такое встречается при чтении перенаправленного файла и в автоматических проверяющих системах.

try:
    line = input()
except EOFError:
    line = ""

print(line)
          

Не перехватывайте EOFError без необходимости. В большинстве учебных примеров пользователь всегда вводит ожидаемую строку.

Частые ошибки

  • Складывать ввод с числом. Сначала выполните int(input()) или float(input()).
  • Писать десятичную запятую. float() ожидает точку, если вы не заменили разделитель сами.
  • Ждать несколько строк от одного input(). Каждый вызов читает только до конца текущей строки.
  • Распаковывать неизвестное число элементов. Сохраните результат split() в список либо заранее проверьте длину.
  • Использовать bool(input()). Непустой текст становится True независимо от смысла слова.
  • Не обрабатывать неверный формат. Для пользовательского ввода предусмотрите ValueError и понятное повторное приглашение.

Короткие ответы

Что возвращает input()?

Строку типа str. Завершающий перевод строки в неё не входит.

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

Для целого числа используйте int(input()), для дробного — float(input()).

Как ввести два числа через пробел?

Напишите a, b = map(int, input().split()). Для дробных чисел замените int на float.

Чем input отличается от print?

input() читает данные и возвращает строку. print() выводит переданные ему значения.

Почему input выдаёт ошибку при сложении?

Потому что результат — строка. Преобразуйте её в число, а если формат может быть неверным, обработайте ValueError.

Официальная документация

Точное поведение функции описано в справочнике Python: input(). Правила разбиения и очистки строк приведены в разделе о строковых методах, а конструкция try/except — в главе об обработке исключений.

Содержание