0

Python でチェス 'Swiss' トーナメント マネージャーを作成しようとしています。マッチ クラスとプレーヤー クラスの 2 つのクラスがあります。また、文字列名をオブジェクトにバインドする name_object と、Player オブジェクトの名前を Player オブジェクトのスコア (1.0、2.5 など) にバインドする name_score という 2 つの辞書もあります。

変数の例

    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' の 2 つのプレイヤー名でオブジェクトを作成しようとすると、

    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]、実質的にdictを次のように検索します

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 が不満を言っている行) は、 index に文字列を使用していませんname_object。その辞書にインデックスをname_object['Jim']付けるために(これは undefined-in-the-code-you've-shown ですObject)を使用しています。辞書にないキーを使用して辞書にインデックスを付けよKeyErrorうとしています。

どのように修正するかはあなた次第です。文字列を使用するか、辞書のインスタンスを使用するかはわかりませPlayer

于 2013-09-26T03:47:03.527 に答える