字典中的Python对象键错误
我正在尝试用Python编写一个国际象棋“瑞士”锦标赛管理器。我有两门课,一门比赛课和一门球员课。我还有两个字典,name_object,它将字符串名称绑定到对象,name_score,它将播放器对象的名称绑定到播放器对象的分数(1.0、2.5等) 变量示例字典中的Python对象键错误,python,dictionary,Python,Dictionary,我正在尝试用Python编写一个国际象棋“瑞士”锦标赛管理器。我有两门课,一门比赛课和一门球员课。我还有两个字典,name_object,它将字符串名称绑定到对象,name_score,它将播放器对象的名称绑定到播放器对象的分数(1.0、2.5等) 变量示例 name_object = {'Jim' : Object, 'Jack' : Object} name_score = {'Jim': 2.5, 'Jack' : 1.0} 我的课 class Player: d
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'])
然后尝试调用带有white winning的Result方法
Match1.Result(1)
我得到这个错误
line 43, in Result
name_object[self.white].score += 1
KeyError: <__main__.Player object at 0x02AB6DF0>
第43行,在结果中
名称\对象[self.white]。分数+=1
关键错误:
非常感谢所有帮助
self.white
设置为name\u object['Jim']
,因此当您执行name\u object[self.white]
操作时,实际上是在搜索dict-like
name_object[name_object['Jim']]
我非常怀疑这是否有道理。您可能需要考虑在代码< >代码> Goo>白> <代码>中,然后在代码的其余部分中使用<代码> NAMEXObj[Out.White ] < /代码>。 < P>由眼球,您的代码> NAMEI对象< /代码> DICT具有键的字符串(<代码> 'JIM' 和<代码> JACK < /代码>)。但是你的
name_object[self.white].score += 1
第行(Python抱怨的一行)没有使用字符串索引name\u对象
。它使用name\u object['Jim']
(这是您显示的object
)中未定义的代码来索引该dict。这就是为什么您会得到KeyError
:您试图使用一个不在dict中的键来索引该dict
如何修复它取决于你自己。我猜不出你是想使用字符串还是
Player
的实例来索引你的指令。为什么你需要/想要全局?全局是不知道更好的指示符。因为我需要在其他函数中使用name\u object和name\u score在这种情况下:你使用pdb来找出对象包含哪些名称作为键和键将其与您试图用来访问dict的键进行比较。无需将模块级dict定义为全局dict。代码中的哪一点是self.white设置为name_object['Jim'],是在name_object[self.white]时执行的。分数+=1执行匹配时返回(name_object['Jim'],name_object['Jack']))
然后self.white=white
。嘿,过了一会儿,我解决了这个问题。你的回答很有帮助,让我进一步完善了我的计划。非常感谢,约翰尼。