2012-03-01 140 views
2

我想學習Python的學習Python的困難方式的幫助。 (Gothons從地球Percal#25),我已經達到了鍛鍊41,你可以看到完整的代碼>here<學習Python困難的方式,練習41頭痛

我明白了一切,直到最後一個函數亞軍()

def runner(map, start) 
    next = start 

    while True: 
     room = map[next] 
     print "\n--------" 
     next = room() 

runner(ROOMS, 'central_corridor') 

至於我能理解,下一個被分配了start的值,這是要運行的第一個函數的關鍵。 while循環開始,將該鍵處的功能分配給房間。 然後函數打印出一行破折號,之後它將函數調用的返回值分配給變量下一個

我不明白的是爲什麼用戶「看到」被調用的函數。對我來說,看起來函數調用只是分配給變量下一個。我會期望像下一個()房間()是下一行。其次,我不明白爲什麼while循環停止,不應該繼續,直到錯誤或退出?

這些對你們大多數人來說可能看起來像是愚蠢的問題,但我對編程遊戲並不陌生,我不明白在這個網站的其他地方給出這個問題的答案。

希望有人能愚蠢到我的水平,並解釋給我...

+0

看起來像使用[此搜索]發現的一些問題的副本(http://stackoverflow.com/search?q=python+exercise+41)。這些問題的答案應該可以幫到你。 – gary 2012-03-01 14:12:00

+0

可能的重複[Learn Python the Hard Way,Exercise 41](http://stackoverflow.com/questions/7909334/learn-python-the-hard-way-exercise-41) – Jacob 2012-03-02 02:04:22

回答

2

用戶看到被調用的函數,因爲該函數打印的東西。

功能實際上是被稱爲(與「房間()」)和調用的結果設置爲下一個。 例如如果房間是「the_bridge」,則打印一些東西,然後返回「死亡」,「escape_pod」或「the_bridge」。

儘管「while True:」是一個無限循環,但Python有一種完全退出程序的方法。

電話「exit(0)」退出整個程序,然後,沒有問任何問題。

+0

謝謝,我想我現在明白了,只是我必須圍繞這個事實,即即使將返回的值分配給變量,函數調用仍會寫入屏幕。這回答了我的兩個問題。 – 2012-03-02 15:41:18

0

我不知道你有多少的問題有,但我會澄清兩兩件事:

(1)next = room()作品,因爲地圖是一個dict,這是函數的值,所以room = map[next]檢索功能從map,並將該函數存儲在變量room中。表達式room()調用該函數。 (2)看看代碼,看起來循環的唯一出口是程序退出時,或者拋出異常(如果有的話)。

0

Gothon的事情甚至不是Ex 41. (也許是以前,這篇文章寫的時候呢?現在是Ex 43) 無論如何,這是令人困惑的。 我以爲我終於找到了與前41相關的東西,然後我來到這裏看到這個...