Funktion Schiefer Wurf

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.
Antworten
j.lewi1
User
Beiträge: 2
Registriert: Donnerstag 6. Mai 2021, 09:53

Hallo zusammen,

ich habe im Zusammenhang einer Aufgabe, die Formel des schiefen Wurfes in einem Programm zu beschreiben. Dazu sollen mit der linspace Funktion beliebige x-Werte zu generieren und diese dann graphisch darzustellen.

Ich habe soweit mein Programm geschrieben, dass es ggf. negative Werte mittels einer while Schleife als falsch ausgibt.
Hier nun meine Frage:

Warum gibt mir das Programm nun keine Möglichkeit, meine Eingabewerte (h0, v0, ä0) einzugeben und zeigt mir in meiner Formel zu Berechnung der Höhe an, dass die Werte somit undefiniert sind? Wie stelle ich es richtig da, dass ich als Benutzer Werte einzugeben habe und dann die Werte auch berechnet werden und als verschiedene Wurfhöhen Werte h ausgegeben werden?

Hier der Code:

from math import (tan, cos)
import numpy as np

def Abwurfhöhe(h0):
h0 = -1
while h0 < 0:
h0 = float(input("Bestimme die Abwurfhöhe h0 [m]"))
if h0 < 0:
print("Negtive Werte sind unzulässig")

return (h0)
def Abwurfgeschwindigkeit(v0):
v0 = -1
while v0 < 0:
v0 = float(input("Bestimme die Abwurfgeschwindigkeit v0 [m/s]"))
if v0 < 0:
print("Negtive Werte sind unzulässig")

return v0
def Abwurfwinkel(ä0):
ä0 = -1
while ä0 < 0:
ä0 = float(input("Bestimme den Abwurfwinkel ä0 [Grad]"))
if ä0 < 0:
print("Negtive Werte sind unzulässig")

return ä0
x = np.linspace(0, 10, 10)
g = 9.81
h0 = Abwurfhöhe(h0)
v0 = Abwurfgeschwindigkeit(v0)
ä0_rad = np.deg2rad(Abwurfwinkel(ä0))
def Wurfhöhe(h):
h = h0 + x*tan(ä0_rad) - (g/(2*v0**2*cos(ä0_rad)**2))*x**2
return h
def Wurfhöhe(h):
h = h0 + x*tan(ä0_rad) - (g/(2*v0**2*cos(ä0_rad)**2))*x**2
return h


Vielen Dank für jeden Hinweis
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum übergibst Du den Funktionen Abwurfhöhe, Abwurfgeschwindigkeit und Abwurfwinkel Argumente, die Du gar nicht verwendest?
Dagegen fehlen bei `Wurfhöhe` die Arguemente h0, ä0_rad und v0.
Die Funktionen Abwurfhöhe, Abwurfgeschwindigkeit und Abwurfwinkel sind bis auf einen Ausgabetext identisch, können also zu einer Funktion zusammengefasst werden.
Statt einer Variable einen Dummy-Wert zu geben, damit eine while-Schleife startet, benutzt man eine while-True-Schleife.

Code: Alles auswählen

def input_nonnegative_number(text):
    while True:
        result = float(input(text))
        if result >= 0:
            break
        print("Negtive Werte sind unzulässig")
    return result
Hier fehlt noch eine Fehlerbehandlung, wenn der Nutzer gar keine Zahl eingibt.

So, sähe das dann komplett aus:

Code: Alles auswählen

from math import tan, cos
import numpy as np

def input_nonnegative_number(text):
    while True:
        result = float(input(text))
        if result >= 0:
            break
        print("Negtive Werte sind unzulässig")
    return result

def Wurfhöhe(h0, v0, ä0_rad, h):
    return h0 + x*tan(ä0_rad) - (g / (2 * v0**2 * cos(ä0_rad)**2)) * x**2

def main():
    h0 = input_nonnegative_number("Bestimme die Abwurfhöhe h0 [m]")
    v0 = input_nonnegative_number("Bestimme die Abwurfgeschwindigkeit v0 [m/s]")
    ä0_rad = np.deg2rad(input_nonnegative_number("Bestimme den Abwurfwinkel ä0 [Grad]"))

    x = np.linspace(0, 10, 10)
    g = 9.81

if __name__ == "__main__":
    main()
j.lewi1
User
Beiträge: 2
Registriert: Donnerstag 6. Mai 2021, 09:53

Hallo, vielen dank für das Feedback.

Ich habe noch eine Frage zu deinem Code:
Wenn ich jetzt Werte für die Formel Abwurfhöhe ausgeben möchte, müssen ja die definierten Formeln Abwurfhöhe sowie main() zusammengeführt werden - wie setzte ich das um, sodass ich dann gemäß des linspace eine vektorisierte Ausgabe der Höhewerte (hier definiert 10 Werte) bekomme? Beim Ausführen des codes bekomme ich die Meldung von undefinierten Variablen.

Vielen dank für die Hilfe,
Julius ;)
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Das konkrete Berechnen der Wurfhöhe fehlt in Deinem Code ja noch, daher habe ich das bei mir auch noch eingebaut. Das muß ans Ende der `main`-Funktion. Wenn Du undefinierte Variablen bekommst, hast Du wahrscheinlich Code außerhalb der passenden Funktion geschrieben, wo kein Code stehen sollte.
Antworten