#python #for-loop #while-loop
#python #for-цикл #цикл while
Вопрос:
Я хочу выполнить то же самое с for
циклами
menu=['salad','becon','pizza','burger','fries']
choosen_menu=''
while choosen_menu not in menu:
print('choose something')
choosen_menu= input()
if choosen_menu == 'None':
print('not hungry')
break
else:
print('the {} is arriving'.format(choosen_menu))
Комментарии:
1. Зачем здесь использовать цикл for? циклы for ожидают начала и окончания, тогда как вы можете продолжать запрашивать, пока входные данные не будут правильными, используя цикл while
2.
for
циклы действительно предназначены для того, когда вы хотите выполнить итерацию по набору объектов. Есть способы превратитьfor
цикл по существу вwhile True:
петлю, но от этого изменения ничего не выиграешь.
Ответ №1:
Цикл while кажется концептуально правильным для вашего варианта использования, но если вы действительно хотите, вы можете преобразовать его в этот эквивалентный цикл for:
from functools import partial
menu = {'salad', 'bacon', 'pizza', 'burger', 'fries'}
for chosen in iter(partial(input, 'choose somethingn'), 'None'):
if chosen in menu:
print('the {} is arriving'.format(chosen))
break
else:
print('not hungry')
При этом используются некоторые продвинутые концепции, такие как форма с двумя аргументами iter()
, которая используется редко, и partial
функтор для частичного применения функции, поэтому единственное, чего это достигает, — это усложняет чтение кода. В остальном он работает более или менее точно так же, как ваша исходная версия, с теми же проблемами удобства использования.
Ответ №2:
Я не предлагаю использовать for loop
для вашего случая, но это даст вам то, что вы хотите:
from itertools import count
menu=['salad','becon','pizza','burger','fries']
choosen_menu=''
for i in count(0):
print('choose something')
choosen_menu= input()
if choosen_menu == 'None':
print('not hungry')
break
elif choosen_menu not in menu:
pass
else:
print('the {} is arriving'.format(choosen_menu))
break
Комментарии:
1. @Kowalski Ты видишь правку? Я думаю, что теперь это хорошо.
2. Это будет повторяться максимум 100 раз. В коде OP это может зацикливаться вечно. Также это пример того, почему мы не должны использовать здесь цикл for и должны использовать while вместо этого.
3. Уменьшение при вводе чего-либо, чего нет в меню, приведет к бесконечному циклу?
4. Внимательно посмотрите на эту часть:
while choosen_menu not in menu:
.5. Я знаю, что лучше всего использовать while, но вместо этого OP хочет использовать цикл for.