Übung 14 – Listen
Ziel dieser Übung
Sie speichern viele Werte in einer Liste, erweitern sie mit append und gehen sie mit for durch.
So arbeiten Sie: Bearbeiten Sie die Schritte der Reihe nach. Ihre Tabellen und Programme tragen Sie in die
Reflexion zu Sitzung 4 ein. Öffnen Sie die Hilfen erst, wenn Sie nicht weiterkommen: zuerst den Tipp, dann das Gerüst, zuletzt die Lösung. Ihre Lösung darf anders aussehen – wichtig ist, dass sie für alle Testeingaben das Richtige ausgibt.
1. Listen anlegen und benutzen
einkauf = ["Brot", "Milch", "Äpfel"]
print(len(einkauf))
print(einkauf[0])
print(einkauf[-1])
einkauf.append("Käse")
for ding in einkauf:
print(f"- {ding}")
3
Brot
Äpfel
- Brot
- Milch
- Äpfel
- Käse
- Eine Liste steht in eckigen Klammern, die Einträge sind durch Kommas getrennt.
- Der Index beginnt bei 0:
einkauf[0] ist der erste, einkauf[-1] der letzte Eintrag. len() zählt die Einträge, append() hängt einen neuen hinten an.einkauf[3] bei drei Einträgen gibt IndexError: list index out of range.
2. Aufgaben
Aufgabe 3a · Einkaufsliste Pflicht, ca. 10 Min.
Eine Einkaufsliste soll so lange Einträge sammeln, bis jemand nur Enter drückt. Danach zeigt sie die ganze Liste an.
Ihre Aufgabe
- Tragen Sie ein, was das Programm bei den Eingaben am Ende ausgeben muss. „Enter“ heißt: leere Eingabe.
| Eingaben nacheinander | Anzahl (erwartet) | Liste (erwartet) |
|---|
Brot, Milch, Enter | | |
Enter | | |
Äpfel, Käse, Nudeln, Enter | | |
- Schreiben Sie
einkauf.py: Es beginnt mit einer leeren Liste und fragt mit Was brauchen Sie? (Enter = fertig) so lange nach Einträgen, bis die Eingabe leer ist. Jeder Eintrag kommt mit append in die Liste. - Geben Sie danach die Anzahl und mit
for jeden Eintrag genau so aus:Was brauchen Sie? (Enter = fertig) Brot
Was brauchen Sie? (Enter = fertig) Milch
Was brauchen Sie? (Enter = fertig)
Ihre Liste hat 2 Einträge:
- Brot
- Milch
- Testen Sie mit allen drei Zeilen der Tabelle.
Fertig sind Sie, wenn alle drei Tests stimmen – auch der mit einer leeren Liste.
Tipp
Hier treffen sich beide Schleifen: Wie viele Einträge kommen, wissen Sie vorher nicht – also while ding != "":. Die fertige Liste gehen Sie dann mit for ding in einkauf: durch. Die Anzahl liefert len(einkauf).
Gerüst
Ersetzen Sie jedes ___ durch den passenden Ausdruck.
einkauf = []
ding = input("Was brauchen Sie? (Enter = fertig) ")
while ___:
einkauf.___(ding)
ding = input("Was brauchen Sie? (Enter = fertig) ")
print(f"Ihre Liste hat {___} Einträge:")
for ___ in einkauf:
print(f"- {ding}")
Lösung
| Eingaben | Anzahl | Liste |
|---|
Brot, Milch, Enter | 2 | - Brot - Milch |
Enter | 0 | (keine Einträge) |
Äpfel, Käse, Nudeln, Enter | 3 | - Äpfel - Käse - Nudeln |
einkauf = []
ding = input("Was brauchen Sie? (Enter = fertig) ")
while ding != "":
einkauf.append(ding)
ding = input("Was brauchen Sie? (Enter = fertig) ")
print(f"Ihre Liste hat {len(einkauf)} Einträge:")
for ding in einkauf:
print(f"- {ding}")
Was brauchen Sie? (Enter = fertig) Äpfel
Was brauchen Sie? (Enter = fertig) Käse
Was brauchen Sie? (Enter = fertig) Nudeln
Was brauchen Sie? (Enter = fertig)
Ihre Liste hat 3 Einträge:
- Äpfel
- Käse
- Nudeln
Bei sofortigem Enter läuft die while-Schleife kein einziges Mal und die for-Schleife auch nicht: Es erscheint nur Ihre Liste hat 0 Einträge:.
Aufgabe 3b · Noten auswerten Pflicht, ca. 10 Min.
Für die Noten [2, 1, 3, 2, 4] sollen der Durchschnitt und die beste Note berechnet werden – mit einer einzigen for-Schleife.
Ihre Aufgabe
- Rechnen Sie Durchschnitt und beste Note von Hand aus und tragen Sie beides ein.
| Noten | Durchschnitt (erwartet) | Beste Note (erwartet) |
|---|
[2, 1, 3, 2, 4] | | |
[3, 3, 3] | | |
[5, 4, 2] | | |
- Schreiben Sie
noten.py: Gehen Sie mit for durch die Liste, zählen Sie in summe zusammen und merken Sie sich mit if in beste die kleinste Note. - Geben Sie beides genau so aus:
Durchschnitt: 2.4
Beste Note: 1
- Testen Sie auch die beiden anderen Listen aus der Tabelle, indem Sie die erste Zeile ändern.
Fertig sind Sie, wenn alle drei Listen das Ergebnis aus Ihrer Tabelle liefern.
Zusatz für Schnelle: Zählen Sie für [2, 1, 3, 2, 4, 1, 2], wie oft jede Note von 1 bis 6 vorkommt. Tipp: eine for-Schleife in einer for-Schleife.
Tipp
Starten Sie mit beste = noten[0], also mit der ersten Note. In der Schleife gilt: Ist note < beste, wird beste = note. Den Durchschnitt rechnen Sie nach der Schleife: summe / len(noten).
Gerüst
Ersetzen Sie jedes ___ durch den passenden Ausdruck.
noten = [2, 1, 3, 2, 4]
summe = 0
beste = noten[0]
for note in noten:
summe = ___
if ___:
beste = note
print(f"Durchschnitt: {summe / len(noten)}")
print(f"Beste Note: {beste}")
Lösung
| Noten | Durchschnitt | Beste Note |
|---|
[2, 1, 3, 2, 4] | 2.4 | 1 |
[3, 3, 3] | 3.0 | 3 |
[5, 4, 2] | 3.6666666666666665 (≈ 3,7) | 2 |
noten = [2, 1, 3, 2, 4]
summe = 0
beste = noten[0]
for note in noten:
summe = summe + note
if note < beste:
beste = note
print(f"Durchschnitt: {summe / len(noten)}")
print(f"Beste Note: {beste}")
Durchschnitt: 2.4
Beste Note: 1
„Beste“ Note heißt hier: die kleinste Zahl. Python kennt dafür auch min(noten) und sum(noten) – die Schleife zeigt Ihnen, was diese Funktionen im Inneren tun. Lange Kommazahlen kürzen Sie mit {wert:.1f}.
Zusatz:
noten = [2, 1, 3, 2, 4, 1, 2]
for wert in range(1, 7):
anzahl = 0
for note in noten:
if note == wert:
anzahl = anzahl + 1
print(f"Note {wert}: {anzahl}-mal")
Note 1: 2-mal
Note 2: 3-mal
Note 3: 1-mal
Note 4: 1-mal
Note 5: 0-mal
Note 6: 0-mal
Weiter zur Reflexion 304 →
Exercise 14 – Lists
Goal of this exercise
You store many values in a list, extend it with append and go through it with for.
How to work: work through the steps in order. Enter your tables and programs in the
reflection on session 4. Open the help only when you are stuck: first the tip, then the scaffold, finally the solution. Your solution may look different – what matters is that it gives the right output for every test input.
1. Creating and using lists
einkauf = ["Brot", "Milch", "Äpfel"]
print(len(einkauf))
print(einkauf[0])
print(einkauf[-1])
einkauf.append("Käse")
for ding in einkauf:
print(f"- {ding}")
3
Brot
Äpfel
- Brot
- Milch
- Äpfel
- Käse
- A list is written in square brackets, entries separated by commas.
- The index starts at 0:
einkauf[0] is the first entry, einkauf[-1] the last. len() counts the entries, append() adds a new one at the end.einkauf[3] with three entries gives IndexError: list index out of range.
2. Tasks
Task 3a · Shopping list Required, approx. 10 min
A shopping list should collect entries until someone just presses Enter. Then it shows the whole list.
Your task
- Enter what the program must print at the end for these inputs. “Enter” means: empty input.
| Inputs in order | Count (expected) | List (expected) |
|---|
Brot, Milch, Enter | | |
Enter | | |
Äpfel, Käse, Nudeln, Enter | | |
- Write
einkauf.py: it starts with an empty list and keeps asking for entries with Was brauchen Sie? (Enter = fertig) until the input is empty. Every entry goes into the list with append. - Then print the count and, with
for, every entry exactly like this:Was brauchen Sie? (Enter = fertig) Brot
Was brauchen Sie? (Enter = fertig) Milch
Was brauchen Sie? (Enter = fertig)
Ihre Liste hat 2 Einträge:
- Brot
- Milch
- Test with all three rows of the table.
You are done when all three tests are right – including the one with an empty list.
Tip
Both loops meet here: you do not know in advance how many entries will come – so while ding != "":. Then go through the finished list with for ding in einkauf:. len(einkauf) gives the count.
Scaffold
Replace every ___ with the right expression.
einkauf = []
ding = input("Was brauchen Sie? (Enter = fertig) ")
while ___:
einkauf.___(ding)
ding = input("Was brauchen Sie? (Enter = fertig) ")
print(f"Ihre Liste hat {___} Einträge:")
for ___ in einkauf:
print(f"- {ding}")
Solution
| Inputs | Count | List |
|---|
Brot, Milch, Enter | 2 | - Brot - Milch |
Enter | 0 | (no entries) |
Äpfel, Käse, Nudeln, Enter | 3 | - Äpfel - Käse - Nudeln |
einkauf = []
ding = input("Was brauchen Sie? (Enter = fertig) ")
while ding != "":
einkauf.append(ding)
ding = input("Was brauchen Sie? (Enter = fertig) ")
print(f"Ihre Liste hat {len(einkauf)} Einträge:")
for ding in einkauf:
print(f"- {ding}")
Was brauchen Sie? (Enter = fertig) Äpfel
Was brauchen Sie? (Enter = fertig) Käse
Was brauchen Sie? (Enter = fertig) Nudeln
Was brauchen Sie? (Enter = fertig)
Ihre Liste hat 3 Einträge:
- Äpfel
- Käse
- Nudeln
If Enter is pressed straight away, the while loop does not run even once and neither does the for loop: only Ihre Liste hat 0 Einträge: appears.
Task 3b · Evaluating grades Required, approx. 10 min
For the grades [2, 1, 3, 2, 4] the average and the best grade should be calculated – with a single for loop.
Your task
- Work out the average and the best grade by hand and enter both.
| Grades | Average (expected) | Best grade (expected) |
|---|
[2, 1, 3, 2, 4] | | |
[3, 3, 3] | | |
[5, 4, 2] | | |
- Write
noten.py: go through the list with for, add up in summe and use if to remember the smallest grade in beste. - Print both exactly like this:
Durchschnitt: 2.4
Beste Note: 1
- Also test the other two lists from the table by changing the first line.
You are done when all three lists give the result from your table.
Extra for the faster ones: for [2, 1, 3, 2, 4, 1, 2], count how often each grade from 1 to 6 occurs. Tip: a for loop inside a for loop.
Tip
Start with beste = noten[0], i.e. with the first grade. Inside the loop: if note < beste, then beste = note. Calculate the average after the loop: summe / len(noten).
Scaffold
Replace every ___ with the right expression.
noten = [2, 1, 3, 2, 4]
summe = 0
beste = noten[0]
for note in noten:
summe = ___
if ___:
beste = note
print(f"Durchschnitt: {summe / len(noten)}")
print(f"Beste Note: {beste}")
Solution
| Grades | Average | Best grade |
|---|
[2, 1, 3, 2, 4] | 2.4 | 1 |
[3, 3, 3] | 3.0 | 3 |
[5, 4, 2] | 3.6666666666666665 (≈ 3.7) | 2 |
noten = [2, 1, 3, 2, 4]
summe = 0
beste = noten[0]
for note in noten:
summe = summe + note
if note < beste:
beste = note
print(f"Durchschnitt: {summe / len(noten)}")
print(f"Beste Note: {beste}")
Durchschnitt: 2.4
Beste Note: 1
“Best” grade means the smallest number here. Python also has min(noten) and sum(noten) for this – the loop shows you what these functions do inside. Shorten long decimals with {wert:.1f}.
Extra:
noten = [2, 1, 3, 2, 4, 1, 2]
for wert in range(1, 7):
anzahl = 0
for note in noten:
if note == wert:
anzahl = anzahl + 1
print(f"Note {wert}: {anzahl}-mal")
Note 1: 2-mal
Note 2: 3-mal
Note 3: 1-mal
Note 4: 1-mal
Note 5: 0-mal
Note 6: 0-mal
On to reflection 304 →