Изучай питон трудным путем, упражнение 35

1

У меня возникли проблемы с упражнением 35 в "Learn python the hard way".

def bear_room():
    print "There is a bear here."
    print "The bear has a bunch of honey."
    print "The fat bear is in front of another door."
    print "How are you going to move the bear?"
    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 it now."
            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."

a) Я не понимаю, почему активируется While. В строке 6 мы пишем, что условие bear_moved - False. Так что если он False и активируется, когда он True, он не должен активироваться!

б) У меня также есть проблемы с оператором И в линиях ИФ и ЭЛИФ. Почему мы спрашиваем, изменяются ли значения bear_moved в стоимости? Никакая другая команда в блоке не влияет на bear_moved, кроме строки 33 (но эта строка выходит из нее).

Я не уверен, что сам объяснил, пожалуйста, скажите мне, нет ли у меня этого. И спасибо за ваши ответы, я полный новичок.

http://learnpythonthehardway.org/book/ex35.html

Теги:

5 ответов

2

а) в while цикл не испытывает bear_moved он проверяет True что, ну, всегда верно.

б) Разница в том, что вы можете только перенести медведя один раз - второй раз будет смертельным. Это служит для различения. Но я не считаю это хорошим стилем - лучший способ

    elif next == "taunt bear":
        if bear_moved:
            dead("The bear gets pissed off and chews your leg off.")
        else:
            print "The bear has moved from the door. You can go through it now."
            bear_moved = True
1

a) Он говорит, что While True While bear_moved, True является константой, поэтому цикл while будет продолжаться вечно.

б) Так как цикл while продолжается вечно, а некоторые ответы ("taunt bear") могут изменить значение bear_moved

Выполнение этой функции будет задавать вопросы до тех пор, пока вы не умрете или не gold_room().

Edit: With die Я имею в виду, что функция dead() выполняется, а не то, что вы сами умрете, я искренне надеюсь, что вы останетесь в хорошем состоянии, изучая Python :-)

1

a) Я не понимаю, почему активируется While. В строке 6 мы пишем, что условие bear_moved - False. Так что если он False и активируется, когда он True, он не должен активироваться!

Эта конструкция While True создает бесконечный цикл. Это будет зацикливаться до тех пор, пока не появится оператор break или какой-либо другой оператор изменения потока управления.

б) У меня также есть проблемы с оператором И в линиях ИФ и ЭЛИФ. Почему мы спрашиваем, изменяются ли значения bear_moved в стоимости? Никакая другая команда в блоке не влияет на bear_moved, кроме строки 33 (но эта строка выходит из нее).

Предоставленный вами код, похоже, моделирует следующую ситуацию: пользователь застрял в комнате с медведем. Им нужно ввести правильные действия, чтобы медведь отошел от двери, а затем они должны выйти из двери.

Бесконечный цикл while утверждает, что если gold_room() пользователем ввод не изменяет управление (функции dead(... или gold_room()), то программа будет ждать ввода снова.

Первоначально медведь не двигался, поэтому bear_moved является ложным. Когда пользователь вводит taunt bear, это заставит медведя отойти от двери, сделав bear_moved истинным. На данный момент, если пользователь пытается taunt bear СНОВА, медведь убьет их. Однако, если пользователь вводит open door после того, как они однажды издеваются над медведем, они переместятся в следующую комнату.

1

while цикл выполняет свое тело, тогда как логическое условие истинно. TRUE всегда истинно, поэтому это бесконечный цикл.

0

a) Я не понимаю, почему активируется While. В строке 6 мы пишем, что условие bear_moved - False. Так что если он False и активируется, когда он True, он не должен активироваться!

в то время как True просто означает цикл бесконечно до перерыва.

Каждый раз, когда цикл while начинается, он проверяет, является ли True истинным (и это очень очевидно), поэтому он циклически навсегда (снова или до перерыва).

bear_moved - это переменная, которая не имеет никакого отношения к выполнению цикла while.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню