Помогите с python
category = input('Категория (off - завершить):')
while category != 'off':
if category == 'молочные продукты':
price = int(input('Сумма:'))
skidka = price*0.1
total_price = price - skidka
print('Скидка 10%. К оплате:', total_price)
elif category == 'выпечка':
price = int(input('Сумма:'))
skidka = price*0.3
total_price = price - skidka
print('Скидка 30%. К оплате:', total_price)
else:
price = int(input('Сумма:'))
print('К оплате:', price)
print('Касса закрыта.')
что не так с кодом?
ща мужик помогу тебе, ты только скажи что выводить должно
Я думаю тебе после else не нужно писать про ввод суммы, она ведет к бесконечному циклу, не?
Я рассмотрела ваш код для системы кассы с различными скидками в зависимости от категории товара. Основная проблема в коде - после обработки одной категории программа не запрашивает новую категорию внутри цикла, поэтому возникает бесконечный цикл. И еще убрала условия и добавила f строки, так получше будет.
from functools import partial
from typing import Dict, Callable
def apply_discount(price: float, discount_rate: float = 0) -> float:
"""
Применяет скидку к цене.
Args:
price: Исходная цена
discount_rate: Процент скидки (0.1 = 10%)
Returns:
Цена после скидки
"""
return price * (1 - discount_rate)
def main():
"""Основная функция кассового приложения без использования if-else."""
# Словарь скидок для категорий (категория: процент скидки)
discounts = {
'выпечка': 0.3,
'молочные продукты': 0.1
}
# Словарь сообщений о скидках
discount_messages = {
0.3: 'Скидка 30%. К оплате:',
0.1: 'Скидка 10%. К оплате:',
0: 'К оплате:'
}
while True:
category = input('Категория (off - завершить):\n>>> ')
# Проверка на завершение работы кассы
should_exit = category == 'off'
if should_exit:
break
# Получение скидки для категории (0 если категория отсутствует в словаре)
discount_rate = discounts.get(category, 0)
# Запрос суммы
price = float(input('Сумма:\n>>> '))
# Расчет итоговой суммы
total_price = price * (1 - discount_rate)
# Вывод сообщения с соответствующей скидкой
print(f'{discount_messages[discount_rate]} {total_price}')
# Запрос на следующую категорию
print('Введите категорию продуктов:')
print('Касса закрыта.')
if __name__ == "__main__":
main()
Результат:

в 3.10 и выше. строк одинаково, но без ifelif выглядит логичнее:
while True:
match category := input('Категория (off - завершить):'):
case 'молочные продукты':
skidka, description = 0.1, 'Скидка 10%. '
case 'выпечка':
skidka, description = 0.3, 'Скидка 30%. '
case 'off':
break;
case _:
skidka, description = 0, ''
price = int(input('Сумма:'))
total_price = price - skidka * price
print(f'{description}К оплате: {total_price}')
print('Касса закрыта.')
выбрал категорию разок и попал в бесконечный цикл обработки, если сразу 'off' не ткнул? Зато копипаста ввода суммы и вычисления итоговой цены на месте, чтобы наверняка. Касса закроется не от ввода, а от перегрева процессора походу.