0

我试图用 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>

非常感谢所有帮助

4

2 回答 2

1

self.white设置为name_object['Jim'],所以当你这样做时,name_object[self.white]你实际上是在搜索字典

name_object[name_object['Jim']]

我非常怀疑这是有道理的。您可能需要考虑'Jim'单独传入 as self.white,然后name_object[self.white]酌情在其余代码中使用。

于 2013-09-26T03:39:07.810 回答
0

通过眼球,您的name_objectdict 具有键('Jim''Jack')字符串。但是你的

name_object[self.white].score += 1

行(Python 抱怨的那个)没有使用字符串来索引name_object。它正在使用name_object['Jim'](这是您已显示的未定义代码Object)来索引该字典。这就是你得到的原因KeyError:你试图使用不在字典中的键来索引字典。

你如何修复它取决于你。我无法猜测您是否使用字符串或实例Player来索引您的字典。

于 2013-09-26T03:47:03.527 回答