lehrkraefte:blc:informatik:glf20:programmieren:for-loops

Wiederholungen mit for-loops

Testen und verstehen Sie folgendes Programm (auch mit Hilfe der Erklärungen in den folgenden beiden Info-Boxen unten).

for i in range(20):
    print("%2d im Quadrat ist %3d" % (i, i*i))
print("fertig")

Struktur eines for-loops:

  • Doppelpunkt am Ende der Zeile mit dem for
  • Der Code, der wiederholt wird, wird eingerückt.
  • range(n) heisst von 0 bis n-1
  • Die Laufvariable (im obigen Beispiel i) nimmt bei jedem Durchgang den nächsten Wert an.

Der range-Befehl kann noch weitere Parameter übernehmen, um mehr Flexibilität über die Laufvariable zu erhalten:

  • range(10,20) läuft von 10 bis und mit 19.
  • range(5,15,2) läuft von 5 bis und mit 13 in 2er-Schritten (d.h. 5,7,9,11,13).
  • range(10,0,-1) läuft rückwärts von 10 bis 1

Die Grössen müssen immer Ganzzahlen sein. Die obere Grenze ist immer ausgeschlossen.

Stand der Aufgabe: 20. September 2020

Schreiben Sie ein Programm, das die Neuansteckungen mit Corona simuliert mit einer wöchentlichen Zunahme um 15%. Die Ausgabe soll z.B. wie folgt aussehen:

Aktuelle Zahl 500, wöchentliche Zunahme 15%
Woche  0:  500
Woche  1:  575
Woche  2:  661
Woche  3:  760
Woche  4:  874
Woche  5: 1005
Woche  6: 1156
Woche  7: 1330
Woche  8: 1529
Woche  9: 1758
Woche 10: 2022
Woche 11: 2326
Woche 12: 2675

Programmieren Sie Ihr Programm so, dass die akutelle Zahl und die Zuwachsrate am Anfang des Programm als Variablen definiert werden.

Hinweis: Die aktuellen Zahlen können nicht direkt mit den Zahlen vom März verglichen werden, da zur Zeit viel mehr getestet wird und die Positivrate sehr viel kleiner ist. D.h. die Dunkelziffer war im März sehr viel höher als zur Zeit.

🎞▶️ Erklärvideo und auch auf Stream

Hinweis vom 22. Oktober 2020: Aktuell ist die Positivrate wieder so schlecht wie im März (bei ca. 20%), die Neuansteckungen sind aber viel höher, mit einer Zuwachsrate von ca. 120% pro Woche. Im Moment sind die Hospitalisationen noch tief, die wachsen aber mit der gleichen Zuwachsrate an, und werden das auch noch 2-3 Wochen nach dem Ergreifen von drastischen Massnahmen tun.

Die Summe der ersten $n$ Zahlen ergibt jeweils eine Dreieckszahl. Der Name kommt daher, dass mit dieser Anzahl Kugeln jeweils ein gleichseitiges Dreieck gelegt werden kann. Diese Zahlen können wie folgt berechnet und ausgegeben werden:

summe = 0
for n in range(11):
    summe = summe + n
    print("Dreieckszahl %2d ist %3d" % (n,summe))

Mit diesen Kugeldreiecken lassen sich Pyramiden bauen (genauer Tetraeder). Wie viele Kugeln hat die Pyramide mit Seitenlänge 10? Schreiben Sie ein Programm, dass alle Tetraeder-Zahlen ausgibt.

Schreiben Sie ein Programm, das die Anzahl Zeilen einliest, und dann ein folgendes Dreieck (mit dieser Anzahl Zeilen) produziert, hier 5:

    *
   ***
  *****
 *******
*********

🎞▶️ Erklärvideo auch auf Stream.

Zusatz-Aufgabe

Zusatz-Aufgabe

Produzieren Sie folgenden Output (hier ein Beispiel für 8 Zeilen):

       ^
      /v\
     /vvv\
    /vvvvv\
   /vvvvvvv\
  /vvvvvvvvv\
 /vvvvvvvvvvv\
/vvvvvvvvvvvvv\
      |||
      |||
      |||

Hinweise: Der Backslash wird mit “\\” geschrieben (weil der Backslash ist speziell, z.B. für \n aber auch z.B. für \“, ein Anführungszeichen im String).

Man kann for-loops verschachteln, der Code wird dann entsprechend weiter eingerückt.

Testen und verstehen Sie folgenden Code:

for x in range(3):
    for y in range(5):
        print("x=%d, y=%d" % (x,y))
    print("---")

Beachten Sie genau die Einrückung!

Manchmal ist es unumgänglich, einen String (Zeichenkette) stückweise aufzubauen, z.B. wie folgt:

zeile = ""                   # Leerer String zum Anfangen
for i in range(1,11):
  zeile = zeile + "%3d" % i  # Hinten zum String hinzufügen. ACHTUNG: % ist eine Punktoperation und wird vor dem + ausgeführt.
print(zeile)                 # Danach ausgeben

HINWEIS: Diese Aufgabe ist anspruchsvoll ich erwarte nur von wenigen, diese ganz selbständig lösen zu können.

Schreiben Sie ein Program, das eine Multiplikationstabelle wie folgt ausgibt (und einfach auf den Bereich bis 20 ausgedehnt werden könnte):

 * |   1   2   3   4   5   6   7   8   9  10
--------------------------------------------
 1 |   1   2   3   4   5   6   7   8   9  10
 2 |   2   4   6   8  10  12  14  16  18  20
 3 |   3   6   9  12  15  18  21  24  27  30
 4 |   4   8  12  16  20  24  28  32  36  40
 5 |   5  10  15  20  25  30  35  40  45  50
 6 |   6  12  18  24  30  36  42  48  54  60
 7 |   7  14  21  28  35  42  49  56  63  70
 8 |   8  16  24  32  40  48  56  64  72  80
 9 |   9  18  27  36  45  54  63  72  81  90
10 |  10  20  30  40  50  60  70  80  90 100

🎞▶️ Erklärvideo und auch auf Stream

Zusatzaufgabe

Zusatzaufgabe

Generieren Sie die Tabelle als HTML-Code, den Sie dann im Browser betrachten können.

  • Tabellen in HTML-Code: W3Schools, english oder SelfHtml, deutsch
  • Speichern Sie den erzeugten HTML-Code in einer Datei mit der Endung .html
  • Alternativ können Sie den ganzen Code als String in eine Variable speichern, z.B. htmlcode und diesen dann wie folgt in eine Datei schreiben:
# hier den ganzen Code in der Variablen htmlcode aufbauen
with open("tabelle.html", "w") as datei:  # Die Datei wird im gleichen Ordner gespeichert, wo ihr Programm gespeichert ist.
    datei.write(htmlcode)

Lösungsvorschläge

Lösungvorschläge

Lösungvorschläge

zuwachs = 15
aktuell = 500

print("Aktuelle Zahl %d, wöchentliche Zunahme %d%%" % (aktuell, zuwachs))
for i in range(13):
    print("Woche %2d: %4d" % (i, aktuell*(1+zuwachs/100)**i))
n = inputInt("Wie viele Stockwerke?")
for i in range(n):
    print(" "*(n-i-1)+"*"*(2*i+1))
n = inputInt("Wie viele Stockwerke?")
print(" "*(n-1)+"^")
for i in range(1,n):
    print(" "*(n-i-1)+"/"+"v"*(2*i-1)+"\\")
print((" "*(n-2)+"|||\n")*3)
summe = 0
volumen = 0
for n in range(11):
    summe = summe + n
    volumen = volumen + summe
    print("Tetraederzahl %2d ist %3d" % (n,volumen))
n=10
zeile = " * |"  
for i in range(1,n+1):
   zeile = zeile + "%4d" % i
print(zeile)
print("-"*(4*(n+1)))
for i in range(1,n+1):
    zeile = "%2d |"%i
    for j in range(1,n+1):
        zeile = zeile + "%4d" % (i*j)
    print(zeile)
  • lehrkraefte/blc/informatik/glf20/programmieren/for-loops.txt
  • Last modified: 2020/10/22 08:28
  • by Ivo Blöchliger