In jedem der folgenden Codes hat es jeweils einen Fehler bzw. ein Problem.
Finde das Problem und beschreibe es in eigenen Worten.
Behebe das Problem und teste, ob der Code läuft.
Weshalb funktioniert folgender Code nicht?
def say_hello():
print("Hello")
print("Hello")
print("Hello!")
def say_goodbye():
print("Goooood...")
print(" ...bye!")
if input("Yes or no? (y/n)") == 'y':
say_hello
else:
say_goodbye
Lösung
In der If-Verzweigung unten soll entweder die Funktion say_hello oder die Funktion say_goodbye aufgerufen werden. Ein Aufruf einer Funktion muss aber immer Klammern (öffnende und schliessend) beinhalten, auch wenn nichts in den Klammern steht. say_hello
wird nicht als Aufruf einer Funktion erkannt, say_hello()
schon.
Was ist das Problem mit folgendem Code?
import random
def wuerfel():
return random.randint(1,6)
def drei_wuerfel():
return wuerfel(), wuerfel(), wuerfel()
drei_wuerfel()
Lösung
Wenn du den Code ausführst, siehst du, dass nichts passiert. Die Funktion drei_wuerfel() gibt drei Werte zurück (die durch dreimaligen Aufruf der Funktion wuerfel() zustande kommen). Aber unten wird bloss die Funktion aufgerufen und mit dem Rückgabewert wird nichts gemacht. Sinnvollerweise werden Funktionen, die etwas zurückgeben, nur verwendet, wenn mit dem zurückgegebenen Wert etwas gemacht wird, zum Beispiel so:
print(drei_wuerfel())
Was ist das Problem mit folgendem Code?
import random
def wuerfel():
return random.randint(1,6)
def drei_wuerfel(zahl):
return wuerfel()
return wuerfel()
return wuerfel()
print(drei_wuerfel())
Lösung
Die Funktion drei_wuerfel() hat drei return
-Anweisungen. Der Code ergibt eine Fehlermeldung, da die zweite (und dirtte) return
-Anweisung nie erreicht werden kann: Mit return
sagst du nicht nur, dass du den darauffolgenden Wert oder Ausdruck zurückgeben (engl. to return sth.) willst, sondern auch, dass du zum Hauptprogramm zurückkehren (engl. to return) willst.
Welche beiden Zahlen gibt folgender Code aus?
import math
a = 1
b = 2
def summe_quadrate1(a,b):
return a**2 + b**2
def summe_quadrate2(x,y):
return a**2 + b**2
print(summe_quadrate1(4,3))
print(summe_quadrate2(4,3))
Lösung
Der Code gibt esrt 25, dann 5 aus. Wo liegt nun das Problem? Wenn du nur die letzte Zeile anschaust, würdest du erwarten, dass diese Zeile die Zahl 25 ausgibt (4 hoch 2 plus 3 hoch 2). Aber sie gibt 5 aus. Die Definition der Funktion summe_quadrate2 hat die Arguente x und y, rechnet aber mit Variablen namens a und b. Normalerweise würde hier eine Fehlermeldung entstehen – aber das Problem ist dies: Die Variablen a und b sind ganz oben schon definiert. Also verwendet summe_quadrate2 einfach diese Variablen, x und y bleiben ungenutzt. Es gilt folgendes:
Merke: Definiere Variablen, die du innerhalb einer Funktino verwendest, immmer innerhalb der Funktion, nicht ausserhalb.
Die Aufgabenstellung geht so: Schreibe eine Funktion, die eine zufällige Zahl zwischen 1 und 10 zurückgibt.
Wo liegt das Probelem in folgendem Code mit Blick auf die Aufgabenstellung?
import random
def zufallszahl():
print random.randint(1,10)
print(zufallszahl())
Lösung
Dei Funktion zufallszahl() gibt keinen Wert zurück. Sie gibt bloss einen Wert aus. Damit die Funktion einen Wert zurückgibt, müsste print
durch return
ersetzt werden.
Merke: