2013-11-27 56 views
0
def take_turn(Nplayers, hands, player, pile, turn): 
    while finished(hands) is not True: 
     pile.append(hands[player][0]) # this line 
     hands[player].pop(0) 
     while pile[-1] <= 10: 
      print(turn, ':', '\nPile:', pile, '\nHands\n', '\n'.join(map(str, hands)), '\n') 
      check_players(Nplayers, hands, player, pile, turn) 
      turn += 1 
      player = (player + 1) % Nplayers 
      if len(hands[player]) == 0: 
       hands.pop(player) 
       Nplayers -= 1 
       player = player % Nplayers 
      pile.append(hands[player][0]) 
      hands[player].pop(0) 
      if table[-1] > 10: 
      break 
     penalty_card(Nplayers, hands, player, pile, turn) 
    return turn 

由(#這條線)標記線返回在標題中所述的錯誤,在我的節目,我已經設置播放器最初等於0,所以應該有沒問題吧?類型錯誤:列表索引必須是整數,沒有列出

編輯:手是一個列表的列表,玩家是一個整數

+0

您能否顯示回溯,以及調用'take_turn'函數的代碼? – falsetru

+1

什麼是「手」和「播放器」? – karthikr

+0

手是一個列表的列表,播放器是一個整數,代碼是幾百行的長... – harryjmm

回答

0

這將是一個更容易幫助如果提供了一個工作代碼示例。它看起來有很多副作用的功能。也許你可以包含一些最小模仿和下面的示例調用來做一個包含的,可運行的問題演示?

def finished(hands): 
     if len(hands) == 0: 
      return True 
     return False 


def check_players(*args, **kwargs): 
    pass 


def penalty_card(*args, **kwargs): 
    pass 


table = [9] 


def take_turn(Nplayers, hands, player, pile, turn): 
    while finished(hands) is not True: 
     pile.append(hands[player][0]) # this line 
     hands[player].pop(0) 
     while pile[-1] <= 10: 
      print(turn, ':', '\nPile:', pile, '\nHands\n', '\n'.join(map(str, hands)), '\n') 
      check_players(Nplayers, hands, player, pile, turn) 
      turn += 1 
      player = (player + 1) % Nplayers 
      if len(hands[player]) == 0: 
       hands.pop(player) 
       Nplayers -= 1 
       player = player % Nplayers 
      pile.append(hands[player][0]) 
      hands[player].pop(0) 
      if table[-1] > 10: 
       break 
     penalty_card(Nplayers, hands, player, pile, turn) 
    return turn 


take_turn(Nplayers=1, hands=[[1,1,1], [1,1], [1]], player=0, pile=[5, 5], turn=3) 
相關問題