lehrkraefte:blc:informatik:glf20:programmieren:listen2kw

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:blc:informatik:glf20:programmieren:listen2kw [2020/11/03 08:53]
Ivo Blöchliger
lehrkraefte:blc:informatik:glf20:programmieren:listen2kw [2020/11/19 08:47] (current)
Ivo Blöchliger
Line 12: Line 12:
  
 anzahl = len(namen) anzahl = len(namen)
-print("name hat %d Elemente" % anzahl)+print("namen hat %d Elemente" % anzahl)
 </code> </code>
 </WRAP> </WRAP>
  
 <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: 
 +  * ''a=[wert1, wert2,...]''  # Initialisierung mit gegebenen Werten (Zahlen, Strings oder sogar weitere Listen) 
 +  * ''a[3]''          # Zugriff auf das **vierte** Element. Das erste Element ist ''a[0]''
 +  * ''len(a)''        # Anzahl Elemente in einer Liste 
 +  * ''a.append(42)''  # Neues Element hinten anhängen und die Liste damit verlängern. 
 +</WRAP> 
 + 
 +<WRAP todo> 
 +Typischerweise werden die Elemente einer Liste in einem for-loop verarbeitet. Testen und verstehen Sie folgende Beispiele:
 <code python> <code python>
 namen = ["Null", "Eins", "Zwei"] namen = ["Null", "Eins", "Zwei"]
 for i in range(len(namen)): for i in range(len(namen)):
-  print("name[%d] = %s" % (i,name[i]))+  print("namen[%d] = %s" % (i,namen[i]))
 </code> </code>
  
Line 40: Line 48:
  
  
-<WRAP info+<WRAP todo
-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 57: Line 65:
 </code> </code>
 </WRAP> </WRAP>
 +
 +===== 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   betrag=inputInt("Bitte Betrag eingeben")
 +
 +if betrag>=200:
 +    anzahl = int(betrag/200)
 +    print("%d 200er Noten" % anzahl)
 +    betrag -= 200*anzahl
 +    
 +if betrag>=100:
 +    anzahl = int(betrag/100)
 +    print("%d 100er Noten" % anzahl)
 +    betrag -= 100*anzahl
 +    
 +if betrag>=50:
 +    anzahl = int(betrag/50)
 +    print("%d 50er Noten" % anzahl)
 +    betrag -= 50*anzahl
 +    
 +if betrag>=20:
 +    anzahl = int(betrag/20)
 +    print("%d 20er Noten" % anzahl)
 +    betrag -= 20*anzahl
 +    
 +if betrag>=10:
 +    anzahl = int(betrag/10)
 +    print("%d 10er Noten" % anzahl)
 +    betrag -= 10*anzahl
 +    
 +if betrag>0:
 +    print("Es ist noch ein Betrag von %d übrig" % betrag)
 +    
 +</code>
 +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   betrag=inputInt("Bitte Betrag eingeben")
 +noten = [200,100,50,20,10]
 +for note in noten:
 +  #
 +  # TODO: Nur noch ein einziges if...
 +  #
 +if betrag>0:
 +    print("Es ist noch ein Betrag von %d übrig" % betrag)
 +</code>
 +Erweitern Sie den Code nun so, dass auch Münzen ausbezahlt werden.
 +</WRAP>
 +
 +===== 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]
 +</code>
 +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
 +<code>
 +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]
 +</code>
 +
 +<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        # Index vom kleinstem Wert
 +maximum = a[0]  # Grösster Wert
 +maxpos=0        # Index vom grössten Wert
 +
 +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:  # kleineres Element?
 +        minimum=a[i]
 +        minpos = i
 +    if a[i]>maximum:  # grösseres Element?
 +        maximum=a[i]
 +        maxpos = i
 +    if i>0 and a[i]>a[i-1]:  # Aufsteigend?
 +        inclen+=1
 +        if (inclen>maxlen):  # Besser als bereits gefunden?
 +            maxlen=inclen
 +            incpos = i-maxlen+1
 +    else:
 +        inclen=1       # Nicht aufsteigend, Beginn neuer Sequenz
 +    
 +    if a[i]%2==1:      # Ungerade?
 +        oddlen+=1
 +        if oddlen>maxodd:
 +            maxodd=oddlen
 +            oddpos = i-maxodd+1
 +    else:              # Gerade
 +        oddlen=0
 +        
 +print("Minimum %d bei Index %d" % (minimum, minpos))
 +print("Maximum %d bei Index %d" % (maximum, maxpos))
 +print("Aufsteigende Sequenz mit Länge %d, Start bei %d, Sequenz %s" % (maxlen, incpos, str(a[incpos:(incpos+maxlen)])))
 +print("Ungerade Sequenz mit Länge %d, Start bei %d, Sequenz %s" % (maxodd, oddpos, str(a[oddpos:(oddpos+maxodd)])))
 +
 +</code>
 +</hidden>
 +
 +
  • lehrkraefte/blc/informatik/glf20/programmieren/listen2kw.1604390036.txt.gz
  • Last modified: 2020/11/03 08:53
  • by Ivo Blöchliger