@DrewTimes: Zum einlesen: Man muss nicht jedes kleine Zwischenergebnis an einen Namen binden:
Code: Alles auswählen
with open(input("Was ist der Roboterpfad?"), encoding="utf-8") as file:
data = []
for line in file:
data.append(line.strip("\n").split("\t"))
Jetzt ist die Schleife so einfach, dass man das als „list comprehension“ schreiben kann:
Code: Alles auswählen
with open(input("Was ist der Roboterpfad?"), encoding="utf-8") as file:
data = [line.strip("\n").split("\t") for line in file]
Was allerdings noch fehlt, ist das die einzelnen Elemente in Zahlen umgewandelt werden, denn sonst kann man die gar nicht mit 2π vergleichen:
Code: Alles auswählen
In [21]: "42" < 2*np.pi
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-21-e91c8c0ad4db> in <module>
----> 1 "42" < 2*np.pi
TypeError: '<' not supported between instances of 'str' and 'float'
Also:
Code: Alles auswählen
with open(input("Was ist der Roboterpfad?"), encoding="utf-8") as file:
data = [list(map(float, line.split("\t"))) for line in file]
Aber wie Sirius3 schon geschrieben hat: Nimm gleich die passende Numpy-Funktion.
Bei der Verarbeitung der Daten fällt auf, dass jeder Zweig in dem verschachtelten ``if``/``else``-Konstrukt mit der selben Code-Zeile endet. Die gehört da nicht drei mal in den Code, sondern *einmal* hinter den Code der die Entscheidungen trifft und die Daten verarbeitet.
Wenn man diese Zeile dort heraus zieht, fällt auf, dass in zwei Zweigen überhaupt gar nichts gemacht wird und man ein ``pass`` hinschreiben muss:
Code: Alles auswählen
if path.shape[1] == 7:
pass
else:
calc = np.array_split(path, 2)
if (calc[1] < 2 * np.pi).all():
pass
else:
degrees = np.array(math.degrees(calc[1]))
path = np.append([calc[0]], [[degrees]])
print("Hier ist das gewünschte Array:", path)
Hier kann man den Code vereinfachen in dem man die Bedingungen umkehrt und den jeweils nutzlosen Zweig weg lässt:
Code: Alles auswählen
if path.shape[1] != 7:
calc = np.array_split(path, 2)
if (calc[1] >= 2 * np.pi).any():
degrees = np.array(math.degrees(calc[1]))
path = np.append([calc[0]], [[degrees]])
Jetzt noch der Hinweis von Sirius3 bezüglich `math`-Funktionen umgesetzt, und wir landen hier (ungetestet):
Code: Alles auswählen
#!/usr/bin/env python3
import numpy as np
def main():
path = np.loadtxt(
input("Was ist der Roboterpfad?"), delimiter="\t", encoding="utf-8"
)
if path.shape[1] != 7:
calc = np.array_split(path, 2)
if (calc[1] >= 2 * np.pi).any():
path = np.append([calc[0]], [[np.degrees(calc[1])]])
print("Hier ist das gewünschte Array:", path)
if __name__ == "__main__":
main()