我试图用Python写一个国际象棋“瑞士”锦标赛经理。我有两个类,一个匹配类和一个玩家类。我还有两个词典,name_object,它将一个字符串名称绑定到一个对象,以及name_score,它将Player对象的名称绑定到Player对象的得分(1.0,2.5等)。
变量示例
name_object = {'Jim' : Object, 'Jack' : Object}
name_score = {'Jim': 2.5, 'Jack' : 1.0}
我的课程
class Player:
def __init__(self, name, gender, rating, score):
self.name = name
self.gender = gender
self.rating = rating
self.score = score
class Match:
def __init__(self, white, black):
self.white = white
self.black = black
def Result(self, res):
global name_object, name_score
complete = False
if res == 1:
if complete == False:
name_object[self.white].score += 1
name_score[self.white] += 1
complete = True
elif res == 0:
if complete == False:
name_object[self.black].score += 1
name_score[self.black].score += 1
complete = True
elif res == 'd':
if complete == False:
name_object[self.white].score += .5
name_score[self.white] += .5
name_object[self.black].score += .5
name_score[self.black].score += .5
但是当我尝试创建一个具有'Jim'和'Jack'两个玩家名称的对象时,
Match1 = Match(name_object['Jim'], name_object['Jack'])
然后尝试使用白色获胜调用Result方法,
Match1.Result(1)
我收到此错误,
line 43, in Result
name_object[self.white].score += 1
KeyError: <__main__.Player object at 0x02AB6DF0>
非常感谢所有帮助
答案 0 :(得分:1)
self.white
设置为name_object['Jim']
,因此当您执行name_object[self.white]
时,您实际上正在搜索dict,如
name_object[name_object['Jim']]
我非常怀疑这是有道理的。您可能需要考虑将'Jim'
单独传递到self.white
,然后在其余代码中使用name_object[self.white]
。
答案 1 :(得分:0)
通过眼球,您的name_object
dict包含密钥字符串('Jim'
和'Jack'
)。但是你的
name_object[self.white].score += 1
行(Python抱怨的那个)没有使用字符串来索引name_object
。它正在使用name_object['Jim']
(这是代码中未定义的代码Object
)来索引该字典。这就是你获得KeyError
的原因:你试图使用不在dict中的密钥来索引dict。
你如何解决这个问题取决于你。我无法猜测你是否想要使用Player
的字符串或实例来索引你的字典。