Programmieren II: Weiterführende Programmierkonzepte
1. Listen
1.1 Elemente auslesen und Listen manipulieren
Eine Liste ist eine Variable, in der man mehrere Werte speichern kann, z.B.:
faves = ['Pizza',42,'Muzak']
Eine Liste besteht aus Elementen, wobei jedes Element an einer bestimmten Position / Index steht. Achtung: Man beginnt Positionen bei 0 zu zählen! Im Beispiel oben ist also 'Pizza' das Element an Position 0, 42 das Element mit Index 1 und 'Muzak' das Element an Position 2. Die Liste besteht aus 3 Elementen, wir sagen, dass sie Länge 3 hat.
Die wichtigsten Befehle für Listen sind in der Tabelle unten aufgeführt. Für die Beispiele starten wir mit der Liste faves = ['Pizza',42,'Muzak']
. In den beiden rechten Spalten wird angegeben, welchen Wert das Beispiel annimmt resp. wie die Liste nach der Bearbeitung aussieht. Diese beziehen sich immer auf das Resultat der vorhergehenden Zeile.
Erklärung | Code | Beispiel | Wert | Liste danach |
---|---|---|---|---|
Länge der Liste / Anzahl Elemente ermitteln | len(liste) | len(faves) | 3 | Liste unverändert |
Element an Position ermitteln | liste[index] | faves[2] | 'Muzak' | Liste unverändert |
Element an Position verändern | liste[index] = new_element | faves[2] = 'Music' | ['Pizza',42,'Music'] |
|
Element an Position entfernen | pop() | faves.pop(1) | ['Pizza','Music'] |
|
Element hinten anfügen (engl. ‘append’) | append() | faves.append('Football’) | ['Pizza','Music','Football'] |
|
Element an bestimmter Position einfügen | insert() | faves.insert(2,'Pasta') | ['Pizza','Music','Pasta','Football'] |
Aufgaben A
Löse alle Aufgaben in dieser Serie auf Papier. In jeder Aufgabe starten wir mit einer Liste, die vorgegeben wird. Diese Liste muss nicht abgeschrieben werden.
Aufgabe 1
Notiere neben jedem print-Befehl dessen Ausgabe.
buchstaben = ['c','g','a','z','w'] print(buchstaben) # 1. buchstaben.pop(3) print(buchstaben) # 2. print(buchstaben[0]) # 3. buchstaben.append('q') print(buchstaben) # 4. buchstaben.insert(4,'e') print(buchstaben) # 5. buchstaben[1] = 'k' print(buchstaben) # 6. print(len(buchstaben)) # 7.
Aufgabe 2
Notiere neben jedem print-Befehl dessen Ausgabe.
cities = ["Bern", "Basel", "Zurich", "Genf", "Lausanne"] print(len(cities)) # 1. print(cities[3]) # 2. cities.append("Winti") cities.pop(1) cities.insert(2,"Biel") print(cities) # 3.
Aufgabe 3
Starte mit der folgenden Liste:
fruits = ["Spaghetti", "Apfel", "Banane", "Schockolade", "Orane", "Birne"]
Notiere nun die Befehle, welche folgende Punkte umsetzen:
- Entferne alle Elemente, die (leider) nicht in diese Liste gehören.
- Füge ganz hinten eine „Mango“ an.
- Füge zwischen „Apfel“ und „Banane“ eine Kiwi ein.
- Ooops, bei der „Orange“ hat sich ein Fehler eingeschlichen. Korrigiere diesen, in dem du das Wort an Wort „Orane“ durch „Orange“ ersetzt.
- Füge ganz am Anfang eine „Blaubeere“ ein.
- Befehl, welcher die Anzahl Früchte, die in der finalen Liste stehen, ermittelt.
- Notiere zum Schluss die Liste so, wie sie am Schluss aussieht.
Aufgabe 4
Starte mit folgender Liste:
days = ['Donnerstag', 'Freitag', 'Montag', 'Mittwoch', 'Dienstag', 'Sonntag', 'Samstag']
Das Ziel ist, die Wochentage in die korrekte Reihenfolge zu bringen (beginnend am 'Montag').
Verwende dazu die bisher gelernten Befehle append(), insert(), pop()
, wobei jeder dieser Befehlemindestens einmal (sinnvoll) verwendet werden muss. Achtung: Es ist verboten, selbst die Wochentage zu schreiben. Möchte man z.B. den 'Montag' vorne einfügen, muss man das Element mit Index 2 ('Montag') aus der Liste auslesen und ganz vorne einfügen.
1.2 Listen iterieren
Aufgaben B
Aufgabe 1
Betrachte die Liste alphabet = ["B","C","X","D","Z","F","G","I","J"]
. Korrigiere die Liste, indem du:
- am Anfang ein „A“ einfügst
- das „X“ entfernst
- dem Element mit Wert „Z“ den korrekten Wert „E“ zuweist
- am richtigen Ort ein „H“ einfügst
- am Ende ein „K“ anhängst
Aufgabe 2
Die folgende Liste soll einige europäische Hauptstädte beinhalten:
capitals = ["Berlin","Paris","Wien","Romanshorn","Ammsterdam","Konstanz","Prag"]
Korrigiere die Liste mithilfe der bisher gelernten Befehle:
- Ersetze „Romanshorn“ direkt durch die Schweizer Hauptstadt.
- Entferne die deutsche Stadt, die nichts in der Liste verloren hat.
- Füge hinten die Hauptstadt von Norwegen ein.
- Füge zwischen „Berlin“ und „Paris“ noch „Rom“ ein.
- Korrigiere den Schreibfehler in der holländischen Hauptstadt.
Aufgabe 3
Betrachte die Liste:
likeable_football_clubs = ["BVB", "Liverpool", "St. Gallen", "Bayern München", "Freiburg", "Breitenrain"]
- Gehe mit einer Schleife der Reihe nach durch alle Elemente der Liste durch und gebe sie aus.
- Die Bayern haben nichts in dieser Liste verloren. Bitte entferne sie, danke! Füge weiter deinen Lieblingsklub hinzu.
Aufgabe 4
In der folgenden Liste sind alle Monate gespeichert: months = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"]
.
- Gib einen nach dem anderen aus. Der Output soll also sein:
Januar Februar März April Mai Juni Juli August September Oktober November Dezember
- Gleich wie 1., jeder zweite Monat soll aber ausgelassen werden. Output:
Januar März Mai Juli September November
Aufgabe 5
Gib von allen Zahlen, die in der Liste primes = [2,3,5,7,11,13,17,19]
gespeichert sind, die jeweiligen Quadratzahlen aus. Ausgabe:
4 9 25 49 121 169 289 361
Aufgabe 6
Erstelle eine Liste, welche alle geraden Zahlen von $2$ bis und mit $100$ enthält. Starte mit einer leeren Liste, even = []
. Erzeuge dann in einer while-Schleife alle geraden Zahlen und füge sie dieser Liste hinzu. Printe am Schluss die Liste, um sie zu überprüfen: print(even)
.
Aufgabe 7
Monika hat insgesamt $5$ verschiedene Konten. In der Liste hat sie die Beträge notiert, die sie auf den jeweiligen Konten hat:
money = [503,27,1366,242,961]
Wie viel Geld hat Monika? Berechne ihr Vermögen, indem du die einzelnen Beträge aufsummierst. Führe das Aufsummieren selbst in einer while-Schleife durch und verwende keine vordefinierte Funktion, die dies für dich erledigt. Monika überlegt sich, noch weitere Konten zu eröffnen, von denen sie die Beträge dann einfach der Liste anfügen würde. Dein Code soll dann nach wie vor funktionieren.
Aufgabe 8
Speichere in einer Liste einige Noten, z.B. grades = [5.5,4.75,6,3.5,5,5.5]
. Schreibe nun einen eigenen Code, der Notendurchschnitt berechnet, verwende also keine vordefinierte Funktion. Der Code soll auch funktionieren, wenn Noten entfernt oder hinzugefügt werden.
Zusatzaufgabe: Gib die note korrekt auf halbe Noten gerundet aus. Schreibe einen eigenen Code für entsprechende Berechnung.
Aufgabe 9
Gegeben seien zwei gleich lange Listen. Der Code soll nun eine neue Liste erstellen, welche die beiden ursprünglichen wie folgt zusammenführt (merged):
list_1 = ['R','M','N','H','R']
und list_2 = ['o','a','s','o','n']
werden zu ['R', 'o', 'M', 'a', 'N', 's', 'H', 'o', 'R', 'n']
Aufgabe 10
Gegeben sei eine beliebige Liste numbers
, welche ausschliesslich ganze Zahlen enthalten soll. Das Ziel ist nun, eine Liste zu erhalten, die die gleichen Werte in der gleichen Reihenfolge beinhaltet, mit Ausnahme aller Elemente mit Wert 7.
Beispiel: Für die Liste numbers = [7,1,7,7,2,3,7,4,5,7,6,7,7,7,8,9,7,10]
soll das Resultat sein [1, 2, 3, 4, 5, 6, 8, 9, 10]
sein.
Wähle eine der beiden Optionen:
- Einfacher: Speichere die erwünschten Zahlen in einer neuen Liste. Starte dazu mit einer leeren Liste, z.B.
numbers_wo_7 = []
und füge dann die erwünschten Zahlen eine nach der anderen hinzu. - Anspruchsvoller: Erstelle keine weitere Liste sondern entferne diejenigen Elemente, die nicht in der Liste bleiben sollen.
Aufgabe 11
Gegeben sei eine Liste mit Strings, z.B. words = ["Elefant","Affe","Erdbeere","Esel","Schule","Tiger","Esstisch","Computer"]
. Ziel ist, eine Liste zu erhalten, welche die gleichen Strings in der gleichen Reihenfolge beinhaltet, mit Ausnahme derjenigen Strings, die mit „E“ beginne.
Man hat hier wieder die beiden Optionen wie in einer Aufgabe vorher:
- Einfacher: Mit neuer Liste
- Anspruchsvoller: Ohne neue Liste, Lösche entsprechende Strings aus der Liste heraus.
Tipp: Falls s
ein String ist, kann man mit s[0]
auf den vordersten Buchstaben zugreifen.
Fertig mit Aufgaben?
- Einige Aufgaben haben anspruchsvollere Optionen, stelle sicher, dass du diese gelöst hast.
Lösungen
2. For-Schleifen
Eine for-Schleife wird verwendet, um alle Elemente einer Sequenz (wie eine Liste, 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
Aufgaben A
Aufgabe 1
Die Noten der letzten Franz-Prüfung einer Klasse sind:
grades = [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]
- Berechne den Klassendurchschnitt selbst mithilfe einer while-Schleife.
- Berechne den Klassendurchschnitt nun nochmals, aber mithilfe einer for-Schleife. Verwende in der Schleife eine sinnvolle Variable.
Aufgabe 2
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)
Aufgabe 3
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 WORD = "MISSISSIPPI"
.
Aufgabe 4
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.
Starte wie folgt:
word = "Python" letters = [] # starte mit leerer Liste. Füge in for-Schleife nacheinander Buchstaben hinzu. for ...
Aufgabe 5
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-
Aufgabe 6
Kombiniere die folgenden beiden String s1 = "IFRAI"
und s2 = "nomtk"
zu einem einzigen String "InFoRmAtIk
mithilfe einer for-Schleife.
Aufgabe 7
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.
Tipp: Mit x % 2 == 0
kann man herausfinden, ob x
gerade ist (also durch $2$ teilbar ist) oder nicht.
Aufgabe 8
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 = "" # hier füge in for-Schleife Buchstaben (ausser E) von Text hinzu for ...
Aufgabe 9
Diese und weitere Aufgaben weiter unten sollen mit ineinander verschachtelten for-Schleifen gelöst werden, also Code im Stil:
for ...: for ...: ... ... ...
Mit zwei unterscheidbaren Würfeln wird gleichzeitig gewürfelt. Gib alle möglichen Resultate aus, also:
11 12 13 .. 21 ...
Tipp: Verwende verschachtelte for-Schleifen (for-Schleife in for-Schleife …).
Aufgabe 10
Kleine Einmaleins: Gib alle Multiplikationen von allen einstelligen natürlichen Zahlen aus.
Variante 1 (einfach):
Das Resultat soll also wie folgt aussehen:
0 * 0 = 0 0 * 1 = 0 0 * 2 = 0 0 * 3 = 0 0 * 4 = 0 0 * 5 = 0 0 * 6 = 0 0 * 7 = 0 0 * 8 = 0 0 * 9 = 0 1 * 0 = 0 1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 1 * 4 = 4 ... 9 * 9 = 81
Variante 2 (anspruchsvoll):
Das Resultat soll wie folgt ausgegeben werden:
| 0| 1| 2| 3| 4| 5| 6| 7| 8| 9| --|--|--|--|--|--|--|--|--|--|--| 0|| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 1|| 0| 1| 2| 3| 4| 5| 6| 7| 8| 9| 2|| 0| 2| 4| 6| 8|10|12|14|16|18| 3|| 0| 3| 6| 9|12|15|18|21|24|27| 4|| 0| 4| 8|12|16|20|24|28|32|36| 5|| 0| 5|10|15|20|25|30|35|40|45| 6|| 0| 6|12|18|24|30|36|42|48|54| 7|| 0| 7|14|21|28|35|42|49|56|63| 8|| 0| 8|16|24|32|40|48|56|64|72| 9|| 0| 9|18|27|36|45|54|63|72|81|
Tipps:
- Verwende die Liste
nrs = [0,1,2,3,4,5,6,7,8,9]
(resp.range()
falls du dies bereits kennst). - Verwende wieder verschachtelte for-Schleifen.
- Verwende f-Strings.