Ich habe ein seltsames Problem in Python. Ich habe ein Labyrinth, x steht für Wände, g ist ein Ziel, s ist der Startpunkt und die Zahlen sind Portale, die dich von einer Zahl zur anderen bringen (zB wenn du auf eine der 2 geht, wird es dich zur andere 2).Python kann Strings nicht vergleichen
xxxxxxxxxxxxxxxxxxxx
x2 x
x xxx x
x 1 x xxxxx x
x s x x
x x x xxxxxxx
x xx xxxxx x
x x g x
x 1 x 2 x
xxxxxxxxxxxxxxxxxxxx
Ich versuche, alle Portale zu finden und sie in ein Array zu setzen. Soweit das funktioniert, findet das Programm alle vier Portale.
import tkinter as tk
from tkinter import filedialog
root = tk.Tk()
root.withdraw()
file = filedialog.askopenfilename()
def readMazeToArray(path):
with open(path) as f:
return [list(line.strip()) for line in f]
maze = readMazeToArray(file)
def findPortals(maze):
portals = []
for i in range(0, len(maze)):
for j in range(0, len(maze[i])):
if (maze[i][j] != 'g' and maze[i][j] != 's'
and maze[i][j] != 'x' and maze[i][j] != ' '):
portals.append([i, j])
return portals
Und von da an werden die Dinge ein bisschen seltsam. Hier ist der Code, der nicht arbeiten richtig scheint:
def portalHeuristic(maze, x1, x2, y1, y2):
portals = findPortals(maze)
for portal in portals:
for i in range(0, len(maze)):
for j in range(0, len(maze[i])):
if maze[i][j] == maze[portal[0]][portal[1]]
and (portal[0] != i or portal[1] != j):
return abs(x1 - portal[0]) + abs(y1 - portal[1])
+ abs(x2 - i) + abs(y2 - j))
print(maze[i][j] == maze[portal[0]][portal[1]])
print("x1 = ", x1, ", y1 = ", y1, ", portal0 = ",
portal[0], ", portal1 = ", portal[1], ", x2 = ",
x2, ", y2 = ", y2, ", i = ", i, ", j = ", j)
portalHeuristic(maze, 4, 4, 7, 14)
Was portalHeuristic
im Grunde tut, ist es jetzt iteriert durch ein Portal nach dem anderen suchen das gleiche Symbol (maze[i][j] == maze[portal[0]][portal[1]]
) des aktuellen Portal sondern sorgt dafür, dass es didn‘ Das aktuelle Portal selbst finden Sie, indem Sie die Koordinaten des aktuellen Portals und des gefundenen Portals mit demselben Symbol/derselben Nummer vergleichen (portal[0] != i or portal[1] != j
). Schließlich berechnet es die Entfernung zwischen Startpunkt und aktuellem Portal und seinem Zwillingsportal und dem Ziel.
Aber es scheint wie maze[i][j] == maze[portal[0]][portal[1]]
scheint nicht zu funktionieren, da mein Programm immer sagt mir das andere Portal wurde bei i = 9, j = 19 gefunden, egal welches Portal. Seltsamerweise, wenn ich für die Gleichheit der Strings auf eigene Faust teste, erkennt Python, dass es immer falsch ist. Was mache ich falsch? Ich habe jetzt mehr als 3 Stunden damit verbracht, nach dem Fehler zu suchen, aber ich kann es nicht finden. Vielleicht ist es wirklich blöd? Bitte tragen Sie auch mit meinem schrecklichen Code. Ich habe gerade mit Python begonnen.
Vielen Dank für die Hilfe, auch für den Artikel! Ich bin mir immer noch nicht ganz sicher, wie ich meine Heuristik berechnen soll ... Ich würde jeden Wert beider Tupel von '1' gleichzeitig brauchen, um diese Werte meiner Funktion zu geben. Ich müsste auch später die Reihenfolge der Werte ändern, falls das zweite Tupel zuerst entdeckt wird. –