Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
| gf_informatik:programmieren_iii [2026-04-29 14:04] – [Aufgabe H5] hof | gf_informatik:programmieren_iii [2026-04-30 05:25] (aktuell) – [For-Schleife] hof | ||
|---|---|---|---|
| Zeile 272: | Zeile 272: | ||
| === Aufgabe H6 (optional) === | === Aufgabe H6 (optional) === | ||
| - | Programmiere eine Funktion `liste_haeufigste(liste)`: | ||
| - | <nodisp 1> | + | <bottom-exercise id=" |
| - | ++++Lösung:| | + | <div slot=" |
| - | <bottom-editor> | + | Programmiere eine Funktion < |
| + | </div> | ||
| + | < | ||
| + | def liste_haeufigste(liste): | ||
| + | """ | ||
| + | # TODO: Code hier | ||
| + | </ | ||
| + | < | ||
| + | assert liste_haeufigste([3, | ||
| + | assert set(liste_haeufigste([3, | ||
| + | </ | ||
| + | < | ||
| def liste_anzahl(liste, | def liste_anzahl(liste, | ||
| count = 0 | count = 0 | ||
| Zeile 300: | Zeile 310: | ||
| numbers = [3, | numbers = [3, | ||
| print(liste_haeufigste(numbers)) | print(liste_haeufigste(numbers)) | ||
| - | </bottom-editor> | + | </template> |
| - | ++++ | + | </bottom-exercise> |
| - | </nodisp> | + | |
| ===== For-Schleife ===== | ===== For-Schleife ===== | ||
| + | <nodisp 2> | ||
| + | ++++TODO hof| | ||
| + | * Einstieg mit direkter for-Schleife. | ||
| + | * Einführung indirekte for-Schleife, | ||
| + | * Erst dann Einführung von `range`. | ||
| + | ++++ | ||
| + | </ | ||
| ==== Theorie ==== | ==== Theorie ==== | ||
| Zeile 337: | Zeile 353: | ||
| * Was ist der Output des folgenden Codeblocks? | * Was ist der Output des folgenden Codeblocks? | ||
| - | <code python> | + | <bottom-editor> |
| for i in range(4): | for i in range(4): | ||
| print(i) | print(i) | ||
| - | </code> | + | </bottom-editor> |
| * Was ist der Output des folgenden Codeblocks? | * Was ist der Output des folgenden Codeblocks? | ||
| - | <code python> | + | <bottom-editor> |
| for k in range(4): | for k in range(4): | ||
| print(5 + k*10) | print(5 + k*10) | ||
| - | </code> | + | </bottom-editor> |
| **Beispiel: | **Beispiel: | ||
| - | Mit einer for-Schleife können wir unsere Turtle jetzt interessantere Wege ablaufen lassen. | + | Mit einer for-Schleife können wir unsere Turtle jetzt interessantere Wege ablaufen lassen. |
| <code python> | <code python> | ||
| Zeile 365: | Zeile 381: | ||
| * Implementiere nun den Code (Selbst tippen, nicht copy-paste!) und überprüfe deine Vermutung. Hattest du recht? | * Implementiere nun den Code (Selbst tippen, nicht copy-paste!) und überprüfe deine Vermutung. Hattest du recht? | ||
| * Modifiziere nun deinen Code so, dass der Abstand zwischen den Linien (a) enger oder (b) grösser wird. | * Modifiziere nun deinen Code so, dass der Abstand zwischen den Linien (a) enger oder (b) grösser wird. | ||
| + | |||
| + | < | ||
| + | |||
| + | </ | ||
| === Startwert === | === Startwert === | ||
| Statt immer bei null zu starten, kann der Startwert auch angegeben werden: | Statt immer bei null zu starten, kann der Startwert auch angegeben werden: | ||
| - | <code python> | + | <bottom-editor> |
| for m in range(10, | for m in range(10, | ||
| - | print(m) | + | print(m)</ |
| - | </code> | + | |
| Mit zwei Parametern interpretiert `range` den ersten als Start- und den zweiten als (exklusiven) Endwert. | Mit zwei Parametern interpretiert `range` den ersten als Start- und den zweiten als (exklusiven) Endwert. | ||
| Zeile 378: | Zeile 397: | ||
| === Schrittweite === | === Schrittweite === | ||
| In den bisherigen for-Schleifen wurde der Parameter in jedem Durchlauf um 1 erhöht. Möchten wir, dass grössere Schritte gemacht werden, können wir _drei_ Parameter verwenden: | In den bisherigen for-Schleifen wurde der Parameter in jedem Durchlauf um 1 erhöht. Möchten wir, dass grössere Schritte gemacht werden, können wir _drei_ Parameter verwenden: | ||
| - | <code python> | + | <bottom-editor> |
| for m in range(0, | for m in range(0, | ||
| print(m) | print(m) | ||
| - | </code> | + | </bottom-editor> |
| Der Parameter `m` hat im ersten Durchlauf den Wert `0`. In jedem weiteren Durchlauf wird er um `10` erhöht, solange er kleiner ist als der Endwert `101`. Ersetzen wir die Zahl `101` durch `110`, so ist das Resultat genau das gleiche. Erst mit `111` ist die grösste ausgegebene Zahl `110`. | Der Parameter `m` hat im ersten Durchlauf den Wert `0`. In jedem weiteren Durchlauf wird er um `10` erhöht, solange er kleiner ist als der Endwert `101`. Ersetzen wir die Zahl `101` durch `110`, so ist das Resultat genau das gleiche. Erst mit `111` ist die grösste ausgegebene Zahl `110`. | ||
| - | |||
| #### Indirekte for-Schleife | #### Indirekte for-Schleife | ||
| `range()` ist zusammen mit `len()` äusserst praktisch, um alle gültigen Positionen (Indices) einer Liste aufzuzählen: | `range()` ist zusammen mit `len()` äusserst praktisch, um alle gültigen Positionen (Indices) einer Liste aufzuzählen: | ||
| - | <code python> | + | <bottom-editor> |
| numbers = [2, 5, 42, 17] | numbers = [2, 5, 42, 17] | ||
| Zeile 394: | Zeile 412: | ||
| element = numbers[index] | element = numbers[index] | ||
| print(index, | print(index, | ||
| - | </code> | + | </bottom-editor> |
| ==== Aufgaben I ==== | ==== Aufgaben I ==== | ||
| Zeile 406: | Zeile 424: | ||
| {{ : | {{ : | ||
| + | < | ||
| + | < | ||
| + | from turtle import * | ||
| + | </ | ||
| + | < | ||
| + | from turtle import * | ||
| + | |||
| + | t = Turtle() | ||
| + | t.speed(0) | ||
| + | |||
| + | t.teleport(-75, | ||
| + | for side in range(32): | ||
| + | t.forward(side * 4) | ||
| + | t.left(90) | ||
| + | |||
| + | t.teleport(75, | ||
| + | for side in range(64): | ||
| + | t.forward(side * 2) | ||
| + | t.left(90) | ||
| + | </ | ||
| + | </ | ||
| === Aufgabe I2 === | === Aufgabe I2 === | ||
| Zeile 412: | Zeile 451: | ||
| {{ : | {{ : | ||
| + | < | ||
| + | < | ||
| + | from turtle import * | ||
| + | </ | ||
| + | < | ||
| + | from turtle import * | ||
| + | |||
| + | t = Turtle() | ||
| + | t.speed(0) | ||
| + | |||
| + | for radius in range(16): | ||
| + | t.circle(radius * 5, 180) | ||
| + | </ | ||
| + | </ | ||
| === Aufgabe I3 (optional) === | === Aufgabe I3 (optional) === | ||
| Zeile 418: | Zeile 471: | ||
| {{ : | {{ : | ||
| + | < | ||
| + | < | ||
| + | from turtle import * | ||
| + | </ | ||
| + | < | ||
| + | from turtle import * | ||
| + | |||
| + | t = Turtle() | ||
| + | t.speed(0) | ||
| + | |||
| + | for side in range(28): | ||
| + | t.forward(side * 8) | ||
| + | t.left(90) | ||
| + | t.forward(side * 4) | ||
| + | t.left(90) | ||
| + | </ | ||
| + | </ | ||
| === Aufgabe I4 === | === Aufgabe I4 === | ||
| - | Wandle in `while`-Schleife um: | + | |
| - | <code python> | + | < |
| + | <div part=" | ||
| + | Wandle in < | ||
| + | <pre> | ||
| for i in range(4, | for i in range(4, | ||
| print(i) | print(i) | ||
| - | </code> | + | </pre> |
| - | + | </div> | |
| - | <nodisp 1> | + | <template data-type=" |
| - | ++++Lösung: | + | |
| - | <code python> | + | |
| i = 4 | i = 4 | ||
| while i < 12: | while i < 12: | ||
| print(i) | print(i) | ||
| i = i + 1 | i = i + 1 | ||
| - | </code> | + | </template> |
| - | ++++ | + | </bottom-exercise> |
| - | </nodisp> | + | |
| === Aufgabe I5 === | === Aufgabe I5 === | ||
| - | Wandle in möglichst kurze for-Schleife (max. 2 Zeilen) um: | + | |
| - | <code python> | + | < |
| + | <div part=" | ||
| + | Wandle in möglichst kurze < | ||
| + | <pre> | ||
| i = 10 | i = 10 | ||
| while i < 29: | while i < 29: | ||
| print(i) | print(i) | ||
| i = i + 3 | i = i + 3 | ||
| - | </code> | + | </pre> |
| - | + | </div> | |
| - | <nodisp 1> | + | <template data-type=" |
| - | + | ||
| - | ++++Lösung| | + | |
| - | <code python> | + | |
| for i in range(10, 29, 3): | for i in range(10, 29, 3): | ||
| print(i) | print(i) | ||
| - | """ | + | </template> |
| - | OUTPUT: | + | </bottom-exercise> |
| - | 10 | + | |
| - | 13 | + | |
| - | 16 | + | |
| - | 19 | + | |
| - | 22 | + | |
| - | 25 | + | |
| - | 28 | + | |
| - | """ | + | |
| - | </code> | + | |
| - | ++++ | + | |
| - | </nodisp> | + | |
| === Aufgabe I6 === | === Aufgabe I6 === | ||
| - | Finde den Index (die Position) von `" | ||
| - | `[' | + | < |
| + | <div part=" | ||
| + | < | ||
| - | **Zusatzaufgabe: | + | < |
| - | <nodisp 1> | + | <p>< |
| - | ++++Lösung| | + | </ |
| - | <code python> | + | <template data-type=" |
| + | names = [' | ||
| + | </ | ||
| + | < | ||
| + | assert " | ||
| + | assert suchen([' | ||
| + | assert suchen(" | ||
| + | </ | ||
| + | < | ||
| names = [' | names = [' | ||
| for index in range(len(names)): | for index in range(len(names)): | ||
| Zeile 486: | Zeile 555: | ||
| print(suchen(names, | print(suchen(names, | ||
| - | </code> | + | </template> |
| - | ++++ | + | </bottom-exercise> |
| - | </nodisp> | + | |
| === Aufgabe I7 === | === Aufgabe I7 === | ||
| - | **Teil 1**: Schreibe eine Funktion | + | < |
| - | Verwende dazu eine `for zahl in range(...)` Schleife. | + | <div part=" |
| + | < | ||
| + | <p>Verwende dazu eine < | ||
| - | **Teil 2**: Ändere die Funktion so, dass der Teiler über ein Funktionsargument gewählt werden kann. | + | < |
| - | Der Aufruf | + | Der Aufruf |
| Der Aufruf ohne Argument soll weiterhin die Siebnerreihe addieren. | Der Aufruf ohne Argument soll weiterhin die Siebnerreihe addieren. | ||
| - | + | </ | |
| - | <nodisp 1> | + | <template data-type=" |
| - | ++++Lösung| | + | def reihensumme(): |
| - | <code python> | + | """ |
| + | </ | ||
| + | < | ||
| + | assert reihensumme() == 385, "Teil 1: Reihensumme soll 385 zurückgeben" | ||
| + | assert reihensumme(5) == 275, "Teil 2: reihensumme(5) soll 275 zurückgeben" | ||
| + | </ | ||
| + | <template data-type=" | ||
| def reihensumme(n=7): | def reihensumme(n=7): | ||
| """ | """ | ||
| Zeile 510: | Zeile 587: | ||
| print(reihensumme()) | print(reihensumme()) | ||
| print(reihensumme(5)) | print(reihensumme(5)) | ||
| - | </code> | + | </template> |
| - | ++++ | + | </bottom-exercise> |
| - | </nodisp> | + | |
| === Aufgabe I8 === | === Aufgabe I8 === | ||
| - | **Teil 1**: Schreibe eine Funktion | + | < |
| - | + | <div part=" | |
| - | <nodisp 1> | + | <p>Schreibe eine Funktion |
| - | ++++Lösung| | + | </ |
| - | <code python> | + | <template data-type=" |
| - | def reverse(liste): | + | def umdrehen(liste): |
| + | """ | ||
| + | </ | ||
| + | < | ||
| + | assert umdrehen([' | ||
| + | </ | ||
| + | < | ||
| + | def umdrehen(liste): | ||
| result = [] | result = [] | ||
| # range erzeugt eine Zahlenfolge n, n-1, ... 3, 2, 1, 0: | # range erzeugt eine Zahlenfolge n, n-1, ... 3, 2, 1, 0: | ||
| Zeile 531: | Zeile 615: | ||
| names = [' | names = [' | ||
| - | print(reverse(names))</ | + | print(umdrehen(names))</ |
| - | ++++ | + | </ |
| - | </nodisp> | + | </bottom-exercise> |