2011-08-17 134 views
1

我在練習35中的一些問題是「學習python的難辦法」。學習python的困難之路,練習35

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。所以如果它是假的,並且當它是真時激活,它不應該激活!

b)IF和ELIF行中的AND運算符也有問題。我們爲什麼問如果bear_moved值的變化?除了第33行以外,塊中沒有其他指令會影響bear_moved(但該行退出while)。

我不確定我是否已經解釋了我自己,請告訴我,如果我沒有。並感謝你的答案,我是一個完整的新手。

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

回答

0

一)我不明白爲什麼當激活。在第6行中,我們寫出bear_moved條件爲False。所以如果它是假的,並且當它是真時激活,它不應該激活!

而True只是意味着無限期循環直到休息。

每次while循環開始時,它會檢查True是否爲真(並且非常明顯),以便它永遠循環(再次或直到中斷)。

bear_moved是一個與while循環的執行無關的變量。

1

while循環在布爾條件爲true時執行其主體。 TRUE總是如此,所以它是一個無限循環。

1

a)它說While True不是While bear_moved,True是一個常量,所以這個while循環將永遠持續下去。

二)由於while循環那張永遠和一些答案(「嘲諷熊」)可以改變的bear_moved

執行此函數的值將不斷地問問題,直到你死亡或者被執行gold_room()

編輯:一起死我的意思了dead()功能被執行,而不是你自己會死,我真的希望你保持身體健康,同時學習Python的:-)

2

一)while環不測試bear_moved它測試True這是,總是如此。 b)不同之處在於,你只能移動熊一次 - 第二次將是致命的。這有助於區分。但我不認爲這是很好的風格 - 一個更好的方式是

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

一)我不明白爲什麼當激活。在第6行中,我們寫出bear_moved條件爲False。所以如果它是假的,並且當它是真時激活,它不應該激活!

This While True construct 創建無限循環。這將循環,直到發生break語句或其他控制流改變語句。

b)IF和ELIF行中的AND運算符也有問題。我們爲什麼問如果bear_moved值的變化?除了第33行以外,塊中沒有其他指令會影響bear_moved(但該行退出while)。

您提供的代碼似乎模擬了以下情況:用戶被困在房間裏,有一隻熊。他們需要輸入正確的動作讓熊離開門,然後他們需要退出門。

無限while循環認爲,如果用戶給出的輸入不改變控制(功能dead(...gold_room())程序將等待再次輸入

最初,熊沒有移動,所以bear_moved是錯誤的。當用戶輸入taunt bear時,這將使熊離開門,使bear_moved成立。此時,如果用戶再次嘗試taunt bear,那麼熊會殺死它們。但是,如果用戶輸入open door後,他們已經嘲笑一旦,他們將移動到下一個房間。

相關問題