Zum Inhalt

Schleifen

Wenn wir einen oder mehrere Befehle mehrmals nacheinander ausführen wol- len, können wir eine Schleife verwenden. Es gibt mehrere verschiedene Schleifen- Arten, wir beginnen einmal mit der for-Schleife.

for-Zählschleife

Abstract

Eine Schleife führt ihren Inhalt ("Block") mehrmals nacheinander aus. Die zu wiederholenden Zeilen, also die nach dem Doppelpunkt, müssen wie bei der Verzweigung eingerückt werden. Die for-Schleife ist für uns ersteinmal eine Zählschleife, d.h. damit kann ein Block (=Inhalt der Schleife) eine bestimmte Anzahl mal wiederholt werden. Die Syntax dazu ist:

for i in range(ANZAHL):
    # Schleifeninhalt
wobei ANZAHL entweder eine Zahl oder eine Variable mit einem Zahlenwert sein muss.

Im folgenden Programm wird der Schleifeninhalt insgesamt vier mal wiederholt.

Auftrag

Ändere einmal die Anzahl wiederholungen in dem "Schleifenbefehl" und probiere das Programm aus. Achtung: Nimm nicht eine allzu grosse Zahl...

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

Mit Schleifen zeichnen

Schleifen sind überall dort nützlich wo wir einige Schritte merhmals ausführen wollen. Z.B bei Zeichnen von regelmässigen geometrischen Figuren wie dem Quadrat. Anstatt alle vier Seiten einzeln zu programmieren, können wir nun einfach vier mal eine Seite + Drehung programmieren wie im nachfolgenden Programm gezeigt wird.

Beispiel: Quadrat mit Schleife

Es wird hier gezeichnet...

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

Beispiel: 6-Punkte mit Schleife

In diesem Besipiel wird ein neuer Befehl verwendet: dot(radius), welcher einen Punkt mit einem gewissen Radius zeichnet.

Es wird hier gezeichnet...

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

Aufgaben

Einige Figuren

Question

Verwende jeweils eine for-Schleife um die folgenden Figuren zu zeichnen.

Hinweis: Figur 4 ist nicht so einfach, versuche zuerst die Winkel zu skizzieren und zu berechnen.

Es wird hier gezeichnet...

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

Lösung
from gturtle import *
makeTurtle()
pencolor("blue")
fillcolor("cyan")

for i in range(6):
    forward(100)
    left(60)
from gturtle import *
makeTurtle()
pencolor("blue")
fillcolor("cyan")

for i in range(3):
    forward(100)
    right(120)
from gturtle import *
makeTurtle()
pencolor("blue")
fillcolor("cyan")

for i in range(5):
    forward(100)
    left(72)
from gturtle import *
makeTurtle()
pencolor("blue")
fillcolor("cyan")

for i in range(5):
    forward(100)
    left( (2*360)/5)

Perlenkette

Question

Verwende eine for-Schleife, um eine Perlenkette zu zeichnen. Die Anzahl Perlen kannst du beliebig wählen.

Es wird hier gezeichnet...

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

Lösung
# Perlen mit For-Schleife
from gturtle import *
makeTurtle()
pencolor("blue") # ändere die Stiftfarbe zu Blau
fillcolor("cyan") # ändere die Turtlefarbe zu Cyan

# Hier beginnt dein Programm

for i in range(24):
    dot(10)
    right(360 / 24)
    forward(20)

Leiter

Question

Zeichne folgende Figur mit zwei verschachtelten for-Anweisungen. Im inneren for-Block wird ein Quadrat gezeichnet.

Es wird hier gezeichnet...

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

Lösung
# Leiter mit verschachtelten For-Schleifen

from gturtle import *
makeTurtle()
pencolor("blue") # ändere die Stiftfarbe zu Blau
fillcolor("cyan") # ändere die Turtlefarbe zu Cyan

right(90)
for i in range(7):
    for j in range(4):
        forward(30)
        left(90)
    forward(30)

Mit Schleifen rechnen

Question

Wenn ein bestimmtes Problem aus mehreren sich wiederholenden Teilproblemen besteht, dann kann es gut mit Schleifen gelöst werden. Nehmen wir als Beispiel die Multiplikation. Die Multiplikation besteht aus der wiederholten Addition: z.B. \(3*4 = 4+4+4\)

Schreibe ein Programm welches die folgende Multiplikation berechnet: \(6*5\) Verwende dazu eine Schleife die \(6\) mal die \(5\) addiert.

Wichtig: Du darfst die Multiplikation-Operation selbst nicht verwenden! (kein \(*\))

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

Erweiterung: Zählen mit der for-Zählschleife

Bis jetzt haben wir die for-Schleife zur Wiederholung von Teilprogrammen verwendet. Ihren Namen erhält diese Schleife aber durch eine zusätzliche Tätigkeit: dem Zählen... Das i in

for i in range(ANZAHL):
    # Schleifeninhalt
ist nämlich eine Variable welche ANZAHL-mal hochzählt. Wir nennen diese speziellen Variablen einer for-Schleife auch Zählvariablen. Meistens verwenden wir für die Zählvariable den Buchstaben i, wenn wir mehrere Schleifen ineinander verschachteln nutzen wir auch noch j oder sogar k.

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

Warning

In der Informatik beginnen wir beim zählen meistens bei \(0\)

Eine Schleife mit range(5) zählt somit von \(0\) bis \(4\) und nicht bis \(5\)!

Aufgaben 2

Summen

Question

Schreibe ein Programm welches die Zahlen von 0 bis 10 addiert. Verwende eine Schleife!

D.h. \(0+1+2+..+9+10=?\)

Erweiterung: 1. Verallgemeinere dein Programm um die Summe von \(1\) bis \(n\) zu berechnen.

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

Zählvarianten

Die Art wie gezählt wird kann auf zwei zusätzliche Arten angepasst werden:

  1. anderer Start
  2. anderer Zählschritt

Auftrag

Finde heraus wie diese Schleife zählt:

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

Auftrag

Finde bessere Namen für die Parameter x,y,z im range()-Befehl. Welche Namen beschreibt sie besser?

for i in range(x, y, z):
    # Schleifeninhalt
    print(i)

Zählschleife für Figuren

Question

Versuche die folgenden Figuren zu zeichnen

Es wird hier gezeichnet...

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

Olympische Dreiecke

Question

Zeichne die folgende Figur. Es sind fünf Dreiecke welche sich nicht berühren. Verwende dazu Schleifen! Mit den Befehlen penup() und pendown() kannst du steuern ob gezeichnet wird.

Es wird hier gezeichnet...

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.