K103: Verzweigungen

Mit Verzweigungen können zwei Anweisungsblöcke alternativ ausgeführt werden. Ein Block für den Fall, dass eine gewisse Bedingung erfüllt ist, und ein anderer Block, wenn diese nicht erfüllt ist. 

Inhaltsverzeichnis

Einordnung

Kursblog L8T3: Verzweigungen

Dieser Blog wird vom IAIP gratis zur Verfügung gestellt. Der Blog ist ein  Bestandteil des Kurses K103 «Programmieren mit Turtle Graphics» und gehört zur Lektion 8, Themenblock 3 (L8T3).

Der Kurs führt dich durch die einzelnen Blogs, enthält Zusatzmaterialien und Quizze zur Lernkontrolle. Der Kurs hat eine Kursgebühr von CHF 50.- Mit dem Einschreiben zum Kurs hilfst du mit, dass solche Blogs auch zukünftig noch gratis zur Verfügung gestellt werden können.

Rückblick

Im vorletzten Themenblog (siehe K103: bedingte Anweisungen) haben wir bedingte Anweisungen kennengelernt. Bedingte Anweisungen sind Befehle, welche dann ausgeführt werden, wenn eine gewisse Bedingung erfüllt ist. Im letzten Themenblog (siehe K103: Bedingungen und ihre Möglichkeiten) haben wir dann die zu überprüfende «Bedingung» genauer betrachtet. Wir haben dabei gesehen, wie man 2 Sachen (Objekte) mit  ==, !=, <, >, <=, >= vergleichen kann (ist der erste Wert gleich, ungleich, grösser, kleiner, etc. als der zweite Wert?). Ebenso, wie sich mehrere Bedingungen miteinander verknüpfen (kombinieren) lassen.

Schwerpunkte

In diesem Blogbeitrag widmen wir uns einer wichtigen Ergänzung: den Verzweigungen. Schwerpunkte sind:

  • allgemeine Syntax von Verzweigungen (if-else)
  • angepasstes Struktogramm, Darstellung im Flussdiagramm

Ergänzung

Der Blogbeitrag «Bedingte Anweisungen und Verzweigungen in Python» enthält neben der nachfolgenden Theorie weitere, darüber hinausgehende Informationen zum Thema bed. Anweisungen & Verzweigungen.

Verzweigungen mit if und else erstellen

Einführendes Beispiel

Über die if-Anweisung kann man eine Kommandofolge auszuführen, falls eine Bedingung erfüllt ist. Doch was passiert, wenn die Bedingung nicht erfüllt ist?

Nutzt man zusätzlich das Schlüsselwort else, so lässt sich eine Kommandofolge ausführen, wenn die Bedingung «wahr» ist, und eine andere, wenn sie «falsch» ist. Der Begriff «else» ist wiederum Englisch und bedeutet zu Deutsch etwa soviel wie «sonst» oder «anderenfalls».

Hierzu ein Anschauungsbeispiel:

from turtle import *

alter = numinput("Alter", "Bitte gib dein Alter ein: ")               

if alter >= 18:
    write("Du bis ein Erwachsener.")
    circle(100, 360, 5)
else:
    write("Du bist noch zu jung für unsere Figur!")

exitonclick()

Das Programm fragt unseren User nach seinem Alter. Die Eingabe wird in der Variable alter abgelegt. Ist er 18 Jahre oder älter, so erfolgt die Ausgabe «Du bist ein Erwachsener», zusammen mit einem Fünfeck. Ansonsten schreibt der Computer «Du bist noch zu jung für unsere Figur!».

Syntax von Verzweigungen

Eine Verzweigung (auch Auswahl oder Selektion genannt) besteht aus einer Bedingung und zwei Codeabschnitten. Wieder wird die Bedingung ausgewertet, und falls sie zutrifft, wird anschliessend der erste Codeabschnitt ausgeführt. Neu wird nun aber für den Fall, dass die Bedingung nicht zutrifft, der zweite Codeabschnitt ausgeführt. Die Verzweigung legt fest, welcher von zwei Programmteilen (Alternativen) in Abhängigkeit von einer Bedingung ausgeführt wird.  

Die Syntax einer Verzweigung in Python ist wie folgt:

 if Bedinung:
       Anweisung 1
       Anweisung 2
       Anweisung 3

else:
      Anweisung 4
      Anweisung 5


Besonders zu beachten ist:

Struktogramm und Flussdiagramm (ergänzende Informationen)

Flussdiagramm und Struktogramm bei Verzweigung

Manchmal ist es wie erwähnt hilfreich, die Funktionsweise bedingter Anweisungen oder eben auch von Verzweigungen ganz abstrakt anhand eines sog. Struktogramms oder eines Flussdiagramms darzustellen. Solche Struktogramme und Flussdiagramme haben einen  didaktischen Wert, insbesondere wenn es darum geht, die Funktionsweise von Kontrollstrukturen (bedingte Anweisungen, Verzweigungen, Schleifen) zu illustrieren.

Nachfolgend sind die Struktogramme (links) bzw. Flussdiagramme (rechts) bedingten Anweisungen im Vergleich zu einer Verzweigung dargestellt. Sie sind, wie zu erwarten ist, weitgehend identisch. Der einzige Unterschied besteht darin, dass es nun auch eine «ausgefüllte» Box für den Fall gibt, in welchem die Bedingung nicht erfüllt ist.

Zur Illustration ergänzen wir unser Programm «Wie geht es dir heute» um einen else.  Das Programm soll wiederum auf den Bildschirm «Das freut mich. Mir geht es auch gut» schreiben, falls der Benutzer «gut» eingegeben hat. Und andernfalls soll er neu «Ich verstehe das Wort nicht.» ausgeben.

from turtle import *

zustand = textinput("Zustand", "Wie geht es dir heute?")
penup()
hideturtle()

if zustand == "gut":
    write("Das freut mich. ", move=True)
    write("Mir geht es auch gut!")
else:
    write("Ich verstehe das Wort nicht.")
      
goto(0, -20)
write("Ende")

exitonclick()

Übersetzen wir das Programm, so ergeben sich folgende 2 Diagramme:

Übungsaufgaben

Nachfolgend findest Du ein paar Übungsaufgaben. 

Aufgabe 1: Sesam öffne dich IV

Geben ist unser Programm aus Aufgabe 1 des vorangehenden Themenblogs, welches den User zur Eingabe eines Passworts aufforderte. Entspricht die Eingabe der Zeichenfolge «Sesam öffne dich», so erfolgt wiederum die Ausgabe «Das Passwort ist korrekt». Gibt er etwas anderes ein, so soll die Ausgabe «Das Passwort ist falsch!» geschrieben werden. Neu wollen dies jedoch mit einer Verzweigung machen (anstelle eines zweiten Blocks mit passwort != «Sesam öffne dich».

Aufgabe 2: Figur nach Wunsch IV

Geben ist unser Programm «Figur nach Wunsch III» aus Aufgabe 2b des vorangehenden Themenblogs . 

Der Computer generiert eine Zufallszahl. Diese ist entweder 0 oder 1 (random.randint(0,1)). Falls die Zufallszahl 0 ist, so wird die Figur in roter Farbe gemalt (pencolor(«red»)). Ist die Zahl 1, so wird die Figur in blauer Farbe gemalt (pencolor(«blue»). Erstelle hierzu eine Verzweigung mit if und else.

 

Lösungen zu den Übungsaufgaben

Lösung zur Aufgabe 1: Sesam öffne dich IV

Nachfolgend findest du das Programmbeispiel:

from turtle import *

write("Bitte Passwort eingeben, um die geheime Figur zu sehen")
passwort = textinput("Geheime Figur", "Bitte Passwort eingeben")
clear()

if passwort == "Sesam öffne dich":
    circle(100)
else:
    write("Das Passwort ist falsch!")
  
exitonclick()

Lösung zur Aufgabe 2: Figur nach Wunsch II

Nachfolgend findest du das Programmbeispiel:

from turtle import *
import random

fig = textinput("Figur", "Was soll gezeichnet werden")
g = numinput("Grösse", "Welche Grösse")

if g < 10:
    g = 10

if g > 200:
    g = 200

if random.randint(0,1) == 0:
    pencolor("red")
else:
    pencolor("blue")

if fig == "Viereck" or fig == "Quadrat" or fig == "square":
    forward(g)
    right(90)
    forward(g)
    right(90)
    forward(g)
    home()

if fig == "Kreis" or fig == "circle":
    circle(g)

exitonclick()

Comments