Stehen in Python Variablen über Funktionen?
Hey,
Unser Informatiklehrer hat uns beigebracht, dass man nach den import von Bibliotheken immer Funktionen und erst danach Variablen (also die Variablen für die Funktionen) aufschreibt, weil das eine "Programmierrichtlinie" ist. Das hat auch mit der Idle funktioniert, aber wenn ich zuhause mit Pycharm ein Programm schreibe wo in Funktionen auch Variablen vorkommen, steht bei mir dann die Warnung:
Name 'seite_a' can be undefined
Wenn ich das Programm ausführe Funktioniert es nicht
NameError: name 'seite_a' is not defined
Die eigentliche Frage, die ich mir jetzt stelle ist, ob ich die Variablen über den Funktionen schreiben soll, oder ob ich das anders lösen kann?
Hier die Ergänzung. Das Programm soll anhand der zwei Seiten ermitteln ob es ein kleines/großes Rechteck/Quadrat ist:
### Funktion
print("\n")
if seite_a == seite_b and seite_a * 4 < 100:
print(f"Größenklasse: Kleines Quadrat\nFläche: {seite_a * seite_b} cm².")
if seite_a == seite_b and seite_a * 4 >= 100:
print(f"Größenklasse: Großes Quadrat\nFläche: {seite_a * seite_b} cm².")
if seite_a != seite_b and seite_a * seite_b < 200:
print(f"Größenklasse: Kleines Rechteck\nFläche: {seite_a * seite_b} cm².")
if seite_a != seite_b and seite_a * seite_b >= 200:
print(f"Größenklasse: Großes Rechteck\nFläche: {seite_a * seite_b} cm².")
### Variablen
seite_a = float(input("Gib die erste Seite des Rechtecks ein (in cm): "))
seite_b = float(input("Gib die zweite Seite des Rechtecks ein (in cm): "))
Kannst du deinen Code als Beispiel einfügen?
Ich hab die Frage mit dem Code ergänzt
3 Antworten
Die Definition der beiden Variablen seite_a und seite_b muss über der Berechnung stehen, da die Variablen bei den if-Statements noch nicht definiert sind.
Zuerst erfolgt das Auslesen der Benutzereingaben (Definition von seite_a und seite_b) und erst anschließend können diese eingegebenen Werte verwendet werden.
Unser Informatiklehrer hat uns beigebracht, dass man nach den import von Bibliotheken immer Funktionen und erst danach Variablen (also die Variablen für die Funktionen) aufschreibt, weil das eine "Programmierrichtlinie" ist.
Das muss demnach nicht immer der Fall sein. Wenn der Wert einer Variable von dem Rückgabewert einer Funktion abhängig ist, wird die Funktion erst definiert, danach die Variable, die auf diese Funktion zurückgreift.
Der Code muss also lauten:
### Variablen für die Benutzereingaben
seite_a = float(input("Gib die erste Seite des Rechtecks ein (in cm): "))
seite_b = float(input("Gib die zweite Seite des Rechtecks ein (in cm): "))
### Funktion; erst nach der obigen Definition können seite_a und b verwendet werden, nicht umgekehrt
print("\n")
if seite_a == seite_b and seite_a * 4 < 100:
print(f"Größenklasse: Kleines Quadrat\nFläche: {seite_a * seite_b} cm².")
if seite_a == seite_b and seite_a * 4 >= 100:
print(f"Größenklasse: Großes Quadrat\nFläche: {seite_a * seite_b} cm².")
if seite_a != seite_b and seite_a * seite_b < 200:
print(f"Größenklasse: Kleines Rechteck\nFläche: {seite_a * seite_b} cm².")
if seite_a != seite_b and seite_a * seite_b >= 200:
print(f"Größenklasse: Großes Rechteck\nFläche: {seite_a * seite_b} cm².")
Die Variablen müssen spätestens vor Funktionsaufruf definiert sein.
Ein einfaches Beispiel:
def say_word():
print(word)
say_word() # error
word = "Hello"
say_word() # "Hello"
Wenn du die Variable innerhalb der Funktion zudem noch veränden möchtest, brauchst du das Schlüsselwort global, damit die Funktion Schreibzugriff auf die äußere Variable erhält.
Beispiel:
def say_something():
global something
something = something + " world!"
print(something)
something = "Hello"
say_something() # "Hello world!"
Im Regelfall empfiehlt es sich jedoch, mit Parametern und Rückgabewerten zu arbeiten. So bekommt man eine bessere Übersicht im Code, denn jede Funktion arbeitet erst einmal nur mit den Werten/Variablen, die in ihr definiert wurden.
Beispiel:
def say_something(something):
print(something)
say_something("Hello")
say_something("world!")
Des Weiteren wird die Funktion auf diese Weise flexibler einsetzbar, denn sie ist nicht mehr an Elemente von außen gebunden. Das siehst du auch im obigen Beispiel: Die Funktion kann mehrmals mit verschiedenen Werten aufgerufen werden.
Übertragen auf deinen Code sollte deine Funktion zwei Parameter erhalten:
def berechne(seite_a, seite_b):
# ...
seite_a = # read input ...
seite_b = # read input ...
berechne(seite_a, seite_b)
Er wirft dir den Fehler aus, da du die Variablen unterhalb der if-Funktion angibst.
Die if-Funktion kann nur mit Variablen arbeiten, welche existieren und definiert sind.
Hier wäre der verbesserte Code:
Vielleicht konnte ich dir damit weiterhelfen. :)