2015-04-24 129 views
1

在練習36中,我現在就開始學習Python,學習Python The Hard Way,在練習36中,我想創建一個好的遊戲,並在繼續下一個練習之前學習更多技巧。我還沒有接觸過類和對象的主題,但我想看看我能否做一些比標準的第一個「選擇你自己的冒險」遊戲更復雜的東西。在全球範圍內存儲變量的替代方法

我想收集'Ganon's Lair'中的四個不同的鑰匙,然後使用這四個鑰匙在'主廳'中打開一扇門。我已經完成了一些(不是很好),但我仍然需要弄清楚如何存儲密鑰而不會擦除它們。一個不古板的方法是將它們分配爲全局變量,例如我在這裏做的。

def grass_room(): 
global key1 
grass_instructions = """As you enter the lair of the grass room, you see 
         a spider hanging on the ceiling, with his 
         big eye focused on you. You could grab your 1.slingshot, 
         or perhaps 2.make a run for the green-coloured key under his 
         tail?""" 
    print grass_instructions 
    gohma_boss = raw_input("> ") 
    if gohma_boss == "1": 
     print "You shoot him in the eye, he falls down and dies. You grab the key, and return." 
     key1 = True 
    main_hall("not_empty") 
    else: 
     print die("You die.") 
    main_hall("not_empty") 

對於不同的方法,除了使它們成爲全局性的'保存'這個鍵的任何建議嗎?

回答

3

如果你想要一些變量或變量函數之間共享,有幾個方法可以做到這一點:*

  1. 通過每個變量的值到每一個函數作爲參數,並從返回它每個函數都是返回元組的一部分。
  2. 將所有值包裝在某個結構中,例如dict,您可以按名稱查看每個東西,因此只有一個值可以傳遞並返回。
  3. 設置一個對象的值屬性,並將該函數轉換爲該對象類型的方法。
  4. 使用閉包,我不打算解釋,因爲我相信你還沒有學習閉包。
  5. 使用全局變量。

這樣做的Pythonic方法絕對是#3,但你還沒有了解類。在那種情況下,我只是使用#5,就像你已經在做的那樣。

而當你瞭解類,回來修改這個腳本來使用類將是一個很好的練習。


*其實,在幕後,選擇3-5選項2的所有非常語法糖......但是不要擔心。

+0

謝謝,今晚我會試試這些:) – JuroNemo

0

你可以使你的key數據類型列表或字典,並將key列表/字典傳遞到每個鍵改變功能。由於列表和字符串是可變的,所以在一個函數中對key列表/字典所做的更改將顯示在調用範圍內以及key傳遞給的任何後續函數中。