Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
gf_informatik:funktionen:problems [2023-02-22 11:29] – [Problem 5] gragf_informatik:funktionen:problems [2025-06-11 08:49] (aktuell) – [Problem 4] gra
Zeile 2: Zeile 2:
 In jedem der folgenden Codes hat es jeweils einen Fehler bzw. ein Problem. In jedem der folgenden Codes hat es jeweils einen Fehler bzw. ein Problem.
  
-Finde das Problem und beschreibe es in eigenen Worten+Gehe für jedes Problem nach dem folgenden Muster vor: 
-Behebe das Problem und testeob der Code läuft.+  - *Predict*: Code lesen und voraussagen, was passiert
 +  - *Run*: Führe den Code in [[https://webtigerpython.ethz.ch/]] aus und vergleiche das Resultat mit deiner Voraussage. 
 +  - *Inspect*: Untersucheweshalb der Code nicht funktioniert - schreibe einen `# Kommentar` hinter die fehlerhafte Zeile. 
 +  - *Modify*: Behebe den Fehler im Code. 
  
 ==== Problem 1 ==== ==== Problem 1 ====
Zeile 17: Zeile 21:
     print("       ...bye!")     print("       ...bye!")
          
-if input("Yes or no? (y/n)") == 'y':+if input("Hi or bye? (h/b)") == 'h':
     say_hello     say_hello
 else: else:
Zeile 24: Zeile 28:
  
 ++++Lösung| ++++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. +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 (öffnend und schliessend) beinhalten, auch wenn nichts in den Klammern steht. ''say\_hello'' wird nicht als Aufruf einer Funktion erkannt, ''say\_hello()'' schon. 
 ++++ ++++
 \\ \\
Zeile 42: Zeile 46:
  
 ++++Lösung| ++++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:+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())'' ''print(drei\_wuerfel())''
 ++++ ++++
Zeile 55: Zeile 59:
     return random.randint(1,6)     return random.randint(1,6)
  
-def drei_wuerfel(zahl):+def drei_wuerfel():
     return wuerfel()     return wuerfel()
     return wuerfel()     return wuerfel()
Zeile 71: Zeile 75:
 Welche beiden Zahlen gibt folgender Code aus? Welche beiden Zahlen gibt folgender Code aus?
 <code python> <code python>
-import math 
 a = 1 a = 1
 b = 2 b = 2
Zeile 86: Zeile 89:
  
 ++++Lösung| ++++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:+Der Code gibt erst 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 Parameter 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:
   * Variablen, die //ausserhalb// der Definition einer Funktion definiert werden, sind //globale Variablen//. Sie sind global, also überall bekannt – auch //in// der Definition der Funktion.    * Variablen, die //ausserhalb// der Definition einer Funktion definiert werden, sind //globale Variablen//. Sie sind global, also überall bekannt – auch //in// der Definition der Funktion. 
   * Falls in der Definition der Funktion eine Variable definiert wird, die gleich heisst wie die globale Variable, handelt es sich dabei um zwei verschiedene Variablen!   * Falls in der Definition der Funktion eine Variable definiert wird, die gleich heisst wie die globale Variable, handelt es sich dabei um zwei verschiedene Variablen!
  
-**Merke:** Definiere Variablen, die du innerhalb einer Funktino verwendest, immmer innerhalb der Funktion, niemals ausserhalb. +**Merke:** Definiere Variablen, die du innerhalb einer Funktion verwendest, immer innerhalb der Funktion, nicht ausserhalb. 
  
 ++++ ++++
Zeile 98: Zeile 101:
 Die Aufgabenstellung geht so: //Schreibe eine Funktion, die eine zufällige Zahl zwischen 1 und 10 zurückgibt.// 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 dei Aufgabenstellung?+Wo liegt das Problem in folgendem Code mit Blick auf die Aufgabenstellung?
 <code python> <code python>
 import random import random
Zeile 109: Zeile 112:
  
 ++++Lösung| ++++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. +Die 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:** **Merke:**
  • gf_informatik/funktionen/problems.1677065397.txt.gz
  • Zuletzt geändert: 2023-02-22 11:29
  • von gra