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'루프에서'flag'를 사용합니까? 무한 루프를 원한다면'while True :'를 사용하십시오. – Bakuriu

답변

0

players.index(active_player) 찾아 playersactive_player의 첫 번째 위치를 반환하려고합니다. active_player은 숫자가 아니라 플레이어입니다. 당신은

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

(기타 버그 : 당신은 active_player에 대한 플레이어의 입력에 int 전화를 잊었 또한, 목록 색인은 0에서 시작, 그래서 당신은 players로 색인 할 때 active_player에서 1을 뺄 수 있습니다..) 원하는

1

이 줄 :

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

그것이 있어야보다 훨씬 더 복잡하다. players.indexplayers 내에 주어진 객체의 색인을 반환하므로 목록에 방금 입력 한 번호의 위치를 ​​검색합니다. 따라서 players.index(active_player)은 방금 플레이어 내에 입력 한 번호를 검색하고 찾으면 players 안에있는 색인을 반환합니다. players에는 Player 개의 객체 (정수가 아님)가 있기 때문에 조회가 항상 실패하고 예외가 발생합니다.

나는 무엇을 당신이하려는 것은 바로

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

목록에 인덱스로 active_player을 사용하여 생각합니다. 그러나 목록 인덱싱이 0부터 시작되므로 "종료"값을 0으로 간주하면 목록의 첫 번째 플레이어에 액세스 할 수 없습니다.

관련 문제