Python:根据用户输入创建类的实例

时间:2014-06-18 14:47:24

标签: python function class

我需要根据用户输入创建一个以上的类实例。但在获得userInput后,我不知道如何处理它。

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) 

1 个答案:

答案 0 :(得分:0)

要创建x Monster个实例,请使用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