Бесконечный цикл while в Python
category = input('Категория (stop - завершить):')
while category != 'stop':
if category == 'мясные изделия':
print('Скидка 10%.')
elif category == 'напитки':
print('Скидка 30%.')
else:
print('Скидок нет.')
category = input('Введите категорию продуктов:')
Ввожу категорию - получаю бесконечный цикл (просто бесконечно печатает какой-либо принт). Я новичок, помогите, пожалуйста.
Ответы (6 шт):
Подвинти category = input('Введите категорию продуктов:') в цикл, будет тогда каждый раз спрашивать параметры для if. Или какая должна быть логика?
while True:
category = input('Введите категорию продуктов:')
if category == 'мясные изделия':
print('Скидка 10%.')
elif category == 'напитки':
print('Скидка 30%.')
elif category == 'stop':
break
else:
print('Скидок нет.')
Если требуется, чтобы программа выполнялась один раз, то это можно сделать так:
category = input("Введите категорию продуктов:")
while category != "stop":
if category == "мясные изделия":
print("Скидка 10%.")
break
elif category == "напитки":
print("Скидка 30%.")
break
else:
print("Скидок нет.")
break
Если требуется задавать вопрос несколько раз, то решение этой проблемы описали выше.
Эта часть вашего кода
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 - завершить): ')
Каждый раз категорию нужно спрашивать у пользователя. Для этого можно сделать бесконечный цикл и внутри писать input. Такой вариант хорош и его предложил Amgarak. Я могу предложить вот такое решение: поместить input внутрь условия while, используя "моржовый" оператор
while answer:= input('Введите категорию - (stop-выход)').lower():
if answer == 'мясные изделия':
print('Скидка n %')
elif answer == 'stop':
break
else:
print('Скидок нет.')
category = input('Категория (stop - завершить):')
while category != 'stop':
if category == 'мясные изделия':
print('Скидка 10%.')
elif category == 'напитки':
print('Скидка 30%.')
else:
print('Скидок нет.')
category = input('Введите категорию продуктов(stop - завершить):')
Может так.
Если у вас Python 3.10+ рекомендую использовать match/case
while True:
category = input('Введите категорию продуктов:').lower()
match category:
case 'мясные изделия':
print('Скидка 10%.')
case 'напитки':
print('Скидка 30%.')
case 'stop':
break
case _:
print('Скидок нет.')