Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
gf_informatik:programmieren_iii [2026-04-29 13:58] – [Selektion und Modifikation] hofgf_informatik:programmieren_iii [2026-04-30 05:25] (aktuell) – [For-Schleife] hof
Zeile 245: Zeile 245:
 === Aufgabe H5 === === Aufgabe H5 ===
  
-Definiere eine Funktion `mittelwert(numbers)`, welcher eine Liste mit Zahlen übergeben wird. Von diesen Zahlen wird dann der Mittelwert berechnet und zurückgegeben. Übergibt man zum Beispiel eine Liste mit Schulnoten, so erhält man den Notendurchschnitt zurück. Zeige den Durchschnittswert dann in einem formatierten String an, z.B. "Der Mittelwert ist 4.46"+<bottom-exercise id="h5"> 
- +<div slot="prompt"> 
-<nodisp 1+Definiere eine Funktion <code>mittelwert(numbers)</code>, welcher eine Liste mit Zahlen übergeben wird. Von diesen Zahlen wird dann der Mittelwert berechnet und zurückgegeben. Übergibt man zum Beispiel eine Liste mit Schulnoten, so erhält man den Notendurchschnitt zurück. Zeige den Durchschnittswert dann in einem formatierten String an, z.B. "Der Mittelwert ist 4.46"
-++++Lösung:| +</div> 
-<bottom-editor>+<template data-type="starter"
 +def mittelwert(numbers): 
 +    """Gibt den Mittelwert von numbers zurück.""" 
 +    # TODO: Code hier 
 +</template> 
 +<template data-type="test"> 
 +assert mittelwert([3.8, 4.2, 5.7, 4.8]) == 4.625 
 +assert mittelwert([4, 4, 4, 6]) == 4.5 
 +</template> 
 +<template data-type="solution">
 def mittelwert(numbers): def mittelwert(numbers):
 +    """Gibt den Mittelwert von numbers zurück."""
     summe = 0     summe = 0
     for elem in numbers:     for elem in numbers:
Zeile 257: Zeile 267:
  
 print(f'Der Mittelwert ist {mittelwert([3.8, 4.2, 5.7, 4.8])}') print(f'Der Mittelwert ist {mittelwert([3.8, 4.2, 5.7, 4.8])}')
-</bottom-editor> +</template
- +</bottom-exercise>
-++++ +
-</nodisp>+
  
 === Aufgabe H6 (optional) === === Aufgabe H6 (optional) ===
  
-Programmiere eine Funktion `liste_haeufigste(liste)`: Gibt eine Liste zurück, die alle Elemente enthält, die am häufigsten vorkommen. Neben dieser Liste wird auch eine Zahl ausgegeben, die angibt, wie oft diese Elemente in der Liste vorkommen. 
  
-<nodisp 1+<bottom-exercise id="h6"
-++++Lösung:| +<div slot="prompt"> 
-<bottom-editor>+Programmiere eine Funktion <code>liste_haeufigste(liste)</code>Gibt eine Liste zurück, die alle Elemente enthält, die am häufigsten vorkommen. Neben dieser Liste wird auch eine Zahl ausgegeben, die angibt, wie oft diese Elemente in der Liste vorkommen. 
 +</div> 
 +<template data-type="starter"> 
 +def liste_haeufigste(liste): 
 +    """Gibt den häufigsten Wert der Liste zurück, und seine Häufigkeit.""" 
 +    # TODO: Code hier 
 +</template> 
 +<template data-type="test"> 
 +assert liste_haeufigste([3,1,5,4,9,4,8,3,1,2,4,9]) == ([4], 3) 
 +assert set(liste_haeufigste([3,1,5,4,9,4,8,3,1,2,4,9,9])[0]) == {4, 9} 
 +</template> 
 +<template data-type="solution">
 def liste_anzahl(liste, x): def liste_anzahl(liste, x):
     count = 0     count = 0
Zeile 292: Zeile 310:
 numbers = [3,1,5,4,9,4,8,3,1,2,4,9] numbers = [3,1,5,4,9,4,8,3,1,2,4,9]
 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, z.B. `for index in [1, 6, 7]: print(liste[index])`
 +  * Erst dann Einführung von `range`.
 +++++
 +</nodisp>
  
 ==== Theorie ==== ==== Theorie ====
Zeile 329: 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. Betracht zum Beispiel folgenden Code:+Mit einer for-Schleife können wir unsere Turtle jetzt interessantere Wege ablaufen lassen. Betrachte zum Beispiel folgenden Code:
  
 <code python> <code python>
Zeile 357: 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.
 +
 +<bottom-editor id="spiral" layout="canvas" showswitcher>
 +
 +</bottom-editor>
  
 === 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,20): for m in range(10,20):
-    print(m) +    print(m)</bottom-editor>
-</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 370: 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,101,10): for m in range(0,101,10):
     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 386: Zeile 412:
     element = numbers[index]     element = numbers[index]
     print(index, ":", element)     print(index, ":", element)
-</code>+</bottom-editor>
  
 ==== Aufgaben I ==== ==== Aufgaben I ====
Zeile 398: Zeile 424:
 {{ :gf_informatik_1m_20_21:spiralen_duo.png?250 |}} {{ :gf_informatik_1m_20_21:spiralen_duo.png?250 |}}
  
 +<bottom-exercise id="i1" layout="canvas" showswitcher>
 +<template data-type="starter">
 +from turtle import *
 +</template>
 +<template data-type="solution">
 +from turtle import *
 +
 +t = Turtle()
 +t.speed(0)
 +
 +t.teleport(-75, 50)
 +for side in range(32):
 +    t.forward(side * 4)
 +    t.left(90)
 +
 +t.teleport(75, 50)
 +for side in range(64):
 +    t.forward(side * 2)
 +    t.left(90)
 +</template>
 +</bottom-exercise>
 === Aufgabe I2 === === Aufgabe I2 ===
  
Zeile 404: Zeile 451:
 {{ :gf_informatik_1m_20_21:spirale.png?200 |}} {{ :gf_informatik_1m_20_21:spirale.png?200 |}}
  
 +<bottom-exercise id="i2" layout="canvas" showswitcher>
 +<template data-type="starter">
 +from turtle import *
 +</template>
 +<template data-type="solution">
 +from turtle import *
 +
 +t = Turtle()
 +t.speed(0)
 +
 +for radius in range(16):
 +    t.circle(radius * 5, 180)
 +</template>
 +</bottom-exercise>
 === Aufgabe I3 (optional) === === Aufgabe I3 (optional) ===
  
Zeile 410: Zeile 471:
 {{ :gf_informatik_1m_20_21:spirale_rechteckig.png?250 |}} {{ :gf_informatik_1m_20_21:spirale_rechteckig.png?250 |}}
  
 +<bottom-exercise id="i3" layout="canvas" showswitcher>
 +<template data-type="starter">
 +from turtle import *
 +</template>
 +<template data-type="solution">
 +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)
 +</template>
 +</bottom-exercise>
 === Aufgabe I4 === === Aufgabe I4 ===
-Wandle in `while`-Schleife um: + 
-<code python>+<bottom-exercise id="i4"> 
 +<div part="prompt"> 
 +Wandle in <code>while</code>-Schleife um: 
 +<pre>
 for i in range(4,12): for i in range(4,12):
     print(i)     print(i)
-</code> +</pre
- +</div
-<nodisp 1> +<template data-type="solution">
-++++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>+<bottom-exercise id="i5"> 
 +<div part="prompt"> 
 +Wandle in möglichst kurze <code>for</code>-Schleife (max. 2 Zeilen) um: 
 +<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="solution">
- +
-++++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 `"Bebraham"` in der folgenden Liste. Nutze eine `for ... in range` Schleife, bei der die `range` über die Länge der Liste geht, wie [[#indirekte_for-schleife|hier]] erklärt. 
  
-`['Cebraham', 'Debraham', 'Bebraham''Abraham']`+<bottom-exercise id="i6"> 
 +<div part="prompt"> 
 +<p>Finde den Index (die Position) von <code>"Bebraham"</code> in der folgenden Liste. Nutze eine <code>for ... in range</code> Schleifebei der die <code>range</code> über die Länge der Liste geht.
  
-**Zusatzaufgabe:** Schreibe eine Funktion `suchen(lquery)` die in einer beliebigen Liste `l` nach dem Element `query` sucht und dessen Index zurückgibt!+<pre>['Cebraham''Debraham', 'Bebraham', 'Abraham']</pre>
  
-<nodisp 1+<p><b>Zusatzaufgabe:</b> Schreibe eine Funktion <code>suchen(l, query)</code> die in einer beliebigen Liste <code>l</code> nach dem Element <code>query</code> sucht und dessen Index zurückgibt! 
-++++Lösung| +</div> 
-<code python>+<template data-type="starter"> 
 +names = ['Cebraham', 'Debraham', 'Bebraham', 'Abraham'
 +</template> 
 +<template data-type="test"> 
 +assert "2" in output_lines() 
 +assert suchen(['Cebraham', 'Debraham', 'Bebraham', 'Abraham'], 'Bebraham') == 2 
 +assert suchen("Abrakadabra", "k") == 4 
 +</template> 
 +<template data-type="solution">
 names = ['Cebraham', 'Debraham', 'Bebraham', 'Abraham'] names = ['Cebraham', 'Debraham', 'Bebraham', 'Abraham']
 for index in range(len(names)): for index in range(len(names)):
Zeile 478: Zeile 555:
  
 print(suchen(names, "Bebraham")) print(suchen(names, "Bebraham"))
-</code> +</template
-++++ +</bottom-exercise> 
-</nodisp>+
  
 === Aufgabe I7 === === Aufgabe I7 ===
-**Teil 1**: Schreibe eine Funktion `reihensumme()`, die die Summe aller Zahlen der Siebnerreihe zurückgibt, also $7 + 14 + 21 + \ldots + 63 + 70 = 385$+<bottom-exercise id="i7"> 
-Verwende dazu eine `for zahl in range(...)Schleife.+<div part="prompt"> 
 +<p><b>Teil 1</b>: Schreibe eine Funktion <code>reihensumme()</code>, die die Summe aller Zahlen der Siebnerreihe zurückgibt, also <code>7 + 14 + 21 + &hellip; + 63 + 70 = 385</code>
 +<p>Verwende dazu eine <code>for zahl in range(...)</code> Schleife.
    
-**Teil 2**: Ändere die Funktion so, dass der Teiler über ein Funktionsargument gewählt werden kann. +<p><b>Teil 2</b>: Ändere die Funktion so, dass der Teiler über ein Funktionsargument gewählt werden kann. 
-Der Aufruf `reihensumme(5)soll beispielsweise die Summe der Fünferreihe von 5 bis 50 berechnen und 275 zurückgeben. +Der Aufruf <code>reihensumme(5)</code> soll beispielsweise die Summe der Fünferreihe von 5 bis 50 berechnen und 275 zurückgeben. 
 Der Aufruf ohne Argument soll weiterhin die Siebnerreihe addieren. Der Aufruf ohne Argument soll weiterhin die Siebnerreihe addieren.
- +</div> 
-<nodisp 1+<template data-type="starter"
-++++Lösung| +def reihensumme(): 
-<code python>+    """Gibt die Summe der Siebnerreihe zurück.""" 
 +</template> 
 +<template data-type="test"> 
 +assert reihensumme() == 385, "Teil 1: Reihensumme soll 385 zurückgeben" 
 +assert reihensumme(5) == 275, "Teil 2: reihensumme(5) soll 275 zurückgeben" 
 +</template> 
 +<template data-type="solution">
 def reihensumme(n=7): def reihensumme(n=7):
     """Berechnet die Summe der n-er-Reihe."""     """Berechnet die Summe der n-er-Reihe."""
Zeile 502: 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 `reverse(liste)`, die eine neue Liste erstellt und die Elemente von `listein umgekehrter Reihenfolge darin abspeichert und die umgekehrte Liste zurückgibt. Die eingebauten Funktionen `reverseund `reverseddürfen nicht benützt werden - verwende stattdessen eine [[#schrittweite|negative Schrittweite]] für `range`+<bottom-exercise id="i8"> 
- +<div part="prompt"> 
-<nodisp 1+<p>Schreibe eine Funktion <code>umdrehen(liste)</code>, die eine neue Liste erstellt und die Elemente von <code>liste</code> in umgekehrter Reihenfolge darin abspeichert und die umgekehrte Liste zurückgibt. Die eingebauten Funktionen <code>reverse</code> und <code>reversed</code> dürfen nicht benützt werden - verwende stattdessen eine negative Schrittweite für <code>range</code>
-++++Lösung| +</div> 
-<code python+<template data-type="starter"
-def reverse(liste):+def umdrehen(liste): 
 +    """Gibt eine neue Liste mit den gleichen Elementen, aber in umgekehrter Reihenfolge zurück.""" 
 +</template> 
 +<template data-type="test"> 
 +assert umdrehen(['Cebraham', 'Debraham', 'Bebraham', 'Abraham']) == ['Abraham', 'Bebraham', 'Debraham', 'Cebraham'
 +</template> 
 +<template data-type="solution"
 +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 523: Zeile 615:
  
 names = ['Cebraham', 'Debraham', 'Bebraham', 'Abraham'] names = ['Cebraham', 'Debraham', 'Bebraham', 'Abraham']
-print(reverse(names))</code> +print(umdrehen(names))</code> 
-++++ +</template> 
-</nodisp>+</bottom-exercise> 
  • gf_informatik/programmieren_iii.1777471122.txt.gz
  • Zuletzt geändert: 2026-04-29 13:58
  • von hof