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)
Variablenübergabe
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.
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.
-
- 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
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
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.
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.
`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:
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()
-
- User
- Beiträge: 61
- Registriert: Donnerstag 9. April 2020, 18:47
danke für eure hilfreichen Kommentaren