Python · 3 мин

Почему input в Python не складывает числа

Разбираем, почему 2 + 3 превращается в 23, чем отличаются строка и число и как обработать неверный ввод.

Что разберём

Разбираем, почему 2 + 3 превращается в 23, чем отличаются строка и число и как обработать неверный ввод.

Откуда берётся 23

Представьте кассу маленького магазина: программа спрашивает количество яблок и груш, а затем показывает общий итог. Вы вводите 2 и 3, но получаете 23. Python не ошибся в арифметике — он выполнил другую операцию. input возвращает строку, то есть текст. Для двух строк знак + означает соединение.

Проверить предположение можно до исправления: выведите type(apples). Если увидите str, перед вами текст. Не меняйте сразу весь проект: сначала найдите место, где текст должен стать числом.

Пример для практики
apples = input("Яблоки: ")
pears = input("Груши: ")
print(apples + pears)  # для ввода 2 и 3 получится 23

Где преобразовывать значение

Преобразуйте данные сразу после чтения, если дальше они используются как числа. int подходит для целого количества предметов. float нужен для значений с дробной частью; в простом вводе десятичный разделитель — точка. Для точных денежных расчётов одного float недостаточно: это отдельная задача, и учебную кассу не стоит использовать для реальных платежей.

"2" + "3"→int(…)→2 + 3
Строки соединяются в «23»; после преобразования чисел сложение даёт 5.
Пример для практики
apples = int(input("Яблоки: "))
pears = int(input("Груши: "))
print("Всего:", apples + pears)

Не все цифры нужно превращать в числа

Номер телефона, почтовый индекс или артикул могут состоять из цифр, но с ними обычно не выполняют арифметику. Преобразование уничтожит ведущие нули: код 007 станет числом 7. Тип выбирают по смыслу действия, а не по внешнему виду значения.

ЗначениеТип для этого примераПочему
Количество яблокintНужно сложить предметы
Название сортаstrЭто подпись
Артикул 007strНужно сохранить все символы

Что будет, если написать слово

Попытка int("два") вызывает ValueError. Для понятного ответа перехватите именно эту ошибку и попросите ввести целое число. Не используйте пустой except: он может скрыть совершенно другую поломку. Отрицательное число успешно преобразуется, поэтому проверка допустимого количества выполняется отдельно.

Пример для практики
try:
    count = int(input("Количество: "))
    if count < 0:
        print("Количество не может быть отрицательным")
    else:
        print("Добавлено:", count)
except ValueError:
    print("Введите целое число, например 3")

Проверьте решение на пяти вводах

Запустите пример с 3, 0, -1, 2.5 и словом «три». Заранее запишите ожидаемый ответ. Затем добавьте верхнюю границу: в корзине не больше 20 предметов. Проверяйте 19, 20 и 21 — так легче заметить ошибку в сравнении.

Если не получается, скопируйте полный текст ошибки и строку, на которой она возникла, в разбор ошибок ZIPKA. Не отправляйте в такие примеры настоящие контакты или платёжные данные.

из статьи — в свой проект

Python-компилятор

Открой инструмент ZIPKA и попробуй пример из разбора. Он доступен бесплатно, без записи на курс.

Открыть инструмент ↗

Источники и дальнейшее чтение