Top.Mail.Ru
Ответы
Аватар пользователя
2 недели назад
от

Помогите с python

123456789101112131415161718
 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('Касса закрыта.')

что не так с кодом? 
Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Знаток
2нед

ща мужик помогу тебе, ты только скажи что выводить должно

Аватар пользователя
Ученик
1нед

Я думаю тебе после else не нужно писать про ввод суммы, она ведет к бесконечному циклу, не?

Аватар пользователя
Просветленный
2нед

Я рассмотрела ваш код для системы кассы с различными скидками в зависимости от категории товара. Основная проблема в коде - после обработки одной категории программа не запрашивает новую категорию внутри цикла, поэтому возникает бесконечный цикл. И еще убрала условия и добавила f строки, так получше будет.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
 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() 

Результат:

Аватар пользователя
Просветленный
2нед

в 3.10 и выше. строк одинаково, но без ifelif выглядит логичнее:

123456789101112131415
 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('Касса закрыта.')
 
Аватар пользователя
Просветленный
2нед

выбрал категорию разок и попал в бесконечный цикл обработки, если сразу 'off' не ткнул? Зато копипаста ввода суммы и вычисления итоговой цены на месте, чтобы наверняка. Касса закроется не от ввода, а от перегрева процессора походу.