2012-08-23 115 views
1

對此可能關注的人,代碼執行中的小問題,python卡片遊戲模擬

這是卡片遊戲模擬的一些代碼。 (戰爭遊戲)。當我運行它時,我收到此錯誤:

player0.append(player1[range(warcard1 + 1)] 
    ^
SyntaxError: invalid syntax 

我不知道錯誤是什麼,但也許有人在這裏。希望有人能爲我解決這個問題。當然,代碼仍然是一項工作,所以如果還有其他的錯誤,我會很樂意聽到他們及其可能的解決方案。

import random 

cards = ['ace', 'ace', 'ace', 'ace', '1', '1', '1', '1', '2', '2', '2', '2', '3', '3', '3', '3', '4', '4', '4', '4', '5', '5', '5', '5', '6', '6', '6', '6', '7', '7', '7', '7', '8', '8', '8', '8', '9', '9', '9', '9', '10', '10', '10', '10', 'jack', 'jack', 'jack', 'jack', 'queen', 'queen', 'queen', 'queen', 'king', 'king', 'king', 'king'] 

order = ['ace', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'jack', 'queen', 'king'] 

print "shuffling cards" 
random.shuffle(cards,random.random) 
print "lets play" 
player0 = [cards[i] for i in range(len(cards)) if i % 2 == 1] 

player1 = [cards[i] for i in range(len(cards)) if i % 2 == 0] 

while (len(player0) > 0 or len(player1) > 0): 

    nextcard0 = player0[0] 
    nextcard1 = player1[0] 

    cardplayed0 = order.index(nextcard0) 

    cardplayed1 = order.index(nextcard1) 

    if cardplayed0 > cardplayed1: 

     player0.append(nextcard0) 
     player0.append(nextcard1) 
     player0.remove(nextcard0) 
     player1.remove(nextcard1) 

    elif cardplayed0 < cardplayed1: 

     player1.append(nextcard1) 
     player1.append(nextcard0) 
     player1.remove(nextcard1) 
     player0.remove(nextcard0) 

    elif cardplayed0 == cardplayed1: 
     while warcardvalue0 == warcardvalue1: 
      if len(player0) >= 4: 
       warcard0 = 4 
      elif len(player0) < 4: 
       warcard0 = len(player0) 

      if len(player1) >= 4: 
       warcard1 = 4 
      elif len(player1) < 4: 
       warcard1 = len(player1) 


      warcardvalue0 = order.index(warcard0) 
      warcardvalue1 = order.index(warcard1) 

      if warcardvalue0 > warcardvalue1: 
       player0.append(player0[range(warcard0 + 1)] 
       player0.append(player1[range(warcard1 + 1)] 
       player0.remove(player0[range(warcard0 + 1)] 
       player1.remove(player1[range(warcard1 + 1)] 

      elif warcardvalue0 < warcardvalue1: 
       player1.append(player1[range(warcard1 + 1)] 
       player1.append(player0[range(warcard0 + 1)] 
       player1.remove(player1[range(warcard1 + 1)] 
       player0.remove(player0[range(warcard0 + 1)] 
      else 
       print "another war!" 


if len(player1) == 0: 
    print "player1 won!" 
elif len(player0) == 0: 
    print "player0 won!" 

回答

5

線錯誤消息指出

player0.append(player1[range(warcard1 + 1)] 
             ^

缺少結束)

事實上,所有這些線都缺少閉括號:

 if warcardvalue0 > warcardvalue1: 
      player0.append(player0[range(warcard0 + 1)] 
      player0.append(player1[range(warcard1 + 1)] 
      player0.remove(player0[range(warcard0 + 1)] 
      player1.remove(player1[range(warcard1 + 1)] 

     elif warcardvalue0 < warcardvalue1: 
      player1.append(player1[range(warcard1 + 1)] 
      player1.append(player0[range(warcard0 + 1)] 
      player1.remove(player1[range(warcard1 + 1)] 
      player0.remove(player0[range(warcard0 + 1)] 

你可能希望查看您的代碼以確保沒有其他這種p的實例roblem。

,你可能會考慮(當然會受益)編輯器,爲你做paren matching,並會提醒你類似的問題。我使用一個,這絕對是值得的。

如果你有興趣在這樣的編輯器,這可能是開始探索選項的地方:Top 10 Best Text Editors With Brace Matching

+0

@ACollins如果這解決了您的問題,請考慮[通過單擊複選標記接受此答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235 #5235)。它會用一些觀點獎勵我們,並將此問題標記爲已解決。 – Levon

1

您在每個append/remove行缺少一個右括號。