This is an old revision of the document!
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. Eine flexiblere Methode ist die Verwendung von sys.stdout.write():
import sys sys.stdout.write("Es geht") sys.stdout.write("noch weiter\n") # Am Schluss ein Zeilenumbruch mit \n
Oder noch einfacher, man erstellt die ganze Zeile erst in einem String und gibt diesen am Schluss aus:
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 druch 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.