2017-10-05 6 views
0

Ich schreibe einen Code in Python 3, der das Spiel von fünfzehn spielt. Ich arbeite gerade an der Funktion, eine Kachel zu bewegen, aber ich kann mich nicht weiter bewegen. Hier ist, was meine Funktion sieht aus wie jetzt:Listenindex außerhalb des Bereichs in 2d Array

def move(tile, d, board): 
    for r in range(d): 
     for c in range(d): 
      if tile == board[r][c]: 
       if board[r][c + 1] == "00": 
        # execute a swap algorithm 
       if board[r][c - 1] == "00": 
        # execute a swap algorithm 
       if board[r - 1][c] == "00": 
        # execute a swap algorithm 
       if board[r + 1][c] == "00": 
        # execute a swap algorithm 
    return False 

d die Dimension hier der Karte ist, die der Benutzer bereitstellt, beispielsweise der Benutzer 4, das Board wird ein 4x4-Quadrat mit den Zahlen 00-15 in es. Was ich hier erreichen will, ist zu überprüfen, ob der Wert der Liste rechts, links, unten oder oben gleich den zwei Nullen ist, denn so habe ich es codiert, ich werde es ändern, nachdem ich fertig bin . Wenn ich mein Programm laufen druckt er das Brett, aber sobald ich in einem Befehl eingeben, die Move-Funktion auslöst, erhalte ich diese Fehler:

08 07 06 
05 04 03 
02 01 00 
Tile to move: 1 
Traceback (most recent call last): 
    File "fifteen.py", line 58, in <module> 
    if move(tile, d, board) == False: 
    File "fifteen.py", line 30, in move 
    if board[r + 1][c] == "00": 
IndexError: list index out of range 

Kann jemand helfen?

Antwort

0

In for r in range(d), r iteriert über Werte 0-d-1. Wenn also rd-1 entspricht, gibt r + 1 Ihnen d, was außerhalb des Bereichs liegt. Sie müssen prüfen, ob r + 1 innerhalb der Grenzen liegt. Gleiches gilt für jede if Anweisung in Ihrem Code.

Versuchen Sie so etwas wie:

def isWithinBounds(x, lower, upper): 
    return x >= lower and x < upper 

wo niedrigere = 0 und obere = Maß von Bord.

Verwandte Themen