Seite 1 von 1

Variablenübergabe

Verfasst: Dienstag 3. Januar 2023, 12:31
von Kobra23759
Hallo,
kann mir jemand helfen und sagen warum dieses Programm bei z.Bsp. i=-3 nicht funktioniert?
Wenn ich die if-Abfrage wegnehme und a=False setze bekomme ich keine Fehlermeldung
Vielen Dank

global a, b

def auswertung(i):
if i>0:
print("i größer 0")
a=False
print("A=",a," B=",b)

a=True ; b=True
i=3
while i!=0:
i=int(input("Eingabe i:"))
auswertung(i)

Re: Variablenübergabe

Verfasst: Dienstag 3. Januar 2023, 12:39
von __deets__
Das ist doch nun wirklich nicht dein erstes Rodeo hier. Ueber 50 Posts, und immer noch nicht die code-Tags drauf... Bitte poste deinen Code in eben diesen code tags, sonst ist er schwer zu lesen. Weil die Einrueckungen verloren gehen.

global funktioniert nicht so, wie du das glaubst. Du solltest global eh nicht verwenden, aber wenn es so funktionieren wuerde, wie du es hier benutzt, waere das eine Katastrophe - denn dann koennte man nachtraeglich und unabsichtlich einfach durch deklaration eines Namens als global jede Funktion, die zufaellig diesen Namen bisher unbehelligt lokal benutzt hat, kaputt machen.

Re: Variablenübergabe

Verfasst: Dienstag 3. Januar 2023, 12:44
von Kobra23759
sorry,
für mich ist es verwunderlich, dass die Fehlermeldung nur kommt wenn ich die "if i>0"- Anweisung schreibe
kannst du da noch mal einen kommentar geben

Re: Variablenübergabe

Verfasst: Dienstag 3. Januar 2023, 12:47
von __deets__
Weil du nunmal keine globale Variable in deiner Funktion hast. Und nur wenn der if-Zweig durchlaufen wird, hast du eine *LOKALE* Variable a.

Ausserdem immer die vollstaendige Fehlermeldung und den dazu passenden Code posten. Nicht "ich aendere da rum, und dann kommt da so ein Fehler" schreiben. Das macht uns mehr Arbeit, voll von raten und falschen Vermutungen. Wenn es denn ueberhaupt funktioniert.

Re: Variablenübergabe

Verfasst: Dienstag 3. Januar 2023, 13:00
von Sirius3
`a` ist eine lokale Variable in `auswertung` wird aber nur gesetzt, wenn der if-Block betreten wird. Unter anderem deshalb sollte man keine globalen Variablen benutzen, sondern alle Werte per Argumente übergeben.
Man initialisiert keine Variablen mit Dummy-Werten, nur damit eine while-Schleife startet. Statt dessen benutzt man while-True mit einem entsprechenden if-Block und break.
; benutzt man nicht, jede Anweisung bekommt eine eigene Zeile.
Als ordentliches Programm könnte das so aussehen:

Code: Alles auswählen

def auswertung(i, a, b):
    if i > 0:
        print("i größer 0")
        a = False
    print("A=", a, "  B=", b)
    return a


def main():
    a = True
    b = True
    while True:
        i = int(input("Eingabe i:"))
        a = auswertung(i, a, b)
        if i == 0:
            break

if __name__ == "__main__":
    main()

Re: Variablenübergabe

Verfasst: Dienstag 3. Januar 2023, 13:07
von Kobra23759
danke für eure hilfreichen Kommentaren