2014-06-18 89 views
-2

我需要根據用戶輸入創建一個以上的類實例。但是在獲得userInput後,我不知道該如何處理它。Python:根據用戶輸入創建一個類的實例

class Monster(): 
    def __init__(self): 
     self.hp = 25 
    def hit(self, hp): 
     self.hp -= h 

獲取userInput以創建它們的代碼以及將每個怪物分配給門的代碼。

def nMonsters(): 
    global nMonsters 
    nMonsters = int(raw_input("How many monsters are hiding?")) 
    if nMonsters >= nDoors: 
     while nMonsters >= nDoors: 
      clear() 
      print ("Every monster needs a room.") 
      print ("Rooms available"), nDoors - 1 
      nMonsters = int(raw_input("How many monsters are hiding?")) 
def monsterDoor_assignement(): 
    global monsterDoor 
    monsterDoor = random.randint(1, nDoors) 
+0

看來你不想要多個類,但一個類的多個實例? – glglgl

+1

這裏的問題究竟是什麼?你知道如何創建一個'Monster'實例嗎?你知道如何獲得創建「怪物」實例的數量嗎?你究竟在哪裏卡住? – jonrsharpe

+0

您應該使用'list'來存儲'Monster'的實例,並使用'for'循環來創建x個實例。 – sloth

回答

0

要創建xMonster情況下,使用for循環或只是一個list comprehension

monsters = [Monster() for _ in range(x)] 

這給你一個list,其中每個項目是一個Monster實例。


您使用global是一個壞主意。爲什麼不簡單地return分配的門,並使門的數量參數?

def monster_door_assignment(doors): 
    return random.randint(1, doors) 

或者,更好的,假設你分配給每個Monster到一個單獨的門:

def monster_door_assignment(doors, monsters): 
    return random.sample(range(1, doors+1), monsters) 

使用random.sample產生的唯一的隨機整數的列表,每個怪物。現在,您可以zip整數返回的列表與Monster實例的列表,每個分配給自己的房間:

list(zip(monsters, monster_door_assignment(doors, x))) 
[(<__main__.Monster object at 0x0311FC30>, 2), 
(<__main__.Monster object at 0x0311FCD0>, 4), 
(<__main__.Monster object at 0x0311FCF0>, 9), 
(<__main__.Monster object at 0x0311FD10>, 1), 
(<__main__.Monster object at 0x0311FD30>, 7)] 

列表中的每一項都是一個二元組(monster, door number)


你迅速輸入代碼也尷尬 - 看this SO community wiki關於循環的有效輸入的指南。

+0

我會更加註意使用return。謝謝! –

+0

@Aka_Minimal沒問題。依賴於變量訪問的範圍是不好的 - 它使開發和測試變得更加困難,並且爲您打開各種棘手的錯誤。顯式參數和返回值意味着您可以更輕鬆地單獨測試每個函數。 – jonrsharpe

+0

這是因爲你不能同時分配('=')和'return'。嘗試'返回monster_deaths + 1'。 – jonrsharpe

相關問題