Probleme 1...5
In jedem der folgenden Codes hat es jeweils einen Fehler bzw. ein Problem.
Finde das Problem. Du kannst den Code auch kopieren und in TigerJython testen, was passiert.
Beschreibe das Problem in eigenen Worten.
Behebe das Problem und teste, ob der Code läuft.
- Problem_01.py
input("Gib eine Zahl ein.")
if input >= 0:
print("Die Zahl ist positiv.")
else:
print("Die Zahl ist negativ.")
Lösung
Das Problem liegt in der ersten Zeile und in der darauffolgenden if-Bedingung: input()
ist eine Funktion, die einen Wert zurückgibt (Rückgabewert). Und zwar gibt sie denjenigen Wert zurück, den die Benutzer:in eingegeben hat. In der ersten Code-Zeile wird dieser Wert aber nirgends gespeichert – es wird blos die Funktion input()
aufgerufen. Korrekt wäre also:
zahl = input("Gib eine Zahl ein.")
In der folgenden if-Verzweigung muss die Bedingung dann so aussehen:
if zahl >= 0:
Alternativ könntest du auch die vollständige input()
-Funktion in der Bedingung der if-Verzweigung unterbringen:
if input("Gib eine Zahl ein.") >= 0:
Der Nachteil an dieser Methode: Der von der Benutzer:in eingegbene Wert ist nur hier in der Bedingung verfügbar: Weil er nicht in einer Variable gespeichert wird, könntest du weiter unten im Code nicht mehr auf den Wert zugreifen. Diese Methode eignet sich also nur dann, wenn du den von der Benutzer:in eingegbenen Wert nur ein einziges Mal vergleichen möchtest.
- Problem_02.py
eingabe = input("Gib eine Zahl ein.")
if eingabe >= 0:
print("Zahl ist positiv.")
elif eingabe == 0:
print("Zahl ist 0")
else:
print("Zahl ist negativ.")
Lösung
Das Problem ensteht hier, wenn die Benutzer:in die Zahl 0 eingibt: Dann gibt das Programm nicht „Zahl ist 0“ aus, sondern „Zahl ist positiv“. Für die Zahl 0 ist sowohl die erste Bedingung eingabe ⇐ 0
als auch die zweite Bedingung eingabe == 0
wahr. Wenn bei einer if-elif-Verzweigung eine Bedingung wahr ist, werden alle nachfolgenden Bedingungen übersprungen. Hier heisst das: Wenn eingabe ⇐ 0 wahr ist, dann wird gar nicht mehr gefragt, ob auch eingabe == 0
wahr ist. Das Problem lässt sich leicht beheben, die erste Bedingung muss für die Zahl 0 falsch sein:
- Problem_02.py
...
if eingabe > 0:
print("Zahl ist positiv.")
...
- Problem_03.py
from gturtle import *
Options.setPlaygroundSize(400, 400)
Michelangelo = Turtle()
figur = input("Welche Figur: Quadrat oder Kreis?")
if figur == "Kreis":
Michelangelo.rightArc(50,360)
if figur == "Quadrat":
repeat 4:
Michelangelo.forward(50)
Michelangelo.right(90)
else:
print("Gib entweder 'Quadrat' oder 'Kreis' ein")
Lösung
Das Problem ensteht hier, wenn die Benutzer:in „Kreis“ eingibt: Dann zeichnet das Programm zwar einen Kreis, aber es gibt auch die Fehlermeldung („Gib entweder 'Figur' oder 'Kreis' ein“) aus. Das liegt daran, dass hier mehrere if-Bedingungen verwendet wurden – und nicht eine if-elif-Verbindung. Wenn du nun „Kreis“ eingibst, ist die erste if-Bedingung zwar wahr, die zweite aber falsch: Also wird die Zeile unter else:
ausgeführt. Die Lösung ist einfach: du machst aus dem zweiten if
ein elif
, so hast du aus zwei aufeinandernfolgenden Verzweigungen eine mit drei Ästen gemacht. Wie sehen die beide Varianten als Struktogramme aus? Zeichne es auf!
if figur == "Kreis":
Michelangelo.rightArc(50,360)
elif figur == "Quadrat":
repeat 4:
Michelangelo.forward(50)
Michelangelo.right(90)
else:
print("Gib entweder 'Figur' oder 'Kreis' ein")
- Problem_04.py
from gturtle import *
Options.setPlaygroundSize(400, 400)
Michelangelo = Turtle()
figur = input("Welche Figur: Quadrat oder Kreis?")
if figur == Kreis:
Michelangelo.rightArc(50,360)
elif figur == Quadrat:
repeat 4:
Michelangelo.forward(50)
Michelangelo.right(90)
else:
print("Fehler!")
- Problem_05.py
# Wo liegt das Problem?
from gturtle import *
Options.setPlaygroundSize(400, 400)
Michelangelo = Turtle()
figur = input("Welche Figur: Quadrat oder Kreis?")
Kreis = Michelangelo.rightArc(50,360)
if figur == "Kreis":
Kreis
else:
print("Fehler!")