2015-01-14 4 views
1

хорошо im учится python и им пытается сделать такую ​​текстовую игру и im stuck on while loop ... то, что я пытаюсь сделать, это список вещей, которые можно использовать, и сравнить пользовательские raw_input в этот список, если они выбрали правильный в течение 5 попыток, продолжайте, иначе умереть с сообщением. вот мой код:python вложенная петля с перерывом

def die(why): 
    print why 
    exit(0) 

#this is the list user's input is compared to 
tools = ["paper", "gas", "lighter", "glass", "fuel"] 
#empty list that users input is appended to 
yrs = [] 
choice = None 
print "You need to make fire" 

while choice not in tools: 
    print "Enter what you would use:" 
    choice = raw_input("> ") 
    yrs.append(choice) 
    while yrs < 5: 
     print yrs 
     die("you tried too many times") 
    if choice in tools: 
     print "Well done, %s was what you needeed" % choice 
     break 

но выбор не добавляется в список yrs, он работает только с одним, а петли но потом пойдём в вечно или пока один из пунктов в списке инструментов не будет введен в качестве входных данных пользователей , однако ид нравится ограничить его 5 попыток, а затем ввести с: die("You tried too many times") , но это дает мне умереть-сообщение сразу после первой попытки ... Я искал этот форум, не нашел удовлетворительный ответ, пожалуйста, помогите мне

+2

Неверный синтаксис Python. Исправьте отступ вашего кода. –

ответ

5

Пробег:

if len(yrs) < 5: 
    print yrs 
else: 
    die("you tried many times") 

вместо этого. Условие

yrs < 5 

всегда возвращается ложным, поскольку yrs список и вы сравниваете его к целому. Это означает, что цикл while yrs < 5 никогда не выполняется, поскольку условие yrs < 5 никогда не было истинным. Ваша программа пропускает этот цикл и вызывает функцию die(), из-за чего он немедленно выходит из системы. Вот почему вы должны поставить die в условном выражении, как в случае с приведенным выше фрагментом кода.

Пожалуйста, обратите внимание, что если вы вместо этого написал:

while len(yrs) < 5: 
    print yrs 

это также будет неправильным, так как условие len(yrs) < 5 будет вычисляться True в первый раз это было проверено, так что вы в конечном итоге в бесконечном цикле в который пользователь не сможет предоставить какой-либо ввод, от длины которого зависит условие len(yrs) < 5.

Вы хотели бы сравнить yrs «s длина 5 в if заявление (как написано выше), чтобы увидеть, если попытки пользователя более чем 5. Если они не более чем 5 поток код должен идти до окончательной проверки (if choice in tools ...) перед повторением внешнего цикла while, чтобы позволить пользователю совершить еще одну попытку.

0
from sys import exit 

    def die(why): 
     print why 
     exit() 

    tools = ["paper", "gas", "lighter", "glass", "fuel"] 
    choice = '' 
    tries = 0 

    print 'You have to make fire' 

    while choice not in tools: 
     choice = raw_input('What do you want to do?-->') 
     tries += 1 
     if tries == 5: 
      die('You tried too many times') 

    print 'Well done you made a fire!' 
Смежные вопросы