Разбираем, почему 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 недостаточно: это отдельная задача, и учебную кассу не стоит использовать для реальных платежей.
apples = int(input("Яблоки: "))
pears = int(input("Груши: "))
print("Всего:", apples + pears)Не все цифры нужно превращать в числа
Номер телефона, почтовый индекс или артикул могут состоять из цифр, но с ними обычно не выполняют арифметику. Преобразование уничтожит ведущие нули: код 007 станет числом 7. Тип выбирают по смыслу действия, а не по внешнему виду значения.
| Значение | Тип для этого примера | Почему |
|---|---|---|
| Количество яблок | int | Нужно сложить предметы |
| Название сорта | str | Это подпись |
| Артикул 007 | str | Нужно сохранить все символы |
Что будет, если написать слово
Попытка 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 и попробуй пример из разбора. Он доступен бесплатно, без записи на курс.
Открыть инструмент ↗