2013-07-20 3 views
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() 
+0

Почему вы используете 'флаг' в последнем цикле' while'? Если вам нужен бесконечный цикл, просто используйте 'while True:'. – Bakuriu

ответ

0

players.index(active_player) пытается найти и вернуть первое местоположение active_player в players. active_player - это номер, а не игрок. Вы просто хотите

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

(Другая ошибка: Вы забыли вызвать int на входе игрока на active_player Кроме того, список индексация начинается с 0, так что вы можете вычесть 1 из active_player при индексации в players.).

1

Эта линия:

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

гораздо сложнее, чем это должно быть. players.index возвращает индекс данного объекта в пределах players, поэтому вы ищете позицию номера, который вы только что ввели в списке. Итак, players.index(active_player) ищет номер, который вы только что ввели в игроках, и, если он его найдет, он возвращает индекс, который находится в пределах players. Так как players содержит Player объектов (не целых), поиск всегда терпит неудачу и генерирует исключение.

Я думаю, что вы пытаетесь сделать, это просто

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

Использование active_player в качестве индекса в списке. Следует отметить, что, поскольку индексация списка начинается с нуля, вы не должны считать нулевое значение «quit», иначе вы не сможете получить доступ к первому игроку в вашем списке.

Смежные вопросы