Programmieren II: Weiterführende Programmierkonzepte

Lernziele

Slides Listen

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']

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:

  1. Entferne alle Elemente, die (leider) nicht in diese Liste gehören.
  2. Füge ganz hinten eine „Mango“ an.
  3. Füge zwischen „Apfel“ und „Banane“ eine Kiwi ein.
  4. Ooops, bei der „Orange“ hat sich ein Fehler eingeschlichen. Korrigiere diesen, in dem du das Wort an Wort „Orane“ durch „Orange“ ersetzt.
  5. Füge ganz am Anfang eine „Blaubeere“ ein.
  6. Befehl, welcher die Anzahl Früchte, die in der finalen Liste stehen, ermittelt.
  7. 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.

Lösungen

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:

  1. Ersetze „Romanshorn“ direkt durch die Schweizer Hauptstadt.
  2. Entferne die deutsche Stadt, die nichts in der Liste verloren hat.
  3. Füge hinten die Hauptstadt von Norwegen ein.
  4. Füge zwischen „Berlin“ und „Paris“ noch „Rom“ ein.
  5. 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"]
  1. Gehe mit einer Schleife der Reihe nach durch alle Elemente der Liste durch und gebe sie aus.
  2. 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"].

  1. Gib einen nach dem anderen aus. Der Output soll also sein:
    Januar
    Februar
    März
    April
    Mai
    Juni
    Juli
    August
    September
    Oktober
    November
    Dezember
  2. 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:

  1. 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.
  2. 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:

  1. Einfacher: Mit neuer Liste
  2. 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?

  1. Einige Aufgaben haben anspruchsvollere Optionen, stelle sicher, dass du diese gelöst hast.
  2. Erstelle einen Account auf CodeWards, folge dazu dem Tutorial. Löse selbst Aufgaben dort. Wähle z.B. den Tag „Fundamental“.

Lösungen

Slides For-Schleife

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)

Ä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

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]

  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 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 = "" # 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.

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

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.
  • gf_informatik/programmieren_ii_sca.1743678131.txt.gz
  • Zuletzt geändert: 2025-04-03 11:02
  • von sca