Programmieren Teil 5 – Die for-Schleife

Vorausgesetzte Kompetenzen:

Lernziele:

Du kennst die while-Schleife – damit kannst du:

  1. Codeabschnitte wiederholt ausführen lassen – bis die Bedingung erfüllt ist oder endlos.
  2. Alle Elemente einer Liste oder eines Strings durchgehen.

Speziell für die zweite Anwendung gibt es die for-Schleife. Eine for-Schleife wird verwendet, um alle Elemente einer Sequenz (z.B. eine Liste, ein String usw.) durchzugehen. Man nennt dies auch über eine Sequenz iterieren.

For-Schleifen haben die Form:

for element in sequence:
    # Aktion, die für jedes Element ausgeführt wird

Um zum Beispiel alle Elemente einer Liste auszugeben, schreibt man einfach:

fruits = ["Apfel", "Banane", "Kirsche"]
for fruit in fruits:
    print(fruit)

Äquivalente while-Schleife

Ganz ähnlich kann man alle Zeichen eines Strings durchgehen:

word = "Python"
for letter in word:
    print(letter)

Der Output wird dann sein:

P
y
t
h
o
n

Äquivalente while-Schleife

Du hast soeben die direkte for-Schleife kennengelernt: Du greifst dabei direkt auf die Elemente der Liste oder des Strings zu. Die Variable, die vor in steht, enthält das jeweilige Element.

Bei der indirekten for-Schleife verwendest du die Funktion range und greifst über den Index auf das Element zu – wie bei der while-Schleife. Hier eine Übersicht:

Direkte for-Schleife
colors = ['red','green','blue']
for c in colors:
    print(c)

Output:

red
green
blue
Indirekte for-Schleife
colors = ['red','green','blue']
for i in range(len(colors)):
    print(colors[i])

Output:

red
green
blue

Die beiden Codes oben tun dasselbe. Aber der rechte ist etwas komplexer. So fragst du dich vieleicht: Wieso sollte ich die indirekte for-Schleife verwenden? Die Antwort findest du unten. Zuerst musst du die range-Funktion in der indirekten for-Schleife verstehen:

Die Range-Funktion

Mit der range-Funktion kannst du einfach eine Zahlenfolge erstellen. Sie hat 1 bis 3 Argumente: range(<start>,<stop>,<step>), wobei:

  • <start> der Startwert ist.
  • <stop> der Schlusswert ist (Achtung: nicht inklusive!)
  • <step> die Schrittweite zwischen zwei Zahlen ist.

Beispiel 1: Nur ein Argument:

for i in range(5):
    print(i) # Output: 0,1,2,3,4

Beispiel 2: Zwei Argumente:

for i in range(5,10):
    print(i) # Output: 5,6,7,8,9

Beispiel 3: Alle drei Argumente:

for i in range(3,11,2):
    print(i) # Output: 3,5,7,9.

Die range-Funktion kann auch rückwärts iterieren: range(10,3,-1) # [10,9,8,7,6,5,4]

Wann brauche ich die indirekte for-Schleife?

Wenn du nicht durch eine bestehende Sequenz (Liste/String) iterieren willst.

Zum Beispiel soll die Schleife nur dazu dienen, bestimmte Befehle mehrfach auszufürhen:

from gturtle import *
q = Turtle()
 
for i in range(4): # Zeichne Quadrat
    q.forward(50)
    q.right(90)

Wenn du nicht (nur) die Elemente, sondern (auch) die Positionen dieser Elemente benötigst.

Zum Beispiel willst du die Position eines gesuchten Elements ausgeben:

numbers = [7,42,13,70,42,37,42]
 
for i in range(len(numbers)):
    if numbers[i] == 42:
        print(f"Found 42 at index {i}")

Wenn du durch zwei oder mehr Sequenzen (Listen/Strings) gleichzeitig iterieren willst.

Zum Beispiel möchtest du die Elemente aus zwei Listen zusammenführen:

laender = ["Italien","Polen","Ungarn"]
staedte = ["Rom","Warschau","Budapest"]
 
for i in range(len(laender)):
    print(f"{laender[i]}: {staedte[i]}")

In folgenden Aufgaben benötigst du die direkte oder indirekte for-Schleife. Überlege jeweils zuerst, welche der beiden du benötigst. Schau bei Bedarf in der Theorie oben nach.

PA1 – Notenschnitt

Die Noten der letzten Franz-Prüfung einer Klasse sind: noten = [6, 3.0, 5.5, 6, 5.25, 3.5, 3, 4.75, 5, 3.5, 5.25, 5.5, 4.75, 6, 3.75, 4.25, 3.25, 4.5, 3.5, 5]

  1. Berechne den Klassendurchschnitt selbst mithilfe einer while-Schleife.
  2. Berechne den Klassendurchschnitt nun nochmals, aber mithilfe einer for-Schleife. Verwende in der Schleife eine sinnvoll benannte Variable.

PA2 – Maximum in Liste

Finde mithilfe einer for-Schleife in der folgenden Liste die grösste Zahl und gib diese aus: numbers = [3, 6, 2, 8, 4, 10, 1]. Der Code soll auch für alle anderen Listen mit Zahlen funktionieren.

Wende deinen Code nun auf diese längere Liste an: numbers = [14, 41, 136, 38, 120, 24, 8, 129, 115, 117, 122, 1, 147, 39, 24, 94, 61, 26, 2, 26, 4, 73, 44, 78, 35, 156, 85, 116, 121, 106, 49, 131, 145, 32, 118, 118, 148, 19, 156, 25, 11, 3, 32, 102, 129, 129, 7, 20, 92, 35] (Resultat: 156)

PA3 – Sechseck

Zeichne mithilfe einer for-Schleife ein Sechseck wie im Bild.

PA4 – Zehn Vielfache

Die Benutzer:in kann eine Zahl von eingben (verwende die Funktion input). Dein Programm gibt dann die ersten 10 Vielfachen dieser Zahl nacheinander aus. Beispiel: Wird 3 eingegeben, so gibt dein Programm nacheinander 3, 6, 9, 12, 15, 18, 21, 24, 27, 20 aus. Tipp: Verwende in deiner for-Schleife die range-Funktion mit drei Argumenten.

PA5 – So viele S

Schreibe einen Code, der mithilfe einer for-Schleife ermittelt, wie oft der Buchstabe 'S' in einem Wort (gespeichert in Variable word) vorkommt. Teste deinen Code für folgende Wörter:

  • word = „MISSISSIPPI“
  • word = „SAMICHLAUS“

PA6 – String in Liste wandeln

Wandle mithilfe einer for-Schleife einen String in eine Liste um, die die Buchstaben des Wortes beinhaltet. Aus word = "Python" soll dann also letters = ['P','y','t','h','o','n'] werden. Am Ende gibtst du die Liste aus.

Starte wie folgt:

word = "Python"
letters = [] # starte mit leerer Liste. Füge in for-Schleife nacheinander Buchstaben hinzu.
 
for ...

PA7 – Zahlenreihen

Schreibe Codes mit for-Schleifen, die folgende Zahlenreihen ausgeben:

  1. Zähle auf $100$: Gib alle ganzen Zahlen von $1$ bis und mit $100$ aus.
  2. Zähle von $10$ in $5$er-Schritten auf $100$, also $10,15,20,25,\ldots,95,100$.
  3. Zähle von $99$ in $3$er-Schritten bis auf $0 herunter.

PA8 – Wo sind die i?

  1. Schreibe Code, der mithilfe einer for-Schleife die Positionen aller Buchstaben 'i' (nur Kleinbuchstaben) in einem Wort ausgibt. Teste mit den Wörtern unten.
  2. Erweitere deinen Code, sodass auch die Positionen der Grossbuchstaben 'I' ausgegeben werden. Nutze logische Verknüpfungen oder das Schlüsselwort in.
wort = "Familienzeit-Initiative" # Positionen: 3, 5, 10, (13), 15, 17, 20
wort = "Igel-Illustration" # Positionen: (0), (5), 14

PA9 – Doppelte

Gegeben sei eine Liste mit Zahle numbers = [5,3,7,1,2]. Erstelle mithilfe einer for-Schleife eine neue Liste doubles, die von den Zahlen aus numbers jeweils das Doppelte beinhalten soll. doubles soll dann also [10,6,14,2,4] sein.

PA10 – Reissverschluss

Kombiniere die folgenden beiden String s1 = "IFRAI" und s2 = "nomtk" mithilfe einer for-Schleife zu einem einzigen String "InFoRmAtIk. Wie bei einem Reissverschluss soll abwechslungsweise ein Element von der einen, dann von der anderen Seite hinzukommen.

PA11 – Gerade aus Liste

Gegeben ist die Liste numbers = [24, 40, 16, 10, 7, 26, 15, 7, 25, 23, 25, 41, 38, 13, 21, 33, 10, 42, 13, 9, 20, 35, 5, 39, 15, 36, 35, 1, 27, 42]. Erstelle eine neue, leere Liste even = []. Füge dieser Liste in einer for-Schleife alle geraden Zahlen aus numbers hinzu.

PA12 – Ohne E

Der König im Buch 'Die wilde Sophie' hat panische Angst vor dem Buchstaben 'E'. Er verlangt von seinen Untertanen, dass sie in ihrer Sprach den Buchstaben 'E' einfach auslassen. Anstelle „ESEL ESSEN GERNE ERDBEEREN, BESONDERS BEI EINEM ELEGANTEN ELEFANTENESSEN.“ sollen sie sagen und schreiben: „SL SSN GRN RDBRN, BSONDRS BI INM LGANTN LFANTNSSN.“

Schreibe einen Code mit einer for-Schleife, der von einem gegebenen String eine neue Version ohne E's erstellt:

text = "ESEL ESSEN GERNE ERDBEEREN, BESONDERS BEI EINEM ELEGANTEN ELEFANTENESSEN."
text_ohne_E = "" 
 
for ...

Du hast die for-Schleife in beiden Varianten (direkt und indirekt) schon einige Male verwendet. In den folgenden Aufgaben kombinierst du for-Schleifem mit Funktionen.

PB1 – Sternenmuster

Schreibe eine Funktion sternchen(n), die ein Muster aus n Zeilen Sternchen ausgibt. Die erste Zeile hat jeweils ein Sternchen, die zweite eins mehr etc.

Beispiel: Beim Aufruf sternchen(5) soll nebenstehendes Muster entstehen.

*
**
***
****
*****

PB2 – Vokale zählen

Schreibe eine Funktion anzahl_vokale(text), die die Anzahl Vokale (nur die Kleinbuchstaben 'a', 'e', 'i', 'o', 'u') in text zählt und zurückgibt. Teste die Funktion.

Tipp:

PB3 – Anzahl r

Schreibe eine Funktion anzahl_r(liste), die alle Wörter in liste zählt, die ein 'r' enthalten und die Anzahl zurückgibt. Teste deine Funktion mit folgender Liste:

monate = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "December"]

PB4 – Positionen r

Schreibe eine Funktion positionen_r(liste), die die Positionen aller Wörter mit r ermittelt und diese Positionen ausgibt (die Funktion muss nichts zurückgeben, sie gibt schon was aus). Teste deine Funktion mit der Monats-Liste aus obiger Aufgabe.

Korrekte Ausgabe:

PB5 – Positionen r als Liste

Schreibe eine Funktion positionen_r(liste), die die Positionen aller Wörter mit r ermittelt, diese in eine Liste füllt und diese Liste zurückgibt (die Funktion muss nichts ausgeben, sie gibt ja was zurück). Teste deine Funktion mit der Monats-Liste aus obiger Aufgabe.

Korrekte Ausgabe:

PB6 – Anzahl x

Schreibe eine Funktion anzahl_x(liste, x), die die Positionen aller Wörter mit Buchstabe x ermittelt und die Anzahl zurückgibt.

Zum Beispiel soll der Aufruf anzahl_x(monate, 'u') (mit obiger Liste monate) die Zahl 5 zurückgeben.

BP7 – Summe aller Listenelemente

Schreibe eine Funktion liste_summieren(liste), die alle Zahlen in einer Liste aufsummiert und die Summe zurückgibt.

Teste mit folgenden Listen:

zahlen1 = [31, 98, 93, 74, 15, 83, 14, 99, 84, 32, 37, 86] # Summe = 746 
zahlen2 = [49, 24, -33, -4, -38, 40, 3, 23, -13, 39, 26, -2] # Summe = 114

BP8 – Rückwärts ausgeben

Schreibe eine Funktion rueckwaerts_ausgeben(text), die jedes Zeichen des Texts rückwärts in einer neuen Zeile ausgibt. Verwende eine indirekte for-Schleife.

BP9 – Punkte-Linie

Schreibe eine Funktion dot_line(n), die mithilfe einer for-Schleife n Punkte auf einer Linie zeichnet:

  • Die Grösse des ersten Punktes ist 10, die des nächsten 20, dann 30 etc.
  • Fahre jeweils zuerst vorwärts (um die Grösse des Punktes) und zeichne dann einen Punkt.
  • Der Aufruf dot_line(7) sollte nebenstehendes Muster zeichnen.

BP10 – Punkte-Kreis

Schreibe eine Funktion dot_arc(list), die mithilfe einer for-Schleife für jede Zahl in list einen Punkt in entsprechender Grösse auf einem Kreis zeichnet:

  • Verwende die Funktion rightArc(radius, winkel).
    • Setze radius auf 100.
    • Du kannst davon ausgehen, dass list 12 Elemente hat: Wie gross muss winkel sein, damit der Kreis am Ende geschlossen ist.
  • Der Aufruf dot_arc(dot_sizes) sollte nebenstehendes Muster ergeben.
diameters = [10, 20, 30, 15, 50, 40, 30, 15, 10, 20, 60, 20]

BP11 – Punkte-Kreis Plus

Erweitere deine Funktion dot_arc(list), sodass sie mit beliebig langen Listen1) immer einen ganzen Kreis zeichnet. Teste deine Funktion mit untenstehenden Listen. Es sollten nebenstehende Muster entstehen.

diameters1 = [10, 20, 30, 15, 50, 40]
diameters2 = [30, 60, 50, 20, 30, 20, 50, 40, 30]

BP12 – Punkte-Kreis Bunt

Erweitere deine Funktion um ein Argument für eine Farbliste: dot_arc(l_dia, l_col). Die Funktion zeichnet mit beliebig langen Listen2) einen ganzen Kreis in verschiedenen Farben:

  • Du kannst davon ausgehen, dass die beiden Listen (für die Punkte-Durchmesser und für die Farben) gleich lang sind.

Teste deine Funktion mit untenstehenden Listen. Es sollte nebenstehendes Muster entstehen.

diameters = [30, 40, 30, 40, 60, 40, 30, 50, 30]
colors = ["6495ED", "4169E1", "0000FF", 
          "1E90FF", "008B8B", "66CDAA", 
          "20B2AA", "006400", "2E8B57"]

Q1 – Fakultät

Schreibe eine Funktion falultaet(zahl), das mithilfe einer for-Schleife die Fakultät zu zahl berechnet und ausgibt. Beispiele:

  • Die Fakultät zur Zahl 1 ist 1 = 1
  • Die Fakultät zur Zahl 2 ist 1 * 2 = 2
  • Die Fakultät zur Zahl 3 ist 1 * 2 * 3 = 6

Q2 – Punkte-Kreis Pro

Siehe Aufgabe PB12. Erweitere die Funktion dot_arc(l_dia, l_col), sodass beide Listen beliebig lang sein können. Die Durchmeser-Liste ist massgebend, das heisst:

  • Wenn die Durchmesser-Liste leer ist, wird nur ein Kreis gezeichnet, ohne einen Punkt drauf.
  • Wenn die Farben-Liste leer ist, werden die Punkte schwarz gezeichnet.
  • Wenn die Farben-Liste kürzer ist als die Durchmesser-Liste, wird die Farben-Liste wiederholt: Nach der letzten Farbe in der Liste wird wieder die erste gewählt. Tipp: Modulo-Operator (%).
  • Wenn die Durchmesser-Liste kürzer ist als die Farben-Liste, werden die übrigen Farben ignoriert.

Achtung: Meist gibt es mehrere Lösungen. Nur weil deine Lösung anders ist als diejenige in den Musterlösungen unten, bedeutet dies nicht, dass deine nicht richtig/gut ist. Sende oder zeige im Zweifelsfall deine Lösung der Lehrperson.


1) , 2)
ausser leere Listen
  • gf_informatik/programmieren_v_gra.1753957359.txt.gz
  • Zuletzt geändert: 2025-07-31 10:22
  • von gra