Изучите Python на нелегком пути ex35 Bear Room - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь понять конкретный фрагмент кода в задаче 35 «Изучить Python - трудный путь», прежде чем двигаться дальше.

В соответствии с запросом книги, я писал выше комментарий примерно к каждой строке (или блоку) кода, чтобы разбить то, что происходит, чтобы я мог проверить свое понимание того, что происходит.

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

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 # default status of bear


while True:
    bear_loop_counter = 0
    choice = input("bear room input>  ")

    if choice == "take honey":
        dead("The bear looks at you and slaps your face off.")

    elif choice == "taunt bear" and not bear_moved:
        print("The bear has moved from the door.")
        print("You can go through it now.")
        bear_loop_counter += 1
        print("The bear room loop has iterated",bear_loop_counter, "time.")
        bear_moved = True
    elif choice == "taunt bear" and bear_moved:
        dead("The bear gets pissed off and chews your leg off.")
    elif choice == "open door" and bear_moved:
        gold_room()
    else:
        print("I got no idea what that means")

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

Я пытаюсь понять фрагмент кода, который говорит:

elif choice == "taunt bear" and not bear_moved

Я понимаю, что этот цикл while в основном ждет, когда вы войдете в одну из ветвей, которая выйдет изцикл (dead () или один из битов other_room ()).Я также знаю, что по умолчанию «состояние» медведя - «not_moved» и что ветвь «taunt_bear» изменит статус медведя.Я не получаю часть «и не» этого сегмента кода.

Я понимаю, что:

bear_moved = False

Мне кажется, это будет означать, что «а не bear_moved»«будет интерпретироваться как« а не bear_moved (False) », что, в свою очередь, будет читать« и bear_moved (True) », если вы упростите эту логику.Итак, написано простым английским языком: «Если ваш выбор насмехаться над медведем, а медведь передвигается, выполните некоторые операторы печати ... увеличьте счетчик и т. Д.»Очевидно, это не то, как работает код.Я могу видеть из своего счетчика и просто запуска программы, что оператор «а не» не работает так, как я только что объяснил.

Я полагаю, что я работаю в предположении, что bear_moved установлен МЭ в значение False, когдаЯ написал код.Я мог бы понять, что делает то, что делает, если Python принимает bear_moved как True или что-то в этом роде.Я думаю:

bear_moved = False

Поэтому:

not bear_moved == True

Вот вопрос, по которому я ищу разъяснения.

Заранее спасибо.

1 Ответ

0 голосов
/ 24 мая 2018

Здесь not bear_moved означает, что bear_moved - это False.

Цитирование the python doc :

Оператор не возвращает True, если егоАргумент ложный, иначе Ложь.

...