0

次のステートメントでプレイヤーのオブジェクトにポイントを追加したいと思います。

 players[players.index(active_player)].points += moves[active_move]

オブジェクトをセットアップするための全体的なコードは非常に単純ですが、入力したプレーヤーがリストにないという値エラーが表示されます。補足コードは次のとおりです。

class Player(object):
        def __init__(self, name):
            self.name = name
            self.points = 0

def setup(players):
    numplayers = int(raw_input("Enter number of players: "))
    for i in range(numplayers):
        name = raw_input("Enter player name: ")
        player = Player(name)
        players.append(player)

def display_moves(moves):
    for item in moves:
        print item, moves[item]

def main():
    players = []
    moves = {'Ronaldo Chop': 10, 'Elastico Chop': 30, 'Airborne Rainbow': 50, 'Fancy Fake Ball Roll': 50, 'Stop Ball and Turn': 20}
    setup(players)
    display_moves(moves)
    flag = False
    while not flag:
        active_player = raw_input("Enter a player (0 to exit):")
        if active_player == 0:
            break
        active_move = raw_input("Enter a move: ")
        players[players.index(active_player)].points += moves[active_move]

main()
4

2 に答える 2

1

この行:

players[players.index(active_player)].points += moves[active_move]

必要以上に複雑です。players.index内の特定のオブジェクトのインデックスを返すplayersため、リストに入力したばかりの番号の位置を検索しています。入力した番号をplayerplayers.index(active_player)内で検索し、見つかった場合は、内のインデックスを返しますplayersplayersオブジェクト (整数ではない)が含まれているためPlayer、ルックアップは常に失敗し、例外がスローされます。

あなたがやろうとしていることはただだと思います

players[active_player].points += moves[active_move]

リストのインデックスとして使用active_playerします。ただし、リストのインデックスはゼロから始まるため、ゼロを「終了」値と見なすべきではありません。そうしないと、リストの最初のプレーヤーにアクセスできなくなります。

于 2013-07-20T00:35:06.417 に答える
0

players.index(active_player)の最初の場所を見つけて返そうとしactive_playerますplayersactive_playerただし、プレーヤーではなく数字です。あなたはただ欲しい

players[active_player].points += moves[active_move]

int(その他のバグ:のプレーヤーの入力を呼び出すのを忘れていましたactive_player。また、リストのインデックスは 0 から始まるため、active_playerにインデックスを付けるときにから 1 を減算することもできますplayers。)

于 2013-07-20T00:34:32.123 に答える