if
-else
-Selektion? Oft muss man sich im Leben entscheiden (Welcher Weg bei Wanderung, welche Schule, welcher Beruf).
Motivation durch Pseudo-Code zwei Flussdiagramme:
if
-Selektion.if
-else
-Selektion.Gemeinsam mit kurzen Einzelarbeitsphasen, ca. 3 + 3 + 5 + 4 Minuten (mit Zwischenbesprechung), Teilaufgaben bitte genau lesen!
Das folgende Programm illustriert die zwei häufigsten Verwendungen der if-(-else)
-Selektion.
“Das glaube ich dir nicht.”
ausgegeben wird, aber nicht mehr “Du bist kein Baby.”
. Vielleicht ist es hilfreich, die Info-Boxen unten zu lesen.alter = input("Gib dein Alter ein!") # Erste Verwendung: if alter < 0 or alter >= 130 print("Das glaube ich dir nicht.") # Zweite Verwendung: if alter == 0: print("Du bist ein Baby.") else print("Du bist kein Baby.")
if
-Selektion: Der eingerückte Code-Block (der auch aus mehreren Zeilen bestehen kann) nach der if
-Zeile wird ausgeführt, falls die Bedingung zwischen if
und :
wahr ist (wenn man die aktuellen Werte der Variablen einsetzt). Wer mag, kann den Doppelpunkt :
als then
lesen: “Wenn … dann …”
if
-else
-Selektion: Der eingerückte Code-Block nach der if
-Zeile wird ausgeführt, falls die angegebene Bedingung wahr ist, sonst wird der eingerückte Code-Block nach der Zeile else:
ausgeführt. Diese gesamte Struktur bedeutet also: “Wenn … dann … sonst …”
Einrückungen und Doppelpunkte sind wichtig! Wie bei repeat
sind sie eine beliebte Fehlerquelle!
Im obigen Programm tauchen einige Vergleiche von Zahlen auf. Hier die wichtigsten Vergleichsmöglichkeiten:
==
für mathematisches “gleich” $=$. Achtung: Das einfache Gleichheitszeichen =
wird für die Zuweisung bei Variablen verwendet.!=
für “ungleich” $\not=$. <
für “echt kleiner” $>$. >
für “echt grösser” $>$.<=
für “kleiner-gleich” $\leq$ (also kleiner oder gleich).>=
für “grösser-gleich” $\geq$. Einzelarbeit, ca. 15 Minuten.
Mit from random import *
am Programmanfang liefert der Befehl random()
Zufallszahlen zwischen 0 und 1 (alle Zahlen kommen “gleich oft” vor). Teste dies mit dem folgenden Code.
from random import * repeat 10: z = random() print(z)
Erweitere den folgenden Programmcode so, dass die Schildkröte zufällig durch die Gegend läuft: Sie soll n
Mal um s = 10
Pixel nach vorne laufen und nach jeder Vorwärtsbewegung entweder um $90^\circ$ nach links oder nach rechts abbiegen, jeweils mit Wahrscheinlichkeit $50 \%$.
from gturtle import * from random import * makeTurtle() speed(-1) # Das ist die schnellstmögliche Geschwindigkeit (abgesehen von hideTurtle()) s = 10 n = input("Wie oft soll sich die Schildkröte bewegen?") # Hier deinen Code ergänzen!
Hinweise:
repeat
-Schleife und eine if
-else
-Selektion.“Gemeinsam im Gespräch”, ca. 5 Minuten.
getKeyWait()
und input(“…”)
?elif
= else
+ if
; rechtes ist kurze Version des linken).if
?from gturtle import * # Die ersten beiden Zeilen dienen nur dazu, dass der Befehl getKeyWait() bekannt ist. makeTurtle() # Ohne sie funktioniert das Programm leider nicht. taste = getKeyWait() print(taste) if taste == "a": print("a wie Anna") else: if taste == "b": print("b wie Berta") else: if taste == "c": print("c wie Caesar") else: if taste == "d": print("d wie Daniel") else: if taste == "e": print("E wie Emil") else: print("Du hast keine der Tasten a, b, c, d, e gedrückt.") dispose() # Schliesst das Turtle-Fenster.
from gturtle import * makeTurtle() taste = getKeyWait() print(taste) if taste == "a": print("a wie Anna") elif taste == "b": print("b wie Berta") elif taste == "c": print("c wie Caesar") elif taste == "d": print("d wie Daniel") elif taste == "e": print("E wie Emil") else: print("Du hast keine der Tasten a, b, c, d, e gedrückt.") dispose()
Einzelarbeit, ca. 15 Minuten.
Das folgende Programm nimmt so lange ein Einzelzeichen entgegen, bis die Taste “e” (für Exit oder Escape) gedrückt wird. Probiere es aus! Gerne auch im Debugging-Modus.
from gturtle import * makeTurtle("black") taste = " " # oder irgendetwas anderes ungleich "e" # Die folgende sogenannte "while"-Schleife funktioniert # ähnlich wie eine repeat-Schleife: Der # eingerückte Code-Block wird solange wiederholt # ausgeführt, wie die angegebene Bedingung gilt. # englisch WHILE = deutsch SOLANGE while taste != "e": taste = getKeyWait() # Hier ist dein Code zu ergänzen! dispose()
Erweitere diesen Code zu einem Zeichenprogramm mit den Tasten i, j, k, l als “Pfeil”-Tasten!
Die Schildkröte soll
i
10 Pixel vorwärts laufen;k
10 Pixel rückwärts laufen;j
sich um $60^\circ$ nach links drehen;l
sich um $60^\circ$ nach rechts drehen.e
bricht das Programm ab.print(“Taste ohne Funktion.”)
ausgeführt werden.
Die erwünschte Lösung verwendet die obige “elegante” if
-elif
-…-elif
-else
-Variante der Selektion.
Einzelarbeit, ca. 15 Minuten
Beachte die Hinweise unten und schreibe ein Programm, das dem Benutzer die folgenden oder mindestens drei Quizfragen deiner Wahl stellt:
Der Benutzer soll jeweils erfahren, ob die Antwort gestimmt hat; wenn nicht, soll die richtige Antwort genannt werden.
Am Ende soll als Auswertung die Anzahl richtiger Antworten ausgegeben werden.
Hinweise:
s = input(“Hier steht die Frage”)
- dann musst du nicht unterscheiden, ob die Eingabe eine Zahl, Kommazahl oder Text ist.s
mit einer Zeichenkette geht mit s == “St. Gallen”
bzw. mit s != “St. Gallen”
. Statt Text-Variable sagt man auch “string”. Du hast die Wahl:
Abgabe bis spätestens Sonntagabend 23:59 Uhr vor der nächsten Doppellektion über den folgenden Link:
Rasenmäher-Schildkröte
Lass die Schildkröte so lange geradeaus laufen, bis sie nahe am Rand des Fensters ist. Dann soll sie etwas zurück gehen und sich etwas drehen (dies können feste oder zufällige Werte sein); danach geht es wieder mit der Vorwärtsbewegung weiter etc.
Hinweis:
getX()
und getY()
bekommst du die $x$- und $y$-Koordinate der Schlidkröte. Die Koordinaten des Fensters gehen von -400 bis 400 in $x$-Richtung und $-300$ bis $300$ in $y$-Richtung.while True:
oder repeat:
kannst du den nachfolgenden eingerückten Code-Block unendlich oft ausführen lassen.Schildkröte als Billard-Ball
Wähle am Anfang einen zufälligen Startwinkel. Lass die Schildkröte geradeaus in diese Richtung laufen, bis sie auf den Rand des Fensters trifft. Dort soll sie wie ein Lichtstrahl bzw. wie eine idealisierte Billardkugel reflektiert werden.
Schaffst du es, dass die Billard-Schildkröte bei jeder Reflektion die Zeichenfarbe ändert? Die Farbe kann zufällig oder in einer festgelegten Reihenfolge - etwa rot-grün-blau - geändert werden.
Hinweise: Neben den Hinweisen bei der vorigen Aufgabe verwende:
heading()
bekommst du die aktuelle Richtung der Schildkröte in Grad; 0
bedeutet nach oben, 90
nach rechts etc. Es sind aber auch Werte über 360 wie 400
oder unter Null wie -35
möglich. setHeading(…)
kannst du die Schildkröte in eine Richtung drehen.
Bitte einfach am Anfang des Programms oder der eingereichten Datei die Frage aufschreiben (mit oder ohne Hashtag #
als Kommentareinleitungszeichen am Zeilenanfang).