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 [2025-01-24 13:45] – [Aufgabe I6] hofgf_informatik:programmieren_iii [2026-02-10 08:12] (aktuell) hof
Zeile 1: Zeile 1:
 ====== Programmieren III: Listen, for-Schleifen ====== ====== Programmieren III: Listen, for-Schleifen ======
 +<html><script type="module" src="https://bottom.ch/ksr/ed/bottom-editor.js"></script></html>
  
 ===== Listen ===== ===== Listen =====
Zeile 18: Zeile 19:
 |Element| `'a'` | `'b'` | `'c'` | `'d'` | `'e'` | |Element| `'a'` | `'b'` | `'c'` | `'d'` | `'e'` |
  
-Beachte, dass das erste Element den **Index 0** hat!+Beachte, dass das erste Element den **Index 0** hat((Warum beginnt die Nummerierung bei 0? [[wp>Zero-based_numbering]] und [[https://www.cs.utexas.edu/~EWD/transcriptions/EWD08xx/EWD831.html|Edsger W. Dijkstra]] geben ein paar Anhaltspunkte.))!
  
 ==== Selektion und Modifikation ==== ==== Selektion und Modifikation ====
Zeile 46: Zeile 47:
  
 Oft möchte man durch alle Elemente einer Liste **durchgehen** und etwas mit diesen machen, z.B. sie in die Konsole printen: Oft möchte man durch alle Elemente einer Liste **durchgehen** und etwas mit diesen machen, z.B. sie in die Konsole printen:
-<code python>+<html><bottom-editor>
 alphabet = ['a','b','c','d','e'] alphabet = ['a','b','c','d','e']
 i = 0                     # Startindex, 0, weil wir zuerst das vorderste Element (hier 'a') auslesen möchten i = 0                     # Startindex, 0, weil wir zuerst das vorderste Element (hier 'a') auslesen möchten
Zeile 52: Zeile 53:
     print(alphabet[i])    # lese Element aus Liste aus, alphabet[i], und printe dieses     print(alphabet[i])    # lese Element aus Liste aus, alphabet[i], und printe dieses
     i = i + 1             # erhöhe Index     i = i + 1             # erhöhe Index
-</code>+</bottom-editor></html> 
 In der Bedingung `i < len(alphabet)` ermitteln wir mit len(alphabet) die Länge der Liste. Wichtig ist auch, dass der Index `i` *kleiner* (und nicht kleiner gleich) ist als diese Länge, da sonst versucht wird, auf Element zuzugreifen, welches nicht existiert. In der Bedingung `i < len(alphabet)` ermitteln wir mit len(alphabet) die Länge der Liste. Wichtig ist auch, dass der Index `i` *kleiner* (und nicht kleiner gleich) ist als diese Länge, da sonst versucht wird, auf Element zuzugreifen, welches nicht existiert.
  
 Noch etwas eleganter geht dasselbe mit einer `for`-Schleife (mehr dazu im nächsten Kapitel). Dabei wird die Schleifen-Variable (im Beispiel `e`) in jedem Durchgang der Schleife auf das nächste Element der Liste gesetzt. Noch etwas eleganter geht dasselbe mit einer `for`-Schleife (mehr dazu im nächsten Kapitel). Dabei wird die Schleifen-Variable (im Beispiel `e`) in jedem Durchgang der Schleife auf das nächste Element der Liste gesetzt.
-<code python+<html><bottom-editor> 
-for e in L:+alphabet = ['a','b','c','d','e'] 
 +for e in alphabet:
     print(e)     print(e)
-</code>+</bottom-editor></html>
  
 Mit folgendem Code überprüft man, ob ein Element in einer Liste steht: Mit folgendem Code überprüft man, ob ein Element in einer Liste steht:
-<code python>+<html><bottom-editor>
 if 'b' in ['a','c','e','g']: if 'b' in ['a','c','e','g']:
     print('kommt in Liste vor')     print('kommt in Liste vor')
 else: else:
     print('kommt nicht in Liste vor')     print('kommt nicht in Liste vor')
-</code>+</bottom-editor></html>
  
 ==== Aufgaben H ==== ==== Aufgaben H ====
Zeile 81: Zeile 84:
 <nodisp 1> <nodisp 1>
 ++++Lösung:| ++++Lösung:|
-<code python>+<html><bottom-editor>
 alphabet = ["B","C","X","D","Z","F","G","I","J"] alphabet = ["B","C","X","D","Z","F","G","I","J"]
  
Zeile 91: Zeile 94:
  
 print(alphabet) print(alphabet)
-</code>+</bottom-editor></html>
 ++++ ++++
 </nodisp> </nodisp>
Zeile 108: Zeile 111:
 <nodisp 1> <nodisp 1>
 ++++Lösung:| ++++Lösung:|
-<code python>+<html><bottom-editor>
 likeable_football_clubs = ["bvb", "liverpool", "st. gallen", "bayern", "freiburg", "breitenrain"] likeable_football_clubs = ["bvb", "liverpool", "st. gallen", "bayern", "freiburg", "breitenrain"]
  
Zeile 122: Zeile 125:
 likeable_football_clubs.append("winterthur") likeable_football_clubs.append("winterthur")
 print(likeable_football_clubs) print(likeable_football_clubs)
-</code>+</bottom-editor></html>
 ++++ ++++
 </nodisp> </nodisp>
Zeile 136: Zeile 139:
 <nodisp 1> <nodisp 1>
 ++++Lösung:| ++++Lösung:|
-<code python>+<html><bottom-editor>
 numbers = [68, 71, 53, 34, 66, 55, 80, 93, 24, 49, 68, 73, 9, 8, 93, 22, 44, 11, 82] numbers = [68, 71, 53, 34, 66, 55, 80, 93, 24, 49, 68, 73, 9, 8, 93, 22, 44, 11, 82]
  
Zeile 157: Zeile 160:
     i = i + 2     i = i + 2
 print(summe3) print(summe3)
-</code>+</bottom-editor></html>
 ++++ ++++
 </nodisp> </nodisp>
 +
 === Aufgabe H4 === === Aufgabe H4 ===
  
Zeile 182: Zeile 186:
 <nodisp 1> <nodisp 1>
 ++++Lösung:| ++++Lösung:|
-<code python>+<html><bottom-editor>
 def liste_anzahl(liste, x): def liste_anzahl(liste, x):
     count = 0     count = 0
Zeile 205: Zeile 209:
  
 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_anzahl(numbers, 3)) +suche = 3 
-print(liste_max(numbers)) +print(f'{suche} kommt {liste_anzahl(numbers, suche)} Mal in der Liste vor.'
-print(liste_min(numbers)) +print(f'{liste_max(numbers)} ist das Maximum der Liste.'
-</code>+print(f'{liste_min(numbers)} ist das Minimum der Liste.'
 +</bottom-editor></html>
 ++++ ++++
 </nodisp> </nodisp>
Zeile 218: Zeile 223:
 <nodisp 1> <nodisp 1>
 ++++Lösung:| ++++Lösung:|
-<code python>+<html><bottom-editor>
 def mittelwert(numbers): def mittelwert(numbers):
     summe = 0     summe = 0
Zeile 225: Zeile 230:
     return summe / len(numbers)     return summe / len(numbers)
  
-print("Der Mittelwert ist " + str(mittelwert([3.8, 4.2, 5.7, 4.8]))+print(f'Der Mittelwert ist {mittelwert([3.8, 4.2, 5.7, 4.8])}'
-</code>+</bottom-editor></html> 
 ++++ ++++
 </nodisp> </nodisp>
Zeile 233: Zeile 239:
  
 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. 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>
 +++++Lösung:|
 +<html><bottom-editor>
 +def liste_anzahl(liste, x):
 +    count = 0
 +    for elem in liste:
 +        if elem == x:
 +            count = count + 1
 +    return count
 +
 +def liste_haeufigste(liste):
 +    max_anzahl = 0    # die Häufigkeit des bisherigen Siegers
 +    sieger = []       # die bisherigen Sieger
 +    for element in liste:
 +        anzahl = liste_anzahl(liste, element)
 +        if anzahl > max_anzahl:
 +            # Neuer Sieger
 +            max_anzahl = anzahl
 +            sieger = [element]
 +        elif anzahl == max_anzahl and element not in sieger:
 +            # Gleich häufig wie bisheriger Sieger
 +            sieger.append(element)
 +    return sieger, max_anzahl
 +
 +numbers = [3,1,5,4,9,4,8,3,1,2,4,9]
 +print(liste_haeufigste(numbers))
 +</bottom-editor></html>
 +++++
 +</nodisp>
  
  
Zeile 315: Zeile 351:
 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`.
  
-#### Positionen einer Liste aufzählen+#### 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:
  
Zeile 332: Zeile 368:
 === Aufgabe I1 === === Aufgabe I1 ===
  
-Du hast hoffentlich herausgefunden, wie man in einer quadratischen Spirale die Abstände zwischen den Linien kleiner und grösser machen kann. Zeichne nun in eine Figur zwei solche Spiralen ähnlich wie im Bild. Zeichne dazu mit einer for-Schleife die eine. Versetze dann die Position deiner Turtle mit `setxund `sety` (oder `setpos`) und zeichne die Zweite Spirale mit einer neuen for-Schleife.+Du hast hoffentlich herausgefunden, wie man in einer quadratischen Spirale die Abstände zwischen den Linien kleiner und grösser machen kann. Zeichne nun in eine Figur zwei solche Spiralen ähnlich wie im Bild. Zeichne dazu mit einer for-Schleife die eine. Versetze dann die Position deiner Turtle mit `teleport` und zeichne die zweite Spirale mit einer neuen for-Schleife.
  
 {{ :gf_informatik_1m_20_21:spiralen_duo.png?250 |}} {{ :gf_informatik_1m_20_21:spiralen_duo.png?250 |}}
Zeile 338: Zeile 374:
 === Aufgabe I2 === === Aufgabe I2 ===
  
-Verwende eine *for-Schleife* und die `rightArc`-Funktion um eine Spirale zu erzeugen, ähnlich wie diejenige im Bild. +Verwende eine *for-Schleife* und die `circle`-Funktion um eine Spirale zu erzeugen, ähnlich wie diejenige im Bild. 
  
 {{ :gf_informatik_1m_20_21:spirale.png?200 |}} {{ :gf_informatik_1m_20_21:spirale.png?200 |}}
Zeile 352: Zeile 388:
 <code python> <code python>
 for i in range(4,12): for i in range(4,12):
- print(i)+    print(i)
 </code> </code>
  
-<nodisp 2>+<nodisp 1>
 ++++Lösung:| ++++Lösung:|
 <code python> <code python>
Zeile 374: Zeile 410:
 </code> </code>
  
-<nodisp 2>+<nodisp 1> 
 ++++Lösung| ++++Lösung|
 <code python> <code python>
Zeile 394: Zeile 431:
  
 === 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 [[#positionen_einer_liste_aufzaehlen|hier]] erklärt.+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']` `['Cebraham', 'Debraham', 'Bebraham', 'Abraham']`
  
-<nodisp 2>+**Zusatzaufgabe:** Schreibe eine Funktion `suchen(l, query)` die in einer beliebigen Liste `l` nach dem Element `query` sucht und dessen Index zurückgibt! 
 + 
 +<nodisp 1>
 ++++Lösung| ++++Lösung|
 <code python> <code python>
Zeile 405: Zeile 444:
     if names[index] == 'Bebraham':     if names[index] == 'Bebraham':
         print(index)         print(index)
 +
 +# Als Funktion:
 +def suchen(l, query):
 +    for index in range(len(l)):
 +        if l[index] == query:
 +            return index
 +
 +print(suchen(names, "Bebraham"))
 </code> </code>
 ++++ ++++
Zeile 414: Zeile 461:
    
 **Teil 2**: Ändere die Funktion so, dass der Teiler über ein Funktionsargument gewählt werden kann. **Teil 2**: Ä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 `reihensumme(5)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.
  
-<nodisp 2>+<nodisp 1>
 ++++Lösung| ++++Lösung|
 <code python> <code python>
Zeile 433: Zeile 480:
 </nodisp> </nodisp>
  
 +=== Aufgabe I8 ===
 +**Teil 1**: Schreibe eine Funktion `reverse(liste)`, die eine neue Liste erstellt und die Elemente von `liste` in umgekehrter Reihenfolge darin abspeichert und die umgekehrte Liste zurückgibt. Die eingebauten Funktionen `reverse` und `reversed` dürfen nicht benützt werden - verwende stattdessen eine [[#schrittweite|negative Schrittweite]] für `range`.
  
 +<nodisp 1>
 +++++Lösung|
 +<code python>
 +def reverse(liste):
 +    result = []
 +    # range erzeugt eine Zahlenfolge n, n-1, ... 3, 2, 1, 0:
 +    #       Beginne mit dem letzten Index (len(liste) - 1)
 +    #       Der letzte Index ist 0, das exklusive Ende damit -1
 +    #       Die Schrittweite ist -1 (wir zählen ja rückwärts)
 +    for index in range(len(liste) - 1, -1, -1):
 +        result.append(liste[index])
 +    return result
 +
 +names = ['Cebraham', 'Debraham', 'Bebraham', 'Abraham']
 +print(reverse(names))</code>
 +++++
 +</nodisp>
  • gf_informatik/programmieren_iii.1737726347.txt.gz
  • Zuletzt geändert: 2025-01-24 13:45
  • von hof