@August1328: Da werden keine zwei Listen subtrahiert; da steht eigentlich schon das was Du vorschlägst, nur ist [ i ] (ohne die Leerzeichen) in normalem Beitragstext die Auszeichnung für kursive Schrift („italics“).
@Superpuff: Wenn Du Code in einem Beitrag zeigen willst, dann muss man den in Code-Tags setzten, so wie August1328 das gemacht hat. Sonst werden bestimmte Sachen als Textauszeichnung interpretiert und die Einrückung geht in der Anzeige verloren.
Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).
Sequenzen werden üblicherweise in der Mehrzahl von dem benannt, was für ein einzelnes Element ein passender Name wäre. Und man verwendet ”sprechende” Bezeichner, also nicht irgendwelche generischen griechischen Buchstaben als Namen, sondern Namen die dem Leser verraten, was die Werte im Kontext des Programms bedeuten.
Da ist ein Semikolon an einem Zeilenende das dort nicht hingehört und darauf hinweist, dass Du vielleicht von einer anderen Programmiersprache kommst, man das braucht um Anweisungen abzuschliessen. Da gibt es dann vielleicht auch andere Dinge die man *dort* macht, aber in Python *nicht*. Beispielsweise ist es in normalem Python schon ungewöhnlich einen Laufindex zu haben und damit dann auf Sequenzen wie Listen zuzugreifen. Man kann in Python direkt über die Elemente von Sequenzen iterieren, ohne den Umweg über einen Laufindex. Wenn man über zwei (oder mehr) iterierbare Objekte ”parallel” iterieren möchte, gibt es die `zip()`-Funktion:
Man muss nicht jedes kleine zwischenergebnis an einen Namen binden. Damit wird die Schleife, die `Phi` berechnet zu dem hier:
Code: Alles auswählen
torsion_angles = []
for angle, value in zip(angles, values_in_need_of_a_good_name):
torsion_angles.append(angle - value)
Wobei sich hier eine „list comprehension“ anbietet:
Code: Alles auswählen
torsion_angles = [
angle - value
for angle, value in zip(angles, values_in_need_of_a_good_name)
]
Allerdings gilt das nur für reines Python. Wenn man `numpy` verwendet, dann sollte man auch wirklich `numpy` verwenden. Also keine Schleifen in Python, sondern die vektorisierten Operationen die Numpy-Arrays bieten. Also tatsächlich das was August1328 vermutete, aber eben nicht mit Listen, wo das nicht geht, sondern mit Arrays, die man voneinander abziehen kann.
Dazu müssen die beiden Sequenzen als Arrays definiert werden und für die Winkel bietet es sich dann auch an tatsächlich das vorher importierte, aber unbenutzte `arange()` zu verwenden:
Code: Alles auswählen
angles = arange(0, 100, 10)
values_in_need_of_a_good_name = array(
[295, 321, 341, 0.5, 21, 37.5, 53.5, 68.5, 80, 90]
)
torsion_angles = angles - values_in_need_of_a_good_name
print(torsion_angles)
Du rechnest selbst aus, was es schon als `numpy.radians()`-Funktion gibt.
Zwischenstand:
Code: Alles auswählen
#!/usr/bin/env python3
from matplotlib import pyplot as plt
from numpy import arange, array, sin, radians
def main():
angles = arange(0, 100, 10)
values_in_need_of_a_good_name = array(
[295, 321, 341, 0.5, 21, 37.5, 53.5, 68.5, 80, 90]
)
torsion_angles = angles - values_in_need_of_a_good_name
print(torsion_angles)
plt.plot(sin(radians(angles)), torsion_angles)
plt.xlabel("sin(α) - Winkel α in °")
plt.ylabel("Torsionswinkel φ in °")
plt.title(
"Teilversuch 2:"
" Drehmoment eines Feldes auf eine stromdurchflossene Spule"
)
plt.grid(True)
plt.savefig("Plot_TV2.png")
plt.show()
if __name__ == "__main__":
main()