Variablenübergabe

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
Kobra23759
User
Beiträge: 61
Registriert: Donnerstag 9. April 2020, 18:47

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)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Kobra23759
User
Beiträge: 61
Registriert: Donnerstag 9. April 2020, 18:47

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
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Sirius3
User
Beiträge: 18276
Registriert: Sonntag 21. Oktober 2012, 17:20

`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()
Kobra23759
User
Beiträge: 61
Registriert: Donnerstag 9. April 2020, 18:47

danke für eure hilfreichen Kommentaren
Antworten