Ich schreibe ein Programm, das eine Karte von Symbolen importiert und rekursiv die Karte navigiert. Es ist fertig und es funktioniert fast, aber aus welchen Gründen auch immer springt die Karte immer einen Punkt aus und ich kann nicht warum finden. Es soll den richtigen Pfad mit 'X' markieren und die Teile, die nicht mit einem '+' verwendet werden. Wenn jemand das überprüfen und einen Fehler finden könnte, den ich verpasst habe, wäre es sehr zu schätzen!Erstellen einer Karte mit Rekursion?
Das Gitter Ich versuche zu durchqueren sieht wie folgt aus:
Wenn Sie den Code mit dem Netz laufen lässt es auch einige Zeichen unverändert, und egal wo ich Code setzen sie ignoriert sie völlig. Ich habe etwas in wie versucht setzen:
for i in grid:
for j in i:
if j == "|":
j = "+"
if j == "#":
j = "+"
Und der Code, den ich es laufen bin auf ist:
grid = []
def buildGrid():
with open("Maze.txt" , "r") as f:
for line in f:
chars = []
for c in line:
if c != "\n":
chars.append(c)
grid.append(chars)
freeMouse(0, 0)
def showPath():
result = ""
for i in grid:
for j in i:
result += " "
result += j
result += "\n"
print(result)
def freeMouse (x, y):
if grid[y][x] == "O":
grid[0][0] = "S"
showPath()
elif grid[y][x] == "X":
return False
elif grid[y][x] == ("|"):
grid[y][x]= "+"
return False
elif grid[y][x] == ("+"):
return False
print("false")
grid[y][x] = "X"
if x != 0:
if y != 0:
left = freeMouse (x-1, y)
up = freeMouse(x, y -1)
if len(grid) == y + 1:
if len(grid[y]) != x+1:
right = freeMouse (x + 1, y)
if not right:
grid[y][x+1] = "+"
else:
if len(grid[y]) == x+1:
down = freeMouse(x, y+1)
else:
down = freeMouse(x, y+1)
right = freeMouse (x + 1, y)
if not right:
grid[y][x+1] = "+"
if not down:
grid[y+1][x] = "+"
if not up:
grid[y-1][x] = "+"
if not left:
grid[y][x-1] = "+"
else:
if len(grid[y])== x + 1:
left = freeMouse (x-1, y)
down = freeMouse (x, y+1)
else:
left = freeMouse (x-1, y)
down = freeMouse (x, y+1)
right = freeMouse (x+1, y)
if not right:
grid[y][x+1] = "+"
if not down:
grid[y+1][x] = "+"
if not left:
grid[y][x-1] = "+"
else:
if y != 0:
if len(grid) == y + 1:
up = freeMouse(x,y-1)
right = freeMouse (x+1, y)
else:
up = freeMouse(x, y-1)
down = freeMouse(x, y+1)
right = freeMouse(x + 1, y)
if not down:
grid[y+1][x] = "+"
if not up:
grid[y-1][x] = "+"
else:
down = freeMouse(x, y+1)
right = freeMouse(x+1, y)
if not down:
grid[y+1][x] = "+"
buildGrid()
Bitte geben Sie die von Ihnen verwendete Eingabedatei an, damit das Problem reproduzierbar ist. Veröffentlichen Sie auch das Ergebnis, das Sie erhalten. – albertoql
Ihr Code hat viele Probleme. Die Funktion 'freeMouse' gibt niemals' True' zurück; Die einzigen Rückgabewerte sind 'False' und' None'. Sie haben eine print-Anweisung nach einer return-Anweisung, die nicht erreichbar ist. Sie rufen freeMouse mehrmals nacheinander auf, ohne den Rückgabewert zu überprüfen. Das bedeutet, dass Ihr Programm weiterhin nach Pfaden durch das Labyrinth suchen kann, nachdem es bereits einen gefunden hat. Das erste Code-Snippet, das Sie angeben, führt zu nichts, da Sie die Schleifenvariablen ändern, nicht das Raster. Wenn Sie denken, dass der Code "fast funktioniert", irren Sie sich. –
Ich würde vorschlagen, dass Sie zuerst Teile Ihres Codes in atomaren Funktionen definieren/umgestalten und dann jede Funktion einzeln testen, bevor Sie sie zusammensetzen. Das gibt Ihnen eine Möglichkeit, es Schritt für Schritt auszuarbeiten. – Mai