Kräfteberechnung per Python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Sirius3
User
Beiträge: 18255
Registriert: Sonntag 21. Oktober 2012, 17:20

@cck1989: wie Caskuda schon bei seinem letzten Beispiel geschrieben hat, solltest du erst gar nicht zwei getrennte Listen haben, sondern gleich im richtigen Format die Werte einlesen. Dann braucht man auch kein zip.
cck1989
User
Beiträge: 13
Registriert: Samstag 4. Juli 2020, 19:12

Caskuda hat geschrieben: Freitag 10. Juli 2020, 22:13 @cck1989:
zip ist eine wunderschöne Funktion, um Listen zusammenzufassen, allerdings bin ich selbst noch weit davon entfernt alle Finessen zu meistern.

Vermutlich wirst du dir die math.radians() - Methode ansehen wollen, um die Winkel in Bogenmaß zu bekommen.

Es ist eine Weile her, aber du willst die Kraft jeweils in eine X- und Y-Achsen Projektion aufteilen?
Ja das ist richtig
Gruß
Fynn
cck1989
User
Beiträge: 13
Registriert: Samstag 4. Juli 2020, 19:12

Sirius3 hat geschrieben: Samstag 11. Juli 2020, 09:43 @cck1989: wie Caskuda schon bei seinem letzten Beispiel geschrieben hat, solltest du erst gar nicht zwei getrennte Listen haben, sondern gleich im richtigen Format die Werte einlesen. Dann braucht man auch kein zip.
Erwirke ich durch den input namens „force“ und „tangle“ in der Liste „forces “ 2 eigene Listen, welche sich durch force und tangle ergeben

Wenn beide Inputs den selben Namen haben, dann speichert er mir die Werte zwischen eine gemeinsam eckigen Klammer?
Gruß
Fynn
cck1989
User
Beiträge: 13
Registriert: Samstag 4. Juli 2020, 19:12

Das habe ich jetzt gebaut, was sagt ihr dazu,
ich habe es nicht umgesetzt bekommen alles bei einer Liste zu lassen.

Code: Alles auswählen

# Rechnerische Addition von Kräften
import math
from math import pi
from math import sin
from math import cos
from math import atan
from math import radians



anzahl_kraefte = int(input("Wie viele Kräfte sollen addiert werden?"))
forces = list()
tangles = []
print ("Bitte tragen Sie Ihre Kräfte ein.")
print()
for _ in range(anzahl_kraefte):
    force = input('Betrag der Kraft:   ')
    tangle = input('Der zugehörige Winkel zur Kraft:   ')
    forces.append(float(force))
    tangles.append(float(tangle))
#for force in forces:
	#print(f'Kraft {force}')
#for tangle in tangles:
    #print(f'Winkel {tangle}')

tangle_float_list = []
for item in tangles:
    tangle_float_list.append(float(item))
#print (tangle_float_list)

bogenlaenge = []
for x in tangle_float_list:
   bogenlaenge.append(math.radians(x))
#print(bogenlaenge)

list_of_sinus = []
list_of_cosinus = []

for y in bogenlaenge:
    list_of_sinus.append(sin(y))
    list_of_cosinus.append(cos(y))
#print (list_of_cosinus, list_of_sinus)

force_x = []
force_y = []

for i in range(len(forces)):
    force_y.append(round(forces[i]*list_of_sinus[i],3))
    force_x.append(round(forces[i]*list_of_cosinus[i],3))
print()
print("Die Kraft der y-Achse betragen")
print(round(sum(force_y),3),"N")
y_force = (round(sum(force_y),3))
print("Die Kraft der x-Achse betragen")
print(round(sum(force_x),3),"N")
x_force = (round(sum(force_x),3))
print()
print("Die resultierende Kraft beträgt")
print(round(math.sqrt(round(((sum(force_x)))**2 + (((sum(force_y)))**2),3)),3),"N")
print("Der Winkel der resultierenden Kraft beträgt")

if y_force > 0 and x_force > 0:
    a =(round(atan(y_force / x_force),2)*180/pi)
    print(round((a),2))
if y_force > 0 and x_force < 0:
    b = (round(atan(y_force / x_force),2)*180/pi)
    print(round((b+180),2))
if y_force < 0 and x_force > 0:
    c = (round(atan(y_force / x_force),2)*180/pi)
    print(round((c+360),2))
if y_force < 0 and x_force < 0:
    d = (round(atan(y_force / x_force),2)*180/pi)
    print(round((d+180),2))
Gruß
Fynn
Sirius3
User
Beiträge: 18255
Registriert: Sonntag 21. Oktober 2012, 17:20

Das sind doch viel zu viele Listen, die gar nicht gebraucht werden. Man muss nicht jeden kleinen Rechenschritt zwischenspeichern. tangle_float_list ist identisch zu tangles. Gerundet wird erst bei der Ausgabe und zwar mit Formatangaben.

Code: Alles auswählen

# Rechnerische Addition von Kräften
from math import sin, cos, atan2, radians, degrees

anzahl_kraefte = int(input("Wie viele Kräfte sollen addiert werden?"))
forces = []
print ("Bitte tragen Sie Ihre Kräfte ein.")
print()
for _ in range(anzahl_kraefte):
    force = input('Betrag der Kraft:   ')
    tangle = input('Der zugehörige Winkel zur Kraft:   ')
    forces.append((float(force), float(tangle)))

cartesian_forces = []
for force, tangle in forces:
    angle = radians(tangle)
    cartesian_forces.append((force * cos(angle), force * sin(angle)))
force_y = sum(y for x, y in cartesian_forces)
force_x = sum(x for x, y in cartesian_forces)
force = (force_x ** 2 + force_y ** 2) ** 0.5
angle = degrees(atan2(force_y, force_x))
print()
print("Die Kraft der y-Achse betragen")
print(f"{force_y:.3f}N")
print("Die Kraft der x-Achse betragen")
print(f"{force_x:.3f}N")
print()
print("Die resultierende Kraft beträgt")
print(f"{force:.3f}N")
print("Der Winkel der resultierenden Kraft beträgt")
print(f"{angle:.3f}N")
cck1989
User
Beiträge: 13
Registriert: Samstag 4. Juli 2020, 19:12

@Siruis3, danke für deine Antwort.
Langsam denke ich habe ich einen Zugang zu Python.

alles erledigt, keine offenen Fragen mehr
Thema kann geschlossen werden
Gruß
Fynn
Antworten