Stehen in Python Variablen über Funktionen?


19.10.2022, 18:57

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): "))
TheQ86  19.10.2022, 18:41

Kannst du deinen Code als Beispiel einfügen?

lukasxlama 
Fragesteller
 19.10.2022, 18:57

Ich hab die Frage mit dem Code ergänzt

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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².")

lukasxlama 
Fragesteller
 19.10.2022, 19:16

Hab's verstanden, danke!^^

1

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:

Bild zum Beitrag

Vielleicht konnte ich dir damit weiterhelfen. :)

 - (programmieren, Python)