Урок 002: ввод пользователя и типы¶
Цель¶
Получить данные из терминала, преобразовать числовой текст в подходящий тип и понятно сообщить об ошибке преобразования.
input всегда возвращает строку¶
Функция input показывает приглашение, ждёт ввод и возвращает значение типа str:
product_name = input("Название позиции: ")
quantity_text = input("Количество: ")
print(type(product_name))
print(type(quantity_text))
Даже если пользователь вводит 4, Python получает строку "4". Строку нельзя без преобразования умножать на цену как число.
Явное преобразование¶
quantity_text = input("Количество: ")
quantity = int(quantity_text)
unit_price_text = input("Цена за единицу: ")
unit_price = float(unit_price_text)
subtotal = unit_price * quantity
print(f"Сумма: {subtotal:.2f} руб.")
int принимает текст целого числа, например "4". float принимает "125.5"; в программном вводе используется точка. Запись "125,5" вызовет ValueError, если вы специально не добавили поддержку запятой.
Минимальная обработка ошибки¶
price_text = input("Цена: ").replace(",", ".")
try:
price = float(price_text)
except ValueError:
print("Ошибка: цена должна быть числом")
else:
print(f"Принята цена {price:.2f} руб.")
Блок try содержит операцию, которая может не выполниться для некоторых данных. except ValueError обрабатывает именно ошибку преобразования. else запускается после успешного преобразования.
На этом этапе программа сообщает об ошибке и завершается. Повторный запрос будет добавлен после изучения цикла while.
Пустая строка¶
Строковый метод strip удаляет пробелы по краям. Он помогает отличить название от пустого ввода:
product_name = input("Название: ").strip()
if product_name == "":
print("Ошибка: название не может быть пустым")
else:
print(f"Принята позиция: {product_name}")
Условные конструкции подробно разбираются в следующем уроке. Сейчас важно увидеть границу: получение текста, преобразование и расчёт — разные действия, у каждого свой возможный сбой.
Контрольные сценарии¶
| Ввод цены | Результат |
|---|---|
125.50 |
число 125.5 принято |
125,50 |
после replace принято 125.5 |
abc |
сообщение о необходимости числа |
| пустая строка | сообщение о необходимости числа |
Упражнение¶
Создайте input_lab.py, который запрашивает название, цену и количество, затем выводит сводку. Проверьте корректные числа, цену с запятой, буквенное количество и пустое название. Пока допускается завершение программы после неверного числового ввода.
Самопроверка¶
- Почему результат
inputнельзя сразу считать числом? - Чем
int("3")отличается отfloat("3")? - Какой тип ошибки обрабатывает показанный
except? - Почему полезно хранить исходный текст и преобразованное число под разными именами?