我试图建立一个幸存者游戏,将允许我比较存储的字符对彼此单独和作为一个部落的成员。我可以用一个属性来实现它,但是不能找到将它扩展到多个属性的最佳方法。你知道吗
示例:
TribeAStr = {'John': 50, 'Tyler': 55, 'Joe': 90, 'Bob': 55}
# check who is the strongest Survivor
$ strongest = max(TribeAStr, key=TribeAStr.get)
#Remove him from TribeA
del TribeAStr[strongest]
#Check how strong the Tribe is as a whole
$ tribeastrength = sum(TribeAStr.values())
我想做的是让每个幸存者拥有他们自己的属性,然后使用他们的名字作为一个键,然后可以拉入类似的场景,如上所述。像这样:
class Survivor:
def __init__(self, name, str=None, int=None, cha=None, luk=None):
self.name = name
self.str = strength
self.int = intelligence
self.cha = charisma
self.luk = luck
TribeA = {}
John = Survivor{'John', 50, 40, 55, 20}
Bob= Survivor{'Bob', 55, 40, 80, 25}
Joe= Survivor{'Joe', 60, 10, 65, 10}
Tyler= Survivor{'Tyler', 56, 30, 15, 25}
TribeA.update('John', 'Bob', 'Joe', 'Tyler')
# check who is the strongest Survivor
$ strongest = max(Survivor, Survivor.str) for Survivor in TribeA
有什么建议吗?你知道吗
这应该起作用:
要从TribeA中移除最强的玩家,请使用以下命令:
第一个问题是语法错误:
在Python中,调用构造函数就像调用普通函数一样,使用括号:
你的第二个问题是你不能仅仅用一个键列表来
update
一个dict;你需要用一个dict(或者一个键值对列表)来更新它。不然它怎么知道你想要什么价值观?所以:但实际上没有理由仅仅为了
update
而创建一个空的dict;只需一次性创建它:如果每个名字要写两遍似乎是重复的,你可以通过使用听写理解来解决这个问题:
或者,也许您不想首先创建这些变量;您可以直接将对象存储在dict中:
你的第三个问题是你理解语法有误:
你必须把整个理解放在传递给
max
的括号里。而且,你要按强度来分类,所以你要把强度放在第一位,而不是一对一对。最后,如果你的部族是一个dict,你不能只是在dict上循环,它只是给你钥匙。您需要在值上循环:但请注意,这不仅会给你最强大的幸存者,而且会给你两个值,最强大的幸存者的力量和幸存者。你可以扔掉你不想要的:
…但使用键函数可能更好,如Sorting HOWTO中所述:
您可以定义用于确定
Survivor
的总体评级的方法,可能是所有属性的sum
,并将其用作max
的key
,以确定最强的Survivor
:这将输出:
相关问题 更多 >
编程相关推荐