Бесконечный цикл while в Python

category = input('Категория (stop - завершить):')
while category != 'stop':
    if category == 'мясные изделия':
        print('Скидка 10%.')
    elif category == 'напитки':
        print('Скидка 30%.')
    else:
        print('Скидок нет.')
category = input('Введите категорию продуктов:')

Ввожу категорию - получаю бесконечный цикл (просто бесконечно печатает какой-либо принт). Я новичок, помогите, пожалуйста.


Ответы (6 шт):

Автор решения: Amgarak

Подвинти category = input('Введите категорию продуктов:') в цикл, будет тогда каждый раз спрашивать параметры для if. Или какая должна быть логика?

while True:
    category = input('Введите категорию продуктов:')
    if category == 'мясные изделия':
        print('Скидка 10%.')
    elif category == 'напитки':
        print('Скидка 30%.')
    elif category == 'stop':
        break
    else:
        print('Скидок нет.')
→ Ссылка
Автор решения: slon_hk

Если требуется, чтобы программа выполнялась один раз, то это можно сделать так:

category = input("Введите категорию продуктов:")
while category != "stop":
    if category == "мясные изделия":
        print("Скидка 10%.")
        break
    elif category == "напитки":
        print("Скидка 30%.")
        break
    else:
        print("Скидок нет.")
        break

Если требуется задавать вопрос несколько раз, то решение этой проблемы описали выше.

→ Ссылка
Автор решения: MarianD

Эта часть вашего кода

while category != 'stop':
    if category == 'мясные изделия':
        print('Скидка 10%.')
    elif category == 'напитки':
        print('Скидка 30%.')
    else:
        print('Скидок нет.')

повторяется, пока в переменной category не будет значение 'stop'.

Повторяется, повторяется, но значение переменной category не изменяется, потому что ваша следующая команда

category = input('Введите категорию продуктов:')

ждет, пока ваш цикл while не окончится, чтобы она могла заработать. И — как я уже объяснил — он не окончится никогда.

Нужно перенести эту команду в цикл, чтобы она выполнилась, и чтобы вы могли в ответе на вопрос Введите категорию продуктов: ответить stop.

category = input('Категория (stop - завершить): ')
while category != 'stop':
    if category == 'мясные изделия':
        print('Скидка 10%.')
    elif category == 'напитки':
        print('Скидка 30%.')
    else:
        print('Скидок нет.')
    category = input('Категория (stop - завершить): ')
→ Ссылка
Автор решения: Dark Space

Каждый раз категорию нужно спрашивать у пользователя. Для этого можно сделать бесконечный цикл и внутри писать input. Такой вариант хорош и его предложил Amgarak. Я могу предложить вот такое решение: поместить input внутрь условия while, используя "моржовый" оператор

while answer:= input('Введите категорию - (stop-выход)').lower(): 
    if answer == 'мясные изделия': 
        print('Скидка n %')
    elif answer == 'stop': 
        break
    else:
        print('Скидок нет.')
→ Ссылка
Автор решения: eraecos
category = input('Категория (stop - завершить):')
while category != 'stop':
    if category == 'мясные изделия':
        print('Скидка 10%.')
    elif category == 'напитки':
        print('Скидка 30%.')
    else:
        print('Скидок нет.')
    category = input('Введите категорию продуктов(stop - завершить):')

Может так.

→ Ссылка
Автор решения: ykoavlil

Если у вас Python 3.10+ рекомендую использовать match/case

while True:
    category = input('Введите категорию продуктов:').lower()

    match category:
        case 'мясные изделия':
            print('Скидка 10%.')
        case 'напитки':
            print('Скидка 30%.')
        case 'stop':
            break
        case _:
            print('Скидок нет.')
→ Ссылка