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

This is an old revision of the document!


Wiederholungen mit for-loops

Testen und verstehen Sie folgendes Programm (auch mit Hilfe der Erklärungen 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.

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.

Die Summe der ersten $n$ Zahlen werden auch Dreieckszahlen genannt, weil damit mit Kugeln ein Dreieck legen 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:

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

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

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

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))
zeile = " * |"  
for i in range(1,11):
   zeile = zeile + "%4d" % i
print(zeile)
print("-"*44)
for i in range(1,11):
    zeile = "%2d |"%i
    for j in range(1,11):
        zeile = zeile + "%4d" % (i*j)
    print(zeile)
  • lehrkraefte/blc/informatik/glf20/programmieren/for-loops.1600239878.txt.gz
  • Last modified: 2020/09/16 09:04
  • by Ivo Blöchliger