我需要根据用户输入创建一个以上的类实例。但在获得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)
答案 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。