Du kennst die while-Schleife – damit kannst du:
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)
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
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:
colors = ['red','green','blue'] for c in colors: print(c)
Output:
red green blue
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:
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]
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.
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]
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)
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.
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“
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 ...
Schreibe Codes mit for-Schleifen, die folgende Zahlenreihen ausgeben:
in
.wort = "Familienzeit-Initiative" # Positionen: 3, 5, 10, (13), 15, 17, 20 wort = "Igel-Illustration" # Positionen: (0), (5), 14
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.
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.
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.
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.
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.
* ** *** **** *****
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.
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"]
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.
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.
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.
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
Schreibe eine Funktion rueckwaerts_ausgeben(text)
, die jedes Zeichen des Texts rückwärts in einer neuen Zeile ausgibt. Verwende eine indirekte for-Schleife.
Schreibe eine Funktion dot_line(n)
, die mithilfe einer for-Schleife n
Punkte auf einer Linie zeichnet:
dot_line(7)
sollte nebenstehendes Muster zeichnen.
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:
rightArc(radius, winkel)
.radius
auf 100.list
12 Elemente hat: Wie gross muss winkel
sein, damit der Kreis am Ende geschlossen ist.dot_arc(dot_sizes)
sollte nebenstehendes Muster ergeben.diameters = [10, 20, 30, 15, 50, 40, 30, 15, 10, 20, 60, 20]
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]
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:
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"]
Schreibe eine Funktion falultaet(zahl)
, das mithilfe einer for-Schleife die Fakultät zu zahl
berechnet und ausgibt.
Beispiele:
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:
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.