class Enemy:
def __init__(self,name,health):
self.name=name
self.health=health
wolf=Enemy('wolf',100)
imp=Enemy('imp',70)
orc=Enemy('orc',130)
enemyList=[wolf,imp,orc]
while 1:
enemyNumber=int(input("How many enemies are there? "))
if enemyNumber in range(1,4):
break
else:
print('Wrong number')
if enemyNumber<=2:
del enemyList[2]
if enemyNumber==1:
del enemyList[1]
基本上我现在想要的是能够说出这样的话:
attackTarget=None
while not attackTarget in enemyList:
attackTarget=input('Which enemy do you want to attack? ')
if not attackTarget in enemyList:
wrongChoice()
问题在于我没有敌人名单的列表,而是实例本身。我知道我可以通过以下方式获得它:
enemyNameList=[]
for i in range (enemyNumber):
enemyNameList.append(enemyList[i].name)
但是,是否有一种更简单的方法可以在while和if语句中使用而无需创建一个全新的永久列表?像enemyList.name
之类的东西答案 0 :(得分:2)
您可以使用列表理解:
enemeyNameList = [enemy.name for enemy in List]
这仍然会创建一个全新的列表,但更加清晰。
如果您尝试在不创建新列表的情况下执行此操作,则可能会遇到不同类型的低效问题。由于您在while循环中重复测试,因此存储名称列表是有意义的。否则,你必须在每次通过循环时反复查找每个敌人的名字。