2013-02-18 11 views
1

Je tente de faire un jeu reversi en utilisant python. c'est le code pour un tableau blancQue signifie un index de chaîne hors plage?

#reversi 
import random 
import sys 
board = range(9) 
def char_range(start, end, step=1): 
    for char in range(ord(start), ord(end), step): 
     yield char 
def drawBoard(board): 
    ###this prints out the board 
    HLINE = ' +-+-+-+-+-+-+-+-+' 
    VLINE = ' | | | | | | | | |' 
    print(' a b c d e f g h') 
    print(HLINE) 
    for y in range(8): 
     print(y+1, end = '|.|') 
     for x in char_range('a','h'): 
      print('| %s' %(board[x][y]), end='.') 
     print('|') 
     print(HLINE) 
def resetBoard(board): 
    #blanks out the board 
    for x in char_range('a', 'h'): 
     for y in range(8): 
      board[x][y] = '.' 
    #starters 
    board[c][3] = 'X' 
    board[c][4] = 'O' 
    board[d][3] = 'O' 
    board[d][4] = 'X' 
def getNewBoard(): 
    #new board 
    board = [] 
    for i in range(9): 
     board.append([' '] * 9) 
    return board 
getNewBoard() 
drawBoard(board) 
resetBoard(board) 

pour une raison quand je l'exécute je reçois ce message:

File "C:\Users\Larry\Desktop\test.py", line 18, in drawBoard 
print('| %s' % (board[x][y]), end='.') 
IndexError: string index out of range 

ce que cela signifie. dois-je changer

char_range() 

ou

print('| %s' % (board[x][y]), end='.') 
+1

Cela signifie que la chaîne n'est pas aussi grand que vous le pensez et vous ne pouvez pas indexer après sa fin. – JBernardo

Répondre

0

Votre variable conteneur board = 'board' est une chaîne ancienne plaine, qui est un itérables mais il est seulement 1 dimension « profonde ». Ensuite, vous accédez comme:

board[x][y]

On suppose que x est 2, alors board[x] est égal à 'a'. Maintenant, lorsque vous essayez d'accéder board[x][y] à n'importe quelle position (y) autre que 0, vous obtiendrez un IndexError du type que vous voyez.

Je suis sûr que vous ne voulez pas board être la chaîne 'board', mais en fait une représentation utile de la carte dans une structure bidimensionnelle de quelque sorte (par exemple un tableau numpy ou une liste de listes).

+0

alors qu'est-ce que je change? Est-ce que je fais board = board [x] [y]? – derpyherp

+0

Vous devez décider comment vous allez modéliser le tableau dans votre programme! Je recommande d'utiliser un tableau numpy 8x8. – wim

+0

lol je n'ai aucune idée de ce que c'est – derpyherp

0

Comme wim a commenté, un dict est souvent une façon parfaitement bien mettre en place un conseil d'administration comme celui-ci

def getNewBoard(): 
    #new board 
    board = {} 
    for x in range(8): # or x in 'abcdefgh': if you prefer 
     for y in range(8): 
      board[x, y] = ' ' 
    return board 

Et ne pas oublier d'assigner le conseil d'administration à board

board = getNewBoard() 
+0

pourquoi je reçois Keyerror: 97 – derpyherp

+0

@derpyherp, ne faites-vous pas quelque chose comme 'board [ord ('a')]' ?? ?? –

+0

print ('|% s'% (tableau [x] [y]), fin = '.') KeyError: 97 – derpyherp

Questions connexes