Listen
Informatik · Python · Klassen 10–13 · PRIMM-Methode
🎯 Worum geht's? Klasse 10–13 · 3 Unterrichtsstunden
Nach dieser Seite kannst du …
- Schleifen über Listen Schritt für Schritt verfolgen
- mit Indizes,
len()undappend()arbeiten - Standardalgorithmen erkennen: Summe, Maximum, Zählen, Umkehren, Suchen, Sortieren
- eigene Funktionen mit Listen schreiben
Vorwissen: Variablen, for- und while-Schleifen, Funktionen
📝 Aufgaben
Jede Aufgabe hat fünf Schritte: Predict › Run › Investigate › Modify › Make. Wähle eine Aufgabe aus – oder nutze oben die Leiste „Aufgaben: 1, 2, 3 …“.
📐 Das Wichtigste in Kürze
a = [4, 7, 2]– eine Liste;a[0]ist das erste Element,len(a)die Länge.for i in range(len(a)):läuft über alle Indizes,for wert in a:über alle Werte.[0] * 5ergibt[0, 0, 0, 0, 0];a.append(x)hängtxhinten an.- Eine Funktion, die
a[i] = …setzt, verändert die übergebene Liste selbst.
In den Make-Aufgaben sollst du die Algorithmen selbst programmieren – fertige Helfer wie sum,
max, sort oder count sind dort nicht erlaubt.
🏅 Zuletzt verdiente Badges
Analysiere die Funktion, ohne sie auszuführen.
Was wird ausgegeben?
x wird in jedem Durchlauf um a[i] größer.Trage nach jedem Durchlauf den Wert von x ein. Eingabe: [4, 7, 2, 9]
| Schritt | i | a[i] | x danach |
|---|---|---|---|
| Start | – | – | |
| 1 | 0 | 4 | |
| 2 | 1 | 7 | |
| 3 | 2 | 2 | |
| 4 | 3 | 9 |
x plus a[i].Was liefert berechne([])?
Wie oft läuft die Schleife bei einer Liste der Länge n?
Ändere die Funktion so, dass sie das Produkt aller Elemente berechnet. Für [4, 7, 2, 9] soll 504 herauskommen.
Schreibe verarbeite(a): Sie gibt den größten Wert der Liste zurück – ohne max().
Welche Liste gibt die Funktion zurück?
Was wird ausgegeben?
len(a) - 1 - i für i = 0 und i = 1.Trage ein, was am Ende in b steht.
b[0] | b[1] | b[2] | b[3] | b[4] | |
|---|---|---|---|---|---|
| Wert |
Welcher Index von b wird bei i = 2 beschrieben?
b[4] beschrieben, bei i = 1 b[3] …Verändert transformiere die übergebene Liste a?
Was ist len(a) - 1 - i für len(a) = 5 und i = 4?
Passe die Funktion so an, dass sie nur die Elemente an geraden Indizes (0, 2, 4, …) zurückgibt: [10, 20, 30, 40, 50] → [10, 30, 50].
%?Schreibe kombiniere(a, b): eine neue Liste mit erst allen Elementen von a, dann von b – mit Schleifen und append (ohne a + b).
a an, dann in einer zweiten alle von b.Jeder Wert dient als Index in einer Zählliste.
Was wird ausgegeben?
Trage ein, was am Ende in z steht.
| [0] | [1] | [2] | [3] | [4] | [5] | |
|---|---|---|---|---|---|---|
z |
Was passiert bei auswerten([6])?
Warum hat z sechs Felder statt fünf?
Ergänze finde_haeufigsten(werte): Sie gibt den häufigsten Wert zurück. Für [3, 1, 2, 3, 1, 3, 2] → 3.
i, zu dem er gehört.Schreibe zaehle_vorkommen(a, x): Wie oft kommt x in a vor? (ohne count)
x.Nachbarn werden verglichen und bei Bedarf getauscht.
Was wird ausgegeben?
Trage die Liste nach jedem Schleifendurchlauf ein.
i | Vergleich | [0] | [1] | [2] | [3] | [4] |
|---|---|---|---|---|---|---|
| Start | – | 5 | 3 | 8 | 1 | 4 |
| 0 | 5 > 3? | |||||
| 1 | 5 > 8? | |||||
| 2 | 8 > 1? | |||||
| 3 | 8 > 4? |
a[i], a[i + 1] = a[i + 1], a[i] tauscht zwei Werte.Warum läuft die Schleife nur bis len(a) - 1?
Was ist nach einem Durchlauf sicher?
Ändere die Bedingung so, dass der Durchlauf das kleinste Element nach hinten bringt (absteigende Sortierung).
Schreibe sortiere(a): vollständiger Bubblesort, der die Liste aufsteigend sortiert (ohne sort).
Die Funktion markiert alle Zahlen bis n.
Was wird ausgegeben – ist 9 als Primzahl markiert?
m[k] genau dann True, wenn k eine Primzahl ist.Trage für markiere(10) True oder False ein.
| k | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|---|
m[k] |
Was bedeutet range(p * p, n + 1, p)?
Warum darf die äußere Schleife bei p * p > n aufhören?
Ergänze sammle_primzahlen(n): eine Liste aller Primzahlen bis n. Für 20 → [2, 3, 5, 7, 11, 13, 17, 19].
k von m und hänge k an, wenn m[k] wahr ist.Schreibe pruefe_zahl(n): True, wenn n eine Primzahl ist – durch Probedivision (ohne Sieb).
teiler * teiler <= n gilt.Zwei Zeiger laufen von außen nach innen.
Was wird ausgegeben?
Trage nach jedem Tausch l, r (nach dem Weiterrücken) und die Liste ein.
| Tausch | l | r | [0] | [1] | [2] | [3] | [4] | [5] |
|---|---|---|---|---|---|---|---|---|
| Start | 0 | 5 | 1 | 2 | 3 | 4 | 5 | 6 |
| 1. | ||||||||
| 2. | ||||||||
| 3. |
a[l] und a[r]; danach l + 1 und r - 1.Warum while l < r und nicht l <= r?
Wie viele Tauschvorgänge gibt es bei einer Liste der Länge n?
Ergänze eine Bedingung: Getauscht wird nur, wenn a[l] < 4 ist. Die Zeiger rücken trotzdem weiter.
Schreibe pruefe_symmetrie(a) mit zwei Zeigern: [1, 2, 3, 2, 1] → True, [1, 2, 3] → False.
False.Die Funktion addiert immer k benachbarte Werte.
Was wird ausgegeben?
Trage die Summe jedes Fensters ein.
i | Fenster | erg[i] |
|---|---|---|
| 0 | 1 + 3 + 5 | |
| 1 | 3 + 5 + 2 | |
| 2 | 5 + 2 + 4 |
Wie viele Fenster gibt es bei Länge 5 und k = 3?
Wie nennt man diese Technik?
Passe gleite an: statt der Summe das Maximum jedes Fensters.
s mit dem ersten Wert des Fensters und ersetze die Addition durch einen Vergleich.Schreibe finde_position(a): den Index des größten Elements (bei Gleichstand der kleinere). [3, 7, 7, 2] → 1.
> (statt >=) bleibt bei Gleichstand der kleinere Index.Die Liste ist sortiert. Gesucht sind zwei Werte mit der Summe ziel.
Was wird ausgegeben?
r kleiner; ist sie zu klein, wird l größer.Trage jeden Schleifendurchlauf ein. Aktion: l+1, r-1 oder True.
| Schritt | l | r | s | Aktion |
|---|---|---|---|---|
| 1 | ||||
| 2 | ||||
| 3 | ||||
| 4 |
1 + 11 = 12 ist größer als 10.Warum funktioniert das nur bei sortierten Listen?
Wie viele Schleifendurchläufe gibt es höchstens bei Länge n?
Ändere suche: Statt True/False soll sie den Index des linken Partners zurückgeben, sonst -1.
True und statt False zurückkommen?Schreibe binaer_suche(a, ziel) für eine sortierte Liste: Index von ziel oder -1 – durch Halbieren (ohne index oder in).
l und r fest und schau in die Mitte. Ist der Wert dort zu klein, suchst du rechts weiter, sonst links.Insertion Sort fügt jedes Element an die richtige Stelle im vorderen, sortierten Teil ein.
Was wird ausgegeben?
Trage die Liste nach jedem Durchlauf der äußeren Schleife ein.
i | [0] | [1] | [2] | [3] | [4] |
|---|---|---|---|---|---|
| Start | 5 | 2 | 8 | 1 | 3 |
| 1 | |||||
| 2 | |||||
| 3 | |||||
| 4 |
a[i] als key gemerkt; größere Elemente links davon rücken nach rechts, dann kommt key in die Lücke.Wie viele Vergleiche braucht Insertion Sort für eine schon sortierte Liste der Länge n?
Was unterscheidet Insertion Sort von Bubblesort?
Ändere Insertion Sort so, dass er absteigend sortiert (größtes Element zuerst).
Schreibe selection_sort(a): Suche in jedem Durchlauf das Minimum des unsortierten Rests und tausche es nach vorne (ohne sort oder min).
i, die gefüllt wird. Innere Schleife: Index des kleinsten Elements im Rest suchen. Dann tauschen.Zwei sortierte Listen werden zu einer sortierten Liste zusammengeführt.
Was wird ausgegeben?
Trage für jeden Schritt i, j (vor dem Vergleich) und den übernommenen Wert ein.
| Schritt | i | j | übernommen |
|---|---|---|---|
| 1 | |||
| 2 | |||
| 3 | |||
| 4 | |||
| 5 | |||
| 6 (Rest) | 3 |
a[i] mit b[j]; nur der Zeiger der übernommenen Liste rückt weiter.Welche Voraussetzung müssen a und b erfüllen?
Wie viele Schritte braucht merge für Listen der Länge m und n?
Ändere merge so, dass ein Wert, der in beiden Listen vorkommt, nur einmal übernommen wird.
a[i] == b[j] getrennt: Wert einmal übernehmen und beide Zeiger weiterrücken.Schreibe merge_sort(a): Teile die Liste in zwei Hälften, sortiere beide rekursiv und führe sie mit merge zusammen. [5, 2, 8, 1, 3] → [1, 2, 3, 5, 8].
a[:mitte], a[mitte:]), beide Hälften rekursiv sortieren und mit merge zusammenführen.🏅 Deine Badges
Verdiente Badges leuchten auf.
📊 Statistik
↺ Zurücksetzen
Alle gespeicherten Daten werden gelöscht.
📄 Arbeitsblatt erstellen
Wähle aus, welche Bereiche auf das Arbeitsblatt kommen. Es enthält dann alle … Aufgaben dieser Seite aus diesen Bereichen – mit Kästchen zum Ankreuzen, leeren Tabellen und Platz zum Schreiben, ohne Lösungen und Tipps.