Man benutzt keine globalen Variablen. Die Klammern um einzelne Variablen sind überflüssig. Statt einer Liste möchtest Du ein Tuple in der Liste speichern, oder besser noch ein namedtuple. Die Funktion add_node ist aber fast überflüssig, weil sie doch nur aus einem Befehl besteht. Was soll bei posn das n bedeuten?
Python zählt beim Index ab 0. Aber wie schon geschrieben ist es besser, ein namedtuple zu benutzen, statt magischer Indexwerte. Für die Koordinaten bietet sich Tupleunpacking an.
Da es sich bei den Koordinaten schon um ints handelt, ist eine Umwandlung unnötig.
Statt einen Index an distance_links zu übergeben, würde man am besten gleich das Nodeobjekt übergeben.
Warum gehören x1 und y1 zu node2, und x2/y2 zu node1?
Die Formel zur Abstandsberechung hat wieder etwas viele Klammern. Die Wurzelfunktion liefert immer positive Werte, abs ist also überflüssig.
Code: Alles auswählen
from collections import namedtuple
Node = namedtuple("Node", "position, weight, value, neighbours")
def add_node(nodes, position, weight, value, neighbours):
nodes.append(Node(position, weight, value, neighbours))
def distance_links(node1, node2):
x1, y1 = node1.position
x2, y2 = node2.position
return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** .5
def main():
nodes = []
add_node(nodes, (1,1), 1, 3, [2,3])
add_node(nodes, (0,4), 2, 1, [None])
add_node(nodes, (4,2), 2, 4, [1,2,4])
add_node(nodes, (2,2), 3, 3, [2,3,5])
add_node(nodes, (5,5), 2, 2, [2,4])
print(distance_links(nodes[0], nodes[2]))
if __name__ == "__main__":
main()