Python:寻找列表中的东西

问题描述:

def 
    for i in play.inventory: 
     if "Sword" in i and "[S]lash" not in abilities: 
      abilities.append("[S]lash") 
     elif "Bow" in i and "[F]ire" not in abilities: 
      abilities.append("[F]ire") 
     elif "Fists" in i and "[P]unch" not in abilities: 
      abilities.append("[P]unch") 
     elif "Legs" in i and "[K]ick" not in abilities: 
      abilities.append("[K]ick ") 
     return abilities 

因此,目前我有这个代码从我的一个单独的问题,但使用它时,它大部分进展顺利,除了它只承认“拳头”(名单是['拳' ,“腿”]),如果剑触发它可是我没有试过,但我想这首先固定预期的结果应该是:Python:寻找列表中的东西

abilities = ["[K]ick","[P]unch"] 

在这之后我把它打印出来使用:

for a in aca: 
    print(a) 

哪里ACA是能力。

目前其成果是:

for a in aca: 
    print(a) 
>>[P]unch 

使用PyCharm CE,Python的3.5.2

由于要求: play.inventory是一个类的对象(我想?)代码,它:

class Player: 
    def __init__(self): 
     self.inventory = [] 

play = Player() 
+1

你忘了张贴_at least_什么 “play.inventory” 是... –

+0

完成。对不起, – CatsInSpace

+0

“play.inventory”是一个空列表,“能力”也应该是一个空列表。请张贴一个最小的完整可验证例如:http://*.com/help/mcve –

您应该删除的elif,只是使用if,也是设置将帮助你在这里有很多。

abilities = set(abilities) #this will make each item appear only once... 
    if "Sword" in play.inventory: 
     abilities.add("[S]lash") 
    if "Bow" in play.inventory: 
     abilities.add("[F]ire") 
    if "Fists" in play.inventory: 
     abilities.add("[P]unch") 
    if "Legs" in play.inventory: 
     abilities.add("[K]ick ") 
    return list(abilities) 

你也可以做一个单循环

i2a = {"Sword": "[S]lash", 
      "Bow": "[F]ire", 
      "Fists": "[P]unch", 
      "Legs": "[K]ick"} 
    for i, a in i2a.items(): 
     if i in play.inventory: 
      abilities.append(a) 
    return list(set(abilities)) #another way to remove duplicates...