Variable wird in der Def nicht erkannt

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
Woodler
User
Beiträge: 2
Registriert: Montag 23. November 2020, 10:54

Hallo zusammen,
Ich hab ein kleines Problem mit meiner Variablen "v".
Ich benenne diese außerhalb der Def, also als globale Variable. Diese wird aber in der Def nicht erkannt.
Bestimmt ist der Fehler recht offensichtlich für jemanden der schon lange Python programmiert.

Ich hoffe sehr, ihr könnt mir weiterhelfen.

Der Code:

Code: Alles auswählen

a = 0.8
h = 80
v = 5    
           

def test():
    import math as m
    t_be = v/a
    
    s_be = 0.5*a*t_be**2
    s_f = h-2*s_be
   
    t_f = s_f/v     
    t_br = t_be
    t_w = 10  

    tf = 1        
    
    if t_f < tf:         
        v = ((-tf*a) + m.sqrt((tf*a)**2-4*(-h*a))) / 2
        
        tbe = v/a
        tbr = tbe
        
        t1 = tbe
        t2 = t1 + tf
        t3 = t2 + tbe
        t4 = t3 + t_w
        t5 = t4 + tbe
        t6 = t5 + tf
        t7 = t6 + tbr
    
    else: 
        t1 = t_be
        t2 = t1 + t_f
        t3 = t2 + t_br
        t4 = t3 + t_w
        t5 = t4 + t_be
        t6 = t5 + t_f
        t7 = t6 + t_br
    
test()
Rückgabe:

Code: Alles auswählen

UnboundLocalError: local variable 'v' referenced before assignment
Bl3nder
User
Beiträge: 139
Registriert: Freitag 3. Januar 2020, 17:07

Hey Ich bin selber noch Anfänger nur versuch mal diese in deine funktion zu übergeben :


Code: Alles auswählen

a = 0.8
h = 80
v = 5


def test(v,h,a):
    import math as m
    t_be = v / a

    s_be = 0.5 * a * t_be ** 2
    s_f = h - 2 * s_be

    t_f = s_f / v
    t_br = t_be
    t_w = 10

    tf = 1

    if t_f < tf:
        v = ((-tf * a) + m.sqrt( (tf * a) ** 2 - 4 * (-h * a) )) / 2

        tbe = v / a
        tbr = tbe

        t1 = tbe
        t2 = t1 + tf
        t3 = t2 + tbe
        t4 = t3 + t_w
        t5 = t4 + tbe
        t6 = t5 + tf
        t7 = t6 + tbr

    else:
        t1 = t_be
        t2 = t1 + t_f
        t3 = t2 + t_br
        t4 = t3 + t_w
        t5 = t4 + t_be
        t6 = t5 + t_f
        t7 = t6 + t_br


if __name__=="__main__":
    test(v,h,a)

Ich meine du kannst das sonst auch direkt mit global hier ein Link : https://www.programiz.com/python-progra ... -variables


und setz lieber dein Import über deine Funktion

Code: Alles auswählen

 import math as m







A = 0.8
H = 80
V = 5


def test(v,h,a):
    t_be = v / a

    s_be = 0.5 * a * t_be ** 2
    s_f = h - 2 * s_be

    t_f = s_f / v
    t_br = t_be
    t_w = 10

    tf = 1

    if t_f < tf:
        v = ((-tf * a) + m.sqrt( (tf * a) ** 2 - 4 * (-h * a) )) / 2

        tbe = v / a
        tbr = tbe

        t1 = tbe
        t2 = t1 + tf
        t3 = t2 + tbe
        t4 = t3 + t_w
        t5 = t4 + tbe
        t6 = t5 + tf
        t7 = t6 + tbr

    else:
        t1 = t_be
        t2 = t1 + t_f
        t3 = t2 + t_br
        t4 = t3 + t_w
        t5 = t4 + t_be
        t6 = t5 + t_f
        t7 = t6 + t_br


if __name__=="__main__":
    test(V,H,A)
Eine Vision ohne Aktion bleibe eine Illusion
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Woodler: Da es eine Zuweisung an `v` innerhalb der Funktion gibt, ist das ein lokaler Name der nichts mit dem `v` auf Modulebene zu tun hat.

Auf Modulebene gehören keine Variablen, da kommt nur Code hin der Konstanten, Funktionen, und Klassen definiert. Und Konstanten werden per Konvention KOMPLETT_GROSS geschrieben.

Man sollte auch verständliche Namen verwenden und keine kryptischen Abkürzungen und auch keine nummerierte Namen. Bei nummerierten Namen will man sich entweder bessere Namen ausdenken, oder gar keine Einzelnamen sondern eine Datenstruktur verwenden. Oft eine Liste.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten