2013-09-05 4 views
2
bear_moved = False 

while True: 
    next = raw_input("> ") 

    if next == "take honey": 
     dead("The bear looks at you then slaps your face off.") 
    elif next == "taunt bear" and not bear_moved: 
     print "The bear has moved from the door. You can go through." 
     bear_moved = True 
    elif next == "taunt bear" and bear_moved: 
     dead("The bear gets pissed off and chews your leg off.") 
    elif next == "open door" and bear_moved: 
     gold_room() 
    else: 
     print "I got no idea what that means. 

Это должно показать мое понимание булина. При тестировании линии next == "taunt bear" and not bear_moved, если мой ввод равен taunt bear, результатом будет True and True, который продолжит цикл.True & False Boolean in Python

Так что меня смущает линейное тестирование next == "taunt bear" and bear_moved. Если мой ввод taunt bear, то он должен быть "taunt bear" == "taunt bear" и bear_moved который True and True? что означает, что цикл будет продолжаться, а не отменять его.

+0

Что именно должен делать этот код? – Lugubrious

+1

у вас нет условия выхода из цикла, даже если вы звоните в gold_room, вы все еще находитесь в этом цикле комнат – cmd

+0

Ваша петля никогда не отменяется; он всегда продолжается. –

ответ

0

while True: будет продолжаться бесконечно (если вы не введете break - обычно break - плохой дизайн на таких языках, как Python)).

Вы, вероятно, хотите сделать:

while something == True: #Or - as has been pointed out, `while something` - which is equivalent and more Pythonic 
    ... 
    some code which eventually sets something to False 
    ... 
+0

Если вы не добавили в перерыв; - когда вы кладете «перерыв»; без кавычек в коде, он завершит цикл. – Lugubrious

+0

Согласен, ответ отредактирован. –

+0

'something = True' ошибочно (это назначение). 'something == True' считается плохой. 'что-то есть Истина', это хорошо. 'что-то' является самым правильным – cmd

0

elif в питон equivilent к else if. Если один из блоков elif выполнен, ни один из остальных не может, и он перейдет к нижней части if.

После выполнения next == "taunt bear" and not bear_moved выполняется значение true и выполняется блок, управление программой продолжается в начале цикла и снова запрашивает ввод.

Смежные вопросы