2017-02-28 164 views
-1

我真的沒有得到什麼功能bear_moved是?爲什麼需要「bear_moved」?

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: 
     choice = raw_input("> ") 

     if choice == "take honey": 
      dead("The bear looks at you then slaps your face off.") 
     elif choice == "taunt bear" and not bear_moved: 
      print "The bear has moved from the door. You can go through it now." 
      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." 

這是學習Python堅硬方式,鍛鍊35

+3

請注意,我強烈建議你找一本不同的書,因爲現在LPTHW已經過時了(現在Python 2已經成爲一種傳統語言了)。 –

+3

bear_moved不是函數,它是一個指示熊是否已移動的變量。 當你嘲諷這隻熊時,這個變量被設置爲True,然後你可以打開門。 – sobek

+0

這看起來像一個非常腥的程序流程,因爲沒有任何可能的方式來打破這個循環,並且最終會越過兔子洞。你不明白布爾的什麼部分? – Sayse

回答

2

這三個elif測試可以挑選其中之一的bear_moved布爾標誌的影響:

elif choice == "taunt bear" and not bear_moved: 
    # ... 
elif choice == "taunt bear" and bear_moved: 
    # ... 
elif choice == "open door" and bear_moved: 
    # ... 

在你進入while環,bear_moved標誌是False,所以輸入taunt bear不能選擇第二個選項,因爲and bear_moved爲false。這同樣適用於open door選項;如果您在開始時輸入open door,您會收到一條I got no idea what that means消息。因此該標誌確保只有第一個選項可以由Python輸入。

所以,當你在taunt bear鍵入拳頭的時候,匹配elif塊打印出消息(The bear has moved...),並設置bear_moved = True,之後就回到while循環的頂部。在此之後,再次輸入taunt bear將Python帶到第二個elif分支,因爲現在and not bear_moved爲假(not TrueFalse)。

在遊戲中,這意味着你只能嘲諷一旦。這會讓你走到門口;如果你嘲笑這隻熊,你會死。

+0

哇!我真的得到了我在問題中所要求的。非常感謝。你說過:找另外一本書來學習Python。但我是新手代碼,所以我想把LPTHW作爲Python的指導。也許你有更好的建議? –

+0

請參閱http://sopython.com/wiki/What_tutorial_should_I_read%3F瞭解一些建議。 –