Versuchen Sie herauszufinden, wie diese parallele Zuweisung funktioniert. Der vollständige Code kann here gefunden werden. (Rohe Github-Python-Datei) Hier ist, was ich habe Probleme mit:Python Parallel Assignment
def assign_move(square):
# Parallel Assignment
target, direction = max(
((neighbor, direction) for direction, neighbor in enumerate(game_map.neighbors(square))
if neighbor.owner != myID),
default = (None, None),
key = lambda t: t[0].production)
ich es nach unten brechen würde so viel wie ich weiß, aber ich bin wahrscheinlich etwas falsch zu machen.
target, direction = max(iterable, default, key)
Ordnen wir der gleichen Sache Ziel und Richtung zu? Ich dachte, parallel Zuordnung etwas wie x, y = 5, 6
Nun war, wenn wir an der iterable
aussehen, ist es folgende:
iterable = ((neighbor, direction) for direction, neighbor in enumerate(game_map.neighbors(square)) if neighbor.owner != myID)
Wie können wir (neighbor , direction)
vor der for-Schleife haben? Was macht die if
Aussage hier? Brauchen wir unter dem if-Block nichts, wenn neighbor.owner != myID
?
Wenn der Iterator leer ist, geben wir None, None
wie unten angezeigt zurück?
default = (None, None),
Und das ist die Funktion, die wir verwenden, um das Maximum zu bestimmen?
key = lambda t: t[0].production)
Hintergrund, wenn nötig: Dieser Code für ein Bot Halite im Spiel gespielt werden soll. Es ist ein vorgefertigter Bot, der in dieser GitHub repo gefunden wurde.
Das ist keine 'for' Schleife mit einer' if' Anweisung; es ist ein [Listenverständnis mit einem Filter] (https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions) – Hamms
Ahh perfekt! Ich hatte keine Ahnung, wonach ich überhaupt suchen sollte. – Loaf
@Hamms: Genex, nicht LC. Keine eckigen Klammern. –