Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Last revision Both sides next revision | ||
lehrkraefte:blc:informatik:glf20:programmieren:listen2kw [2020/11/03 08:52] Ivo Blöchliger |
lehrkraefte:blc:informatik:glf20:programmieren:listen2kw [2020/11/18 20:51] Ivo Blöchliger [Geldautomat] |
||
---|---|---|---|
Line 17: | Line 17: | ||
<WRAP info> | <WRAP info> | ||
- | Typischerweise werden die Elemente einer Liste in einem for-loop verarbeitet, wie in den folgenden Beispielen: | + | Die wichtigsten Dinge für Arrays zusammengefasst: |
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | </ | ||
+ | |||
+ | <WRAP todo> | ||
+ | Typischerweise werden die Elemente einer Liste in einem for-loop verarbeitet. Testen und verstehen Sie folgende Beispiele: | ||
<code python> | <code python> | ||
namen = [" | namen = [" | ||
Line 40: | Line 48: | ||
- | < | + | < |
- | Die Erzeugung von Arrays kann ebenfalls in einem for-loop stattfinden: | + | Die Erzeugung von Arrays kann ebenfalls in einem for-loop stattfinden. Testen und verstehen Sie folgende Beispiele: |
<code python> | <code python> | ||
quadrate = [] # Leere Liste | quadrate = [] # Leere Liste | ||
Line 51: | Line 59: | ||
</ | </ | ||
+ | Ist die Initialisierung sehr einfach (d.h. das Element kann in einem Ausdruck aus dem Index berechnet werden), kann diese auch in einer Zeile in der folgenden Form geschrieben werden: | ||
+ | <code python> | ||
+ | quadrate = [i*i for i in range(10)] | ||
+ | print(quadrate) | ||
+ | </ | ||
</ | </ | ||
+ | |||
+ | ===== Geldautomat ===== | ||
+ | Ziel ist es ein Programm zu schreiben, das beliebige Beträge (erst mal nur in Noten) auszahlen kann. | ||
+ | |||
+ | Die grundlegende Idee ist, immer die grösstmögliche Note so oft wie möglich auszuzahlen und sich dann um den Rest zu kümmern. | ||
+ | <WRAP todo> | ||
+ | Testen und Verstehen Sie folgenden Code: | ||
+ | <code python> | ||
+ | betrag = 480 # oder | ||
+ | |||
+ | if betrag> | ||
+ | anzahl = int(betrag/ | ||
+ | print(" | ||
+ | betrag -= 200*anzahl | ||
+ | | ||
+ | if betrag> | ||
+ | anzahl = int(betrag/ | ||
+ | print(" | ||
+ | betrag -= 100*anzahl | ||
+ | | ||
+ | if betrag> | ||
+ | anzahl = int(betrag/ | ||
+ | print(" | ||
+ | betrag -= 50*anzahl | ||
+ | | ||
+ | if betrag> | ||
+ | anzahl = int(betrag/ | ||
+ | print(" | ||
+ | betrag -= 20*anzahl | ||
+ | | ||
+ | if betrag> | ||
+ | anzahl = int(betrag/ | ||
+ | print(" | ||
+ | betrag -= 10*anzahl | ||
+ | | ||
+ | if betrag> | ||
+ | print(" | ||
+ | | ||
+ | </ | ||
+ | Was ins Auge sticht sind die wiederholten Code-Abschnitte. Das sollte wenn möglich vermieden werden, aus verschiedenen Gründen: | ||
+ | * Mühsam zu tippen. | ||
+ | * Anfälligkeit für Tippfehler (nur ein Fall funktioniert nicht, was schwerer feststellbar ist) | ||
+ | * Unübersichtlichkeit | ||
+ | Darum soll der Code wie folgt neu geschrieben werden: | ||
+ | <code python> | ||
+ | betrag = 480 # oder | ||
+ | noten = [200, | ||
+ | for note in noten: | ||
+ | # | ||
+ | # TODO: Nur noch ein einziges if... | ||
+ | # | ||
+ | if betrag> | ||
+ | print(" | ||
+ | </ | ||
+ | Erweitern Sie den Code nun so, dass auch Münzen ausbezahlt werden. | ||
+ | </ | ||
+ | |||
+ | ===== Array-Rätsel (Zusatzaufgabe) ===== | ||
+ | Geben ist folgendes Array: | ||
+ | <code python array.py> | ||
+ | a = [58, 64, 2, 79, 92, 46, 80, 54, 50, 86, 72, 50, 84, 37, 76, 84, 14, 60, 99, 65, 66, 47, 28, 48, 38, 51, 17, 51, 6, 73, 20, 5, 83, 15, 43, 76, 93, 53, 65, 15, 91, 64, 86, 1, 63, 82, 96, 96, 35, 62, 37, 55, 51, 39, 96, 5, 24, 31, 23, 45, 75, 100, 81, 57, 67, 1, 55, 21, 80, 77, 89, 13, 75, 7, 49, 28, 31, 30, 41, 1, 57, 58, 75, 42, 14, 47, 64, 59, 9, 95, 59, 68, 74, 60, 99, 93, 39, 38, 65, 24] | ||
+ | </ | ||
+ | Gesucht sind folgende Dinge (wenn es mehrere Lösungen geben sollte, ist immer nur die erste auszugeben) | ||
+ | * Position und Wert des kleinsten und grössten Elements | ||
+ | * Position und Länge der längsten Sequenz strikt aufsteigender Zahlen | ||
+ | * Position und Länge der längsten Sequenz ungerader Zahlen | ||
+ | < | ||
+ | Minimum 1 bei Index 43 | ||
+ | Maximum 100 bei Index 61 | ||
+ | Aufsteigende Sequenz mit Länge 4, Start bei 33, Sequenz [15, 43, 76, 93] | ||
+ | Ungerade Sequenz mit Länge 6, Start bei 62, Sequenz [81, 57, 67, 1, 55, 21] | ||
+ | </ | ||
+ | |||
+ | <hidden Lösungsvorschläge> | ||
+ | <code python arraysuche.py> | ||
+ | a = [58, 64, 2, 79, 92, 46, 80, 54, 50, 86, 72, 50, 84, 37, 76, 84, 14, 60, 99, 65, 66, 47, 28, 48, 38, 51, 17, 51, 6, 73, 20, 5, 83, 15, 43, 76, 93, 53, 65, 15, 91, 64, 86, 1, 63, 82, 96, 96, 35, 62, 37, 55, 51, 39, 96, 5, 24, 31, 23, 45, 75, 100, 81, 57, 67, 1, 55, 21, 80, 77, 89, 13, 75, 7, 49, 28, 31, 30, 41, 1, 57, 58, 75, 42, 14, 47, 64, 59, 9, 95, 59, 68, 74, 60, 99, 93, 39, 38, 65, 24] | ||
+ | |||
+ | minimum = a[0] # Kleinster Wert | ||
+ | minpos=0 | ||
+ | maximum = a[0] # Grösster Wert | ||
+ | maxpos=0 | ||
+ | |||
+ | maxlen = 1 # Maximale Länge aufsteigender Sequenz | ||
+ | inclen = 1 # Aktuelle Länge der Sequenz | ||
+ | incpos = 0 # Startposition der längsten Sequenz | ||
+ | |||
+ | oddlen = 0 # Aktuelle Länge ungerader Sequenz | ||
+ | oddpos = 0 # Startposition der längsten Sequenz | ||
+ | maxodd = 0 # Maximale Länge der Sequenz, die bis jetzt gefunden wurde. | ||
+ | |||
+ | for i in range(len(a)): | ||
+ | if a[i]< | ||
+ | minimum=a[i] | ||
+ | minpos = i | ||
+ | if a[i]> | ||
+ | maximum=a[i] | ||
+ | maxpos = i | ||
+ | if i>0 and a[i]> | ||
+ | inclen+=1 | ||
+ | if (inclen> | ||
+ | maxlen=inclen | ||
+ | incpos = i-maxlen+1 | ||
+ | else: | ||
+ | inclen=1 | ||
+ | | ||
+ | if a[i]%2==1: | ||
+ | oddlen+=1 | ||
+ | if oddlen> | ||
+ | maxodd=oddlen | ||
+ | oddpos = i-maxodd+1 | ||
+ | else: # Gerade | ||
+ | oddlen=0 | ||
+ | | ||
+ | print(" | ||
+ | print(" | ||
+ | print(" | ||
+ | print(" | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ |