Wiederholungen
Es gibt zwei grundlegende Typen von Wiederholungen:
- Die Anzahl Wiederholungen ist schon vor der Wiederholung bekannt: for-loops
- Die Anzahl Wiederholungen ist nicht bekannt: while-loops
for-loops
Ein for-loop besteht aus zwei Elementen: Eine Laufvariable und einen Bereich.
Typischer Fall
for i in range(10): print(i)
Gibt die Zahlen von 0 bis 9 aus (10 Wiederholungen). Die Laufvariable ist i, der Bereich range(10), was den Zahlen von 0 bis und mit 9 entspricht.
range-Varianten
- range(n): Zahlen von 0 bis und mit n-1
- range(a,b): Zahlen von a bis und mit b-1
- range(a,b,s): Zahlen von a in s-Schritten bis zur grössten Zahl, die kleiner als b ist
for i in range(10,20,3): print(i) # Liefert 10,13,16,19
Iteration über Listen und Arrays
prim = (2,3,5,7,11,13,17,19) for p in prim: print("%d ist prim" % (p,))
Die Elemente des Arrays könnten auch beliebige Dinge sein.
while-loops
Ein while-loop wird so lange wiederholt, wie eine Bedingung wahr ist.
n=0 k=100 p=1.01 while (k<200): # Wiederhole solange wie k<200 k*=p # Kurzform für k = k*p n+=1 # Kurzform für n = n+1 print(n)
Was berechnet das obige Programm?
Endlos-Schleife
import time while True: print("immer und immer wieder") time.sleep(0.5) # Ein bisschen Pause, damit die Ausgabe nicht komplett überläuft.
break, continue
Manchmal ist es wünschenswert, eine while
- oder ''for'-Schleife irgendwo innerhalb abzubrechen (break) oder direkt zur nächsten Wiederholung (continue) zu springen, ohne den Rest des Blocks auszuführen.
a = 1 while a<10: a+=1 if a>5: break # Sofort die while-Schlaufe beenden print("Sonst noch was mit %d tun" % a)
a = 1 while a<10: if a%2==0: # Wenn der Rest der Divison von a durch 2 Null ist, d.h. wenn a gerade ist. a+=3 continue # Nächste Wiederholung # Was kompliziertes mit a machen a+=1
Verschachtelte loops
for i in range(5): for j in range(5): print("%d * %d = %d" %(i,j,i*j))
Zeilenumbrüche
Sie können eine print-Ausgabe ohne Zeilenumbruch erreichen, indem Sie nach der schliessenden Klammer ein Komma anfügen:
print("Es geht "), print("noch weiter")
Leider wird damit auch ein Leerschlag eingefügt.
Noch mehr Kontrolle hat man, wen man die ganze Zeile erst in einem String aufbaut und diesen am Schluss ausgibt:
zeile = "Die Zahlen 1" for i in range(2,5): zeile += ", %d" % (i*i) print(zeile) # Ausgabe: Die Zahlen 1, 4, 9, 16
Aufgaben
Lesen Sie jeweils die Eingabe für das Programm von der Tastatur ein:
z = int(raw_input("Zahl = "))
Sie können wie folgt überprüfen, ob eine Zahl a durch eine Zahl b teilbar ist:
if a % b == 0: # Wenn der Rest der Division von a durch b gleich Null ist, ist a durch b teilbar # Tu was
- Schreiben Sie ein Programm, das sämtliche Teiler der eingegebenen Zahl ausgibt.
- Schreiben Sie ein Programm, das überprüft, ob die eingegebene Zahl eine Primzahl ist.
- Schreiben Sie ein Programm, das die Primfaktorenzerlegung der eingegeben Zahl ausgibt. In einem der beiden Formate
- Primfaktorzerlegung von 123456 = 1 * 2 * 2 * 2 * 2 * 2 * 2 * 3 * 643
- Primfaktorzerlegung von 123456 = 1 * 2^6 * 3 * 643
- Schreiben Sie ein Programm, das eine Primzahl nach der anderen ausgibt.
- Schreiben Sie ein Programm, das perfekte Zahlen sucht, d.h. solche, die gleich der Summe Ihrer Teiler (sich selbst ausgenommen) sind.