lehrkraefte:snr:informatik:python:loops

for-Schleifen (englisch: for loops) über Zahlbereiche

Schleifen werden verwendet, wenn ein Programmteil mehrfach ausgeführt werden soll.

Teste und verstehe das folgende Programm.

for i in range(0, 15):
    print(i)
print("Nun ist die Schleife beendet.")

Was passiert, wenn du range(0, 15) wie folgt ersetzt (englisch range = Bereich):

  • range(-5, 7)
  • range(15)
  • range(4, 10, 2)
  • range(10, 4, 2)
  • range(10, 4, -1)

Vermutlich verstehst du nun bereits, wie eine for-Schleife funktioniert. Beachte:

  • Die sogenannte Laufvariable i im obigen Beispiel nimmt nacheinander alle ganzzahligen Werte von 0 bis 15-1 an; der Wert 15 wird nicht angenommen.
  • Statt i kann man einen beliebigen anderen Variablennamen verwenden, etwa zzz42.
  • Der Doppelpunkt : am Ende der Zeile mit dem for darf nicht vergessen werden.
  • Der mehrfach auszuführende Code ist vier Zeichen eingerückt.

Die range-Funktion benötigt standardmäßig zwei ganze Zahlen als Parameter, hat also die Form range(start, end). Er erzeugt eine Liste1) aller ganzen Zahlen, die bei start startet und bei end - 1 endet.

Der erste Parameter kann optional weggelassen werden und wird dann als 0 interpretiert.

Es gibt auch die 3-Parameter Variante range(start, end, step), wobei step die Schrittweite angibt. Hier sind auch negative Schrittweiten erlaubt, was natürlich nur im Fall start>end sinnvoll ist.

  • range(15) und range(0,15) und range(0,15,1) haben dieselbe Bedeutung.
  • range(3, 15) und range(3, 15, 1) haben dieselbe Bedeutung.

Stets kann man versuchen, sich im Internet schlau zu machen, wenn etwas unklar ist. Die Kunst ist hier, die richtigen (englischen) Suchbegriffe zu finden. Manchmal ist dies relativ verständlich:

Manchmal eher nicht:

Schreibe ein Programm, das für alle Zahlen zwischen $1$ und $20$ sowohl die Zahl als auch deren Quadrat ausgibt:

Das Quadrat von  1 ist   1.
Das Quadrat von  2 ist   4.
...
Das Quadrat von 20 ist 400.

Schreibe ein Programm, das eine Zahl als Eingabe entgegennimmt (oder diese am Anfang des Programms als Variable definiert) und dann ein Dreieck der folgenden Form produziert, hier im Fall der Eingabe 6:

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

Schreibe ein Programm, das die Anzahl der Neuansteckungen mit Corona simuliert. Die Ausgabe soll beispielsweise wie folgt aussehen:

Anzahl der Neuansteckungen heute: 300
Wöchentliche Zunahme: 17%
Woche  0:  300
Woche  1:  351
Woche  2:  410
Woche  3:  480
Woche  4:  562
Woche  5:  657
Woche  6:  769
Woche  7:  900
Woche  8: 1053
Woche  9: 1232
Woche 10: 1442
Woche 11: 1687
Woche 12: 1974

Am Anfang des Programms sollen aktuelle Anzahl und Zuwachsrate als Variablen definiert werden. Das Prozentzeichen wird mit %% kodiert, z. B. print("30%%").

2aLM und 2dNP (noch bei Corona) bis hier 08.09.2021

2aLM und 2dNP bis hier 15.09.2021 (war wohl doch noch einiges zu Corona zu tun…)

Innerhalb eine for-Schleife können weitere for-Schleifen stehen.

for i in range(3):
    print("Äussere Schleife beginnt, Laufvariable i = %d." % i)
    for j in range(3):
        print("  Innere Schleife beginnt, Laufvariable j = %d." % j)
        print("  (i,j) = (%d, %d) " % (i,j))
    print("  Innere Schleife abgearbeitet.") 
print("Äussere Schleife abgearbeitet.") 

Hier noch ein weiteres Beispiel.

for i in range(10):
    s = ""
    for j in range(10):
        s = s + "(%d, %d), " % (i,j)
    print(s)    

Schreibe ein Programm, das abhängig von einer Variablen n eine Multiplikationstabelle der Zahlen von $1$ bis $n$ Zahlen ausgibt. Im Fall $n=10$ soll die Ausgabe wie folgt aussehen.

 * |   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

Hinweis

Hinweis

Schreibe zuerst ein Programm, dass die folgende Ausgabe erzeugt, und kümmere dich danach um die schönere Formatierung.

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

Falls Du nicht weiterkommst:

Falls Du nicht weiterkommst:

n = 10
for i in range(1, n+1):
    s = "" 
    for j in range(1, n+1):
        s = s + "%4d" % (i*j)
    print(s)

2dNP bis hier 22.09.2021

Schreibe ein Programm, dass abhängig von einer Variablen n die Summe der Zahlen von $1$ bis $n$ berechnet und nicht nur das Ergebnis ausgibt, sondern auch, was berechnet wurde: Im Fall $n=10$ soll die Ausgabe beispielsweise wie folgt aussehen:

+1+2+3+4+5+6+7+8+9+10=55

Hinweis:

Hinweis:

Die Zeichenkette links des Gleichheitszeichens ist schrittweise/schleifenweise aufzubauen.

Das Folgende soll nicht verwendet werden, gehört aber zur mathematischen Allgemeinbildung:

Die Gaußsche Summenformel besagt, dass die Summe der Zahlen von $1$ bis $n$ genau $ \frac{n (n+1)}2$ ist, in Formeln: $$1+2+\dots+n = \frac{n(n+1)}{2}$$

Schreibe ein Programm, dass die Fibonacci-Folge ausgibt. Sie gibt an, wie sich eine idealisierte Kaninchenpopulation vermehrt.

Wie schnell wächst diese Folge? Vergleiche mit der Folge, deren $n$-tes Glied durch $x_n=\left(\frac{1+\sqrt{5}}2\right)^n$ gegeben ist, indem du für jedes $n$ den Quotienten $\frac{f_n}{x_n}$ berechnest, wobei $f_n$ das $n$-te Glied der Fibonacci-Folge ist.

Hinweis

Hinweis

Will man die Werte zweier Variablen tauschen, braucht man eigentlich eine Hilfsvariable:

x = 1
y = 2
print(x, y)
z = x 
x = y
y = z
print(x, y)

Python ist aber sehr benutzerfreundlich und erlaubt Folgendes:

x = 1
y = 2
print(x, y)
x, y = y, x
print(x, y)

Corona-Simulation

Corona-Simulation

# Anfangsdaten
anzahl_anfang = 300
zunahme_prozent = 17
wochen = 12
 
print("Anzahl der Neuansteckungen heute: %d" % anzahl_anfang)
print("Wöchentliche Zunahme: %d%%" % zunahme_prozent)
 
# aktuelle Anzahl
x = anzahl_anfang
 
for t in range(wochen + 1):
    print("Woche %3d: %5d" % (t, x))
    x = x * (1 + zunahme_prozent / 100)    

Multiplikationstabelle

Multiplikationstabelle

n = 10
erstezeile = " * |"
for i in range(1, n+1):
    erstezeile = erstezeile + "%4d" % i 
print(erstezeile)
 
zweitezeile = (n+1) * 4 * "-"
print(zweitezeile)
 
for i in range(1, n+1):
    s = ("%2d |" % i)  
    for j in range(1, n+1):
        s = s + "%4d" % (i*j)
    print(s)

Summe der ersten $n$ Zahlen

Summe der ersten $n$ Zahlen

n = 10
summe = 0
ausgabe = ""
for i in range(1,n+1):
    summe = summe + i
    ausgabe = ausgabe + "+%d" % i
    # Alternativ: ausgabe = ausgabe + "+" + str(i)
print(ausgabe + "=" + str(summe))    

1)
Genau genommen handelt es sich um einen sogenannten “Generator”. Wer will, kann die Befehle print(range(7)) und print(list(range(7))) ausprobieren.
  • lehrkraefte/snr/informatik/python/loops.txt
  • Last modified: 2021/09/22 14:41
  • by Olaf Schnürer