Verzweigungen
Grundsätzlich wird ein Programm zeilenweise ausgeführt. Wir können aber die Programmausführung an einer Stelle selbst steuern, sodass ein Teil unseres Programms nur unter bestimmten Bedingungen ausgeführt wird. Dazu verwenden wir Verzweigungen. Bei einer Verzweigung überprüft das Programm, ob die angegebene Bedingung zutrifft oder nicht, und entscheidet so, bei welcher Zeile die Programmausführung weiterläuft.
Eine Verzweigung entspricht der bedingten Anweisung in einem Flussdiagramm.
---
title: "Hausaufgaben-Algorithmus"
---
flowchart TD
A{"<b>Hausaufgaben?</b>"} -- Ja --> B("Hausaufgaben erledigen")
A -- Nein --> n1["Bücher lesen, Freunde treffen, (Flixnet schauen) etc."]
B --> n2["Schlafen gehen"]
n3["START"] --> A
n2 --> n4["STOP"]
n1 --> n2
n1@{ shape: rounded}
n2@{ shape: rounded}
n3@{ shape: terminal}
n4@{ shape: terminal}
If-Verzweigung
Abstract
Eine Verzweigung steuert, wie ein Programm ausgeführt wird. Je nachdem, ob die dazugehörige Bedingung zutrifft, wird ein anderes „Stück“ vom Programm ausgeführt. In Python beginnt eine Verzweigung mit dem Schlüsselwort if, der Bedingung und einem Doppelpunkt.
Beispiel: Stimmberechtigung bestimmen
Bei Abstimmungen dürfen nur Stimmberechtigte Personen mitentscheiden. Wann ist jemand stimmberechtigt und wie könnte das überprüft werden mit einem Programm?
flowchart TD
A{"<b>Alter >= 18?</b>"} -- Ja --> n7["<b>Output:</b> Du darfst abstimmen!"]
A -- Nein --> n8["<b>Output:</b> Du bist nicht stimmberechtigt!"]
n3["START"] --> n5["<b>Input:</b> Alter eingeben"]
n7 --> n4["STOP"]
n8 --> n4
n5 --> A
n7@{ shape: lean-l}
n8@{ shape: lean-l}
n3@{ shape: terminal}
n5@{ shape: lean-l}
n4@{ shape: terminal}
Beim folgenden Programm wird anhand eines Vergleichsausdrucks entschieden, welche Zeilen ausgeführt werden.
# Tests (Groß-/Kleinschreibung wird nicht beachtet)(Ctrl+I)
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
(Esc)
Um zu markieren, welche Zeile nur dann ausgeführt werden sollen, falls die if-Bedingung zutrifft wird in der Python-Programmiersprache die horizontale Ausrichtung des Programmiercodes verwendet. Um eine Zeile vom Hauptprogramm zu unterscheiden wird sie eingerückt, d.h durch Drücken der Tab-Taste wird der Zeilenanfang etwas nach rechts verschoben, somit wird ein neuer Block markiert.
Block
Abstract
Eine Gruppe von zusammenhängende Zeilen welche die gleiche horizontale Ausrichtung haben nennen wir einen Block. Ein Block kann selber wiederum mehrere Blöcke enthalten, somit können komplexe verschachtelte Programme geschrieben werden. Vor einem neuen Block muss jedoch deklariert werden, was genau der neue Block bedeuten soll. Dazu werden bestimmte Schlüsselwörter verwendet sowie ein Doppelpunkt am Ende der Zeile vor dem neuen Für uns bis jetzt relevante Blöcke sind die if/else-Verzweigungen.
Bedingungen
In einer Verzweigung kann eine Bedingung definiert werden, welche bestimmt ob die Verzweigung genommen wird oder nicht. Dazu können sogenannte Vergleichsoperatoren verwendet werden. Wir definieren zwei Variablen mit den Werten 3 und 7.
A = 3
B = 7
| Operator | Bedeutung | Ergebnis |
|---|---|---|
| A < B | A ist kleiner als B | Wahr |
| A > B | A ist grösser als B | Falsch |
| A <= B | A ist kleiner oder gleich B | Wahr |
| A >= B | A ist grösser oder gleich B | Falsch |
| A == B | A ist gleich B | Falsch |
| A != B | A ist nicht gleich B | Wahr |
else-Verzweigung
Um ein Programmteil nur dann auszuführen, wenn eine Bedingung nicht zutrifft verwenden wir einen else-Block.
else-Verzweigung
Ändere die Zahlen im folgenden Programm und beobachte die Ausgabe.
# Tests (Groß-/Kleinschreibung wird nicht beachtet)(Ctrl+I)
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
(Esc)
Aufgaben
Gleichheit
Warning
Wir können nicht direkt Zahlen und Ziffern vergleichen. Da dies verschiedene Typen sind. Eine Dezimalzahl ist eine Zahl (Typ int) und Texte sind vom Typ str (Zeichenketten). Eine Zeichenkette besteht aus den ASCII-Zeichen!
Gibt bei der Linie mit >>> folgende Vergleiche ein:
123 == 123
123 == "123"
Lösung
Aus dem Vergleich 123 == 123 resultiert der Wert
True was Wahr bedeutet. Also sind die zwei Zahlen \(123\) und \(123\) gleich.
Aber beim Vergleich 123 == "123" erhalten wir den Wert False was Falsch bedeutet. Denn "123" ist nun eben nicht mehr die Dezimalzahl \(123\) sondern eine Zeichenkette mit den Ziffern "1", "2" und "3". Das eine ist eine Zahl, das andere drei Ziffern und somit nicht gleich!
Der Typ ist beim zweiten Beispiel nicht gleich.
Tresor
Question
Schreibe ein Programm welches den Benutzer nach einem vordefinierten Passwort fragt. Danach soll es überprüfen, ob das eingegebene Passwort korrekt ist. Wenn es korrekt ist, gib eine Meldung aus: “Der Tresor ist geöffnet” Wenn es falsch ist, gib eine Meldung aus: “Leider falsches Passwort”
Hinweis: Verwende als Passwort eine Zeichenkette (Text) und keine Zahl.
Erweiterung: 1. Erlaube höchstens drei Versuche
# Tests (Groß-/Kleinschreibung wird nicht beachtet)(Ctrl+I)
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
(Esc)
Lösung
# Tresor nur mit if/else
passwort = "abcde"
eingabe = input("Gib den Passwort ein:")
if eingabe == passwort:
print("Tresor ist geöffnet")
else:
print("Leider falsches Passwort")
passwort = "abcde"
eingabe = input("Gib den Passwort ein:")
if eingabe == passwort:
print("Tresor ist geöffnet")
else:
print("Leider falsches Passwort! Zwei Versuche übrig.")
eingabe = input("Gib nochmals Passwort ein (zweiter Versuch):")
if eingabe == passwort:
print("Tresor ist geöffnet")
else:
print("Leider falsches Passwort! Ein Versuche übrig.")
eingabe = input("Gib nochmals Passwort ein (letzter Versuch):")
if eingabe == passwort:
print("Tresor ist geöffnet")
else:
print("Leider falsches Passwort! Keine Versuche übrig!")
Einfaches Malprogramm
Question
- Frage mit Hilfe des
input()-Befehls, ob Quadrate oder Dreiecke besser sind. - Überprüfe die Eingabe und programmiere (zeichne) die gewünschte geometrische Form.
Erweiterung: Programmiere die Formen auch mit Hilfe von zusätzlichen Informationen:
- Frage auch nach der Grösse (Breite, Länge, ...)
- Frage nach einer Stiftfarbe. Die Stiftfarbe kannst du mit dem Befehl
setPenColor()ändern.zeichnet mit einem roten Stift. Ein paar Beispiele von Farben: yellow, gold, orange, red, maroon, violet, magenta, purple, navy, blue, skyblue, cyan, turquoise, lightgreen, green, darkgreen, chocolate, brown, black, gray, white. Du findest eine ausführliche Liste von Farben hiersetPenColor("red") - Füge eine weitere geometrische Form hinzu
# Tests (Groß-/Kleinschreibung wird nicht beachtet)(Ctrl+I)
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
(Esc)
Lösung
from gturtle import *
makeTurtle()
form = input("Was findest du besser? Quadrate oder Dreiecke?")
seitenlänge = 30
if form == "Quadrate":
forward(seitenlänge)
right(90)
forward(seitenlänge)
right(90)
forward(seitenlänge)
right(90)
forward(seitenlänge)
right(90)
if form == "Dreiecke":
right(30)
forward(seitenlänge)
right(120)
forward(seitenlänge)
right(120)
forward(seitenlänge)
right(120)
from gturtle import *
makeTurtle()
form = input("Was findest du besser? Quadrate oder Dreiecke?")
seitenlänge = int(input("Seitenlänge?"))
farbe = input("Stiftfarbe?")
setPenColor(farbe)
if form == "Quadrate":
forward(seitenlänge)
right(90)
forward(seitenlänge)
right(90)
forward(seitenlänge)
right(90)
forward(seitenlänge)
right(90)
if form == "Dreiecke":
right(30)
forward(seitenlänge)
right(120)
forward(seitenlänge)
right(120)
forward(seitenlänge)
right(120)
Wurzel ziehen?
Question
Wir beabsichtigen später ein Programm zu schreiben, welches die Quadratwurzeln von Zahlen berechnen kann (\(\sqrt{x}\)). Zuerst wollen wir aber überprüfen ob dies überhaupt geht, denn es ist gar nicht so einfach, von allen beliebigen Zahlen die Wurzel zu berechnen. Falls es nicht direkt möglich ist, versuchen wir gar nicht erst die Wurzel zu berechnen.
Für welche Zahlen können wir die Quadratwurzel berechnen?
Schreibe ein Programm welches eine "Fehlermeldung" herausgibt, wann immer die Quadratwurzel nicht direkt berechenbar ist. Die Wurzel selbst muss du nicht berechnen. Teste dein Programm mit verschiedenen Zahlen, z.B. 9 oder -4
Erweiterung:
1. Recherchiere und finde heraus wie die Wurzel berechnet werden kann. Dazu gibt es in Python eine "Mathematikbibliothek", darin gibt es viele nützliche mathematische Funktionen wie math.sqrt(), damit dies geht, muss zuerst die "Mathematikbibliothek" geladen werden mit import math
# Tests (Groß-/Kleinschreibung wird nicht beachtet)(Ctrl+I)
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
(Esc)
Lösung
# Wurzelrechner
zahl = int(input("Gib eine Zahl ein: "))
if zahl < 0:
print("Kann diese Wurzel nicht berechnen, da die Zahl negativ ist!")
else:
print("Für diese Zähl wäre es Möglich die Wurzel zu berechnen:")
print(zahl)
# Dadurch erhalten wir Mathematik-Befehle
import math
# Wurzelrechner
zahl = int(input("Gib eine Zahl ein: "))
if zahl < 0:
print("Kann diese Wurzel nicht berechnen, da die Zahl negativ ist!")
else:
resultat = math.sqrt(zahl)
print("Das Resultat ist:")
print(resultat)
# Tests(Groß-/Kleinschreibung wird nicht beachtet)(Ctrl+I)
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
(Esc)