Schleifen in Python
AnfängerEinheit 3 von 10 in Kurs: Python-Programmierung – Schleifen, Funktionen, Listen und Dateien
Was du lernst
- Schreibe while-Schleifen, die einen Codeblock wiederholen, solange eine Bedingung wahr ist. Stelle sicher, dass jede Schleife endet, und lies mit Schleifen Eingaben, bis die Eingabe beendet wird.
- Eine while-Schleife zum Zählen und Aktualisieren schreibenLies und schreibe die drei Bestandteile einer while-Schleife: einen Startwert, eine vor jedem Durchlauf geprüfte Bedingung und eine Aktualisierung im eingerückten Körper.
- Sicherstellen, dass eine while-Schleife endetErkenne Endlosschleifen, erkläre ihre Ursachen, behebe sie und stoppe ein Programm, das in einer solchen Schleife feststeckt.
- Eingaben lesen, bis die Eingabe beendet wirdVerwende while-Schleifen, um Werte einzulesen, bis ein Stoppwert erscheint, und um erneut zu fragen, bis der Benutzer eine akzeptable Antwort gibt.
- Eine while-Schleife zum Zählen und Aktualisieren schreiben
- Durchlaufe mit for-Schleifen jedes Element einer Zeichenkette oder Liste und jede Zahl eines Zahlenbereichs. Entscheide, wann sich eine for- oder eine while-Schleife besser für eine Aufgabe eignet.
- Die Elemente einer Sequenz durchlaufenSchreibe for-Schleifen, die jedes Zeichen einer Zeichenkette oder jeden Wert einer kurzen Liste der Reihe nach durchlaufen, und verwende die Schleifenvariable richtig.
- Zahlenfolgen mit range erzeugenVerwende range mit einem, zwei oder drei Argumenten, um etwas eine festgelegte Anzahl von Malen zu wiederholen oder ganze Zahlen in gleichmäßigen Abständen zu durchlaufen, auch beim Rückwärtszählen.
- Zwischen einer for-Schleife und einer while-Schleife wählenEntscheide, welche Art von Schleife zu einer Aufgabe passt, und schreibe eine Zählschleife von einer Form in die andere um.
- Die Elemente einer Sequenz durchlaufen
- Ändere den normalen Ablauf einer Schleife: Verlasse sie vorzeitig, überspringe den Rest eines Durchlaufs und führe Code nur aus, wenn eine Schleife beendet wurde, ohne abgebrochen zu werden.
- Eine Schleife mit break vorzeitig verlassenVerwende break, um eine Schleife zu beenden, sobald ihre Aufgabe erledigt ist, auch beim while True-Muster für Eingabeschleifen.
- Mit continue zum nächsten Schleifendurchlauf springenÜberspringe mit continue den Rest eines Durchlaufs, vermeide die Falle bei while-Schleifen und unterscheide continue, break und pass.
- Code ausführen, wenn eine Schleife ohne break endetFüge einer for- oder while-Schleife einen else-Block hinzu, um den Fall zu melden, dass kein break ausgeführt wurde, und verwende eine Merkvariable für dieselbe Aufgabe.
- Eine Schleife mit break vorzeitig verlassen
- Verwende die gängigen Schleifenmuster, um Werte zu zählen, zu summieren und ihr arithmetisches Mittel zu berechnen, den größten und kleinsten Wert zu finden und nach Elementen zu suchen, die eine Bedingung erfüllen.
- Werte zählen und aufsummierenVerwende Zähler und Akkumulatoren, um über die Durchläufe einer Schleife hinweg eine Anzahl, eine Summe, ein Produkt, ein arithmetisches Mittel oder einen Text aufzubauen.
- Den größten und den kleinsten Wert findenHalte den bisher besten Wert fest, um ein Maximum oder Minimum zu finden, wähle einen sicheren Startwert und halte auch fest, wo der Wert vorkam.
- Elemente suchen, die eine Bedingung erfüllenPrüfe Elemente einzeln auf einen Treffer, entscheide erst nach der Prüfung aller Elemente auf „nicht gefunden“ und beantworte Fragen wie „Gibt es mindestens ein …?“ und „Erfüllen alle …?“.
- Werte zählen und aufsummieren
- Setze eine Schleife in eine andere, um mit Zeilen und Spalten, Kombinationen und Formen zu arbeiten. Sage vorher, wie oft der innere Körper ausgeführt wird, und steuere beide Schleifen.
- Eine Schleife innerhalb einer Schleife erstellenSchreibe verschachtelte Schleifen für Raster, Tabellen, Kombinationen und wachsende Muster und zähle, wie oft der innere Körper ausgeführt wird.
- Den Ablauf verschachtelter Schleifen steuernVerwende Bedingungen, break, continue und Merkvariablen innerhalb verschachtelter Schleifen und beachte dabei, dass sich jede Anweisung nur auf ihre eigene Schleife auswirkt.
- Eine Schleife innerhalb einer Schleife erstellen
- Sage genau vorher, was eine Schleife tut, indem du sie von Hand nachvollziehst. Zähle ihre Durchläufe und finde und behebe Um-eins-Fehler und andere häufige Schleifenfehler.
- Eine Schleife mit einer Ablauftabelle nachvollziehenFühre eine Schleife von Hand in einer Ablauftabelle aus, um ihre Ausgabe, ihre Endwerte und ihre Anzahl an Durchläufen vorherzusagen, und verwende print-Anweisungen, um sie automatisch nachzuvollziehen.
- Um-eins-Fehler finden und behebenErkenne Schleifen, die einmal zu oft oder zu wenig ausgeführt werden, zähle Durchläufe mit genauen Regeln und korrigiere die Grenzen.
- Eine Schleife mit einer Ablauftabelle nachvollziehen
Schleifen in Python einfach erklärt
1Aktionen mit while-Schleifen wiederholen
Ein Programm kann wiederholt nach einer Eingabe fragen oder eine Berechnung wiederholen, bis es einen Zielwert erreicht. Eine while-Schleife macht das möglich, indem sie vor jedem Durchlauf ihres Körpers eine Bedingung prüft. Du verknüpfst Startwert, Prüfung und Aktualisierung und verwendest diese Struktur anschließend für Eingaben und Validierung. Wenn du verfolgst, wie sich die Werte ändern, erkennst du auch, warum eine Schleife endet, ihren Körper vollständig überspringt oder weiterläuft, ohne einen Ausgang zu erreichen.
1.1 Wie eine while-Schleife Aufgaben wiederholt
Eine Schleife wiederholt einen Codeblock. Jeder Durchlauf durch den Block ist ein Schleifendurchlauf. Eine while-Schleife prüft vor jedem Durchlauf eine Bedingung und führt ihren Körper aus, solange diese Bedingung wahr ist. Das passt zu einer Aufgabe wie „Addiere weiter, bis die Summe 100 erreicht“.
Starten, prüfen und aktualisieren
Eine Zählschleife braucht einen Startwert, eine Bedingung und eine Aktualisierung. Die Kopfzeile endet mit einem Doppelpunkt. Rücke den Körper um vier Leerzeichen ein:
n = 3
while n > 0:
print(n)
n = n - 1
print("Liftoff!")
Die Ausgabe lautet:
3
2
1
Liftoff!
Bei der ersten Prüfung ist n > 0 wahr, weil n gleich 3 ist. Python gibt 3 aus, subtrahiert 1 und kehrt zur Kopfzeile zurück. Das wiederholt sich mit 2 und dann mit 1. Durch die Aktualisierung wird n gleich 0, sodass die nächste Prüfung falsch ist. Python überspringt den Körper und führt das letzte print aus.
Die Einrückung bestimmt, was wiederholt wird. Beide eingerückten Zeilen gehören zum Körper. Die letzte Zeile steht auf Höhe von while, wird also einmal nach der Schleife ausgeführt. Ein if prüft seine Bedingung einmal; while kehrt nach jedem vollständig ausgeführten Körper zur erneuten Prüfung zurück.
Die Prüfung erfolgt am Anfang
Die Änderung einer Variablen unterbricht den Rest des aktuellen Körpers nicht:
n = 1
while n > 0:
n -= 1
print("Still in this pass")
print(n)
Dies gibt Still in this pass und dann 0 in getrennten Zeilen aus. Die Aktualisierung macht die Bedingung falsch, aber Python prüft sie erst, wenn es zur Kopfzeile zurückkehrt. Ein Start mit n = 0 würde dagegen den gesamten Körper überspringen: Eine while-Schleife kann nullmal ausgeführt werden.
Kurze Aktualisierungen und veränderliche Werte
n -= 1 bedeutet n = n - 1. Entsprechend addiert count += 1 den Wert 1, balance *= 1.07 multipliziert mit 1,07 und n //= 10 ersetzt n durch den ganzzahligen Quotienten bei Division durch 10. Python hat keinen Inkrementoperator: count++ ist ein Syntaxfehler. ++count wendet das unäre Plus zweimal an und lässt die ganze Zahl unverändert.
Hier entfernt eine Schleife bei jedem Durchlauf eine Ziffer:
n = 472
total = 0
while n > 0:
total += n % 10
n //= 10
print(total)
Der Rest n % 10 ist die letzte Ziffer. Zuerst wird 2 addiert und n wird zu 47. Danach wird 7 addiert und n wird zu 4. Schließlich wird 4 addiert und n wird zu 0. Die Ausgabe ist 13. Die Aktualisierung bereitet sowohl den nächsten Durchlauf vor als auch den Weg zum Ausgang.
Bei einer Schleife mit Zielwert muss die Anzahl der Durchläufe nicht im Voraus bekannt sein. Beginnend mit einem Guthaben von 1000 dauert es 11 Durchläufe, bis es durch Multiplikation mit 1,07 und Erhöhung eines Jahreszählers 2000 erreicht. Nach 10 Durchläufen beträgt das Guthaben etwa 1967,15; nach 11 etwa 2104,85.
Bedingungen können Vergleiche mit and, or und not verknüpfen. Auch die Wahrheitswertauswertung funktioniert: Bei einer ganzen Zahl wiederholt while n: die Schleife, solange n ungleich null ist. Verwende eine Bedingung, deren Bedeutung leicht nachzuvollziehen ist. Rücke einheitlich mit Leerzeichen ein; nicht zusammenpassende Ebenen können einen IndentationError und gemischte Tabulatoren und Leerzeichen einen TabError auslösen.
Wichtige Erkenntnisse
- Eine while-Schleife prüft ihre Bedingung vor jedem Durchlauf, sodass ihr Körper nullmal ausgeführt werden kann.
- Initialisiere vor der Schleife und aktualisiere innerhalb der Schleife, um dich dem Ausgang zu nähern.
- Zeilen nach einer Aktualisierung werden noch ausgeführt, bevor die Bedingung erneut geprüft wird.
- Die Einrückung bestimmt, welche Anweisungen wiederholt werden.
- Verwende
+=und-=für Aktualisierungen; Python hat keinen++-Inkrementoperator.
1.2 Warum eine Schleife weiterläuft
Eine Endlosschleife wiederholt sich, ohne einen Ausgang zu erreichen. Möglicherweise läuft dieselbe Ausgabe ständig weiter oder ein Programm scheint nichts zu tun. Um die Ursache zu finden, verfolge die Werte in der Bedingung und suche nach einem erreichbaren Ausgang.
Die Aktualisierung finden
Diese Schleife gibt immer wieder 3 aus:
n = 3
while n > 0:
print(n)
Die Prüfung bleibt wahr, weil nichts den Wert von n ändert. Füge n -= 1 innerhalb des Körpers hinzu, damit die Werte 3, 2 und 1 ausgegeben werden, bevor die Schleife endet. Die Aktualisierung nach die Schleife zu setzen hilft nicht: Das Programm kann sie nicht erreichen, solange die Schleife noch läuft.
Auch die Richtung ist wichtig. Bei while n > 0: lässt eine Aktualisierung mit n += 1 einen positiven Wert wachsen. Ganze Zahlen in Python springen bei einem festen Maximum nicht über und bieten daher keinen zufälligen Ausgang. Benenne die erwartete Änderung, etwa „ein verbleibender Versuch weniger“, und prüfe, ob der Code diese Änderung auf jedem Weg durch den Körper ausführt.
Ein Zielwert kann verfehlt werden
Eine Aktualisierung kann den Wert bei jedem Durchlauf ändern und dennoch einen Zielwert, auf den mittels Gleichheit geprüft wird, nie erreichen:
n = 1
while n != 10:
print(n)
n += 2
Die Werte lauten 1, 3, 5, 7, 9, 11 und so weiter. Sie sind immer ungerade, sodass keiner gleich 10 ist. Verwende für die Aufgabe „Gib ungerade Werte unter 10 aus“ die Bedingung while n < 10:. Sobald n zu 11 wird, ist diese Bedingung falsch. Der gewählte Vergleich muss dazu passen, ob die Aufgabe bei einem Wert endet oder wenn eine Grenze überschritten wird.
Dezimalschritte und exakte Gleichheit
Viele Dezimalbrüche werden als Gleitkommazahlen näherungsweise gespeichert. Addiert man zehnmal 0.1 zu 0.0, ergibt sich 0.9999999999999999. Eine Schleife, die auf exakte Gleichheit mit 1.0 wartet, verfehlt daher ihren beabsichtigten Endpunkt.
Wenn die Aufgabe darin besteht, eine feste Folge von Zehnteln zu durchlaufen, zähle mit ganzen Zahlen und berechne jede Dezimalzahl:
for i in range(11):
x = i / 10
print(x)
Dies durchläuft 11 Werte von 0.0 bis 1.0. Der ganzzahlige Zähler steuert die Wiederholungen; die gespeicherte Dezimalzahl entscheidet nicht darüber, ob die Schleife endet.
Jeden Weg durch den Körper prüfen
Suche vor dem Ausführen einer while-Schleife ihre Startwerte, ihre Bedingung und jede Anweisung, die diese Werte ändert. Prüfe, ob die Änderung die Bedingung falsch machen kann. Überspringt ein if eine Aktualisierung, vollziehe auch diesen Weg nach. Eine vorübergehende Zeile wie print("n =", n) innerhalb des Körpers kann zeigen, dass ein Wert feststeckt oder sich von der Grenze entfernt.
Um ein laufendes Programm zu unterbrechen, drücke Strg+C in einem Terminal oder verwende die Schaltfläche zum Stoppen oder Unterbrechen im Editor. In einem Terminal meldet Python normalerweise KeyboardInterrupt mit einem Traceback.
Absichtliche Wiederholung
while True: hält seine Bedingung im Schleifenkopf absichtlich wahr. Der Körper verwendet break, um die Schleife bei einem Ereignis zu verlassen, etwa wenn der Benutzer „quit“ eingibt. Der Ausgang muss erreichbar sein. Eine Eingabeschleife kann weiter warten, weil der Benutzer das Beenden noch nicht angefordert hat; ein Programmfehler liegt vor, wenn die Logik der Schleife den beabsichtigten Ausgang unmöglich macht.
Wichtige Erkenntnisse
- Prüfe, ob jeder sich wiederholende Weg einen Ausgang erreichen kann.
- Eine fehlende, falsch platzierte oder in die falsche Richtung führende Aktualisierung kann eine while-Schleife am Laufen halten.
- Ein Zielwert, auf den mittels Gleichheit geprüft wird, kann durch die Schrittweite übersprungen werden.
- Verwende für eine feste Anzahl von Dezimalschritten einen ganzzahligen Zähler.
- Strg+C oder das Unterbrechen im Editor stoppt ein laufendes Programm.
- Eine absichtliche
while True-Schleife wird durch ein erreichbaresbreakverlassen.
1.3 Eingabeschleifen und akzeptable Antworten
Eine Eingabeschleife kann eine unbekannte Datenmenge erfassen oder so lange erneut fragen, bis eine Antwort akzeptabel ist. In beiden Fällen muss die neue Eingabe die nächste Entscheidung über eine Wiederholung beeinflussen.
Bei einem Sentinelwert stoppen
Ein Sentinelwert ist eine besondere Eingabe, die „keine weiteren Daten“ bedeutet. Wähle einen Wert, der kein echtes Datenelement sein kann. Für positive Anzahlen kann 0 funktionieren; ist 0 ein gültiger Messwert, wähle ein anderes Stoppsignal.
Das vorbereitende Einlesen holt den ersten Wert, bevor die Bedingung geprüft wird:
total = 0
number = int(input("Number (0 to stop): "))
while number != 0:
total += number
number = int(input("Number (0 to stop): "))
print("Total:", total)
Bei den Eingaben 4, 7 und 0 addiert der Körper zuerst 4 und dann 7. Das Einlesen von 0 macht die nächste Bedingung falsch. Das Programm gibt Total: 11 aus; es verarbeitet den Sentinelwert nicht. Ist die erste Eingabe 0, wird der Körper nullmal ausgeführt und die Summe bleibt 0.
Das letzte Einlesen innerhalb des Körpers ist wesentlich. Ohne dieses wird derselbe erste Wert endlos verarbeitet. Die Prüfung muss auch vor der Verarbeitung eines neu gelesenen Werts erfolgen: Andernfalls kann ein Sentinelwert als Datum gezählt werden.
Datentypen aufeinander abstimmen
input() gibt Text zurück. Die Zeichenkette "0" ist nicht gleich der ganzen Zahl 0. Wandle eine numerische Eingabe mit int() um, bevor du sie mit einem numerischen Sentinelwert vergleichst, oder behalte die Eingabe als Text und vergleiche sie mit einer Zeichenkette wie "done". Eine Umwandlung in eine Zahl erwartet eine gültige numerische Zeichenkette; eine Bereichsprüfung prüft die daraus entstehende Zahl.
Für ein arithmetisches Mittel führe neben der Summe einen Zähler. Beim Sentinelwert -1 und den Eingaben 8, 6, 10 und -1 ist die Summe 24 und die Anzahl 3. Dividiere nach der Schleife, um 8.0 zu erhalten. Ist die erste Eingabe -1, bleibt die Anzahl 0. Verwende daher vor der Division if count > 0:. So behandelst du einen leeren Datensatz ohne ZeroDivisionError.
Erneut fragen, solange eine Antwort ungültig ist
Eine Validierungsschleife beschreibt die nicht akzeptablen Antworten in ihrer Bedingung:
age = int(input("Age (0-120): "))
while age < 0 or age > 120:
print("Please enter an age from 0 to 120.")
age = int(input("Age (0-120): "))
print("Thank you.")
Bei 150, -2 und 34 erscheint die Warnung zweimal. Der Wert 34 macht beide Vergleiche falsch, sodass die Schleife endet. Auch die Randwerte 0 und 120 werden akzeptiert.
Das Wort or ist entscheidend: Ein Alter ist ungültig, wenn es unter dem Minimum oder über dem Maximum liegt. age < 0 and age > 120 würde nichts zurückweisen, weil eine Zahl nicht beides sein kann.
Für eine Ja-Nein-Antwort lautet die Prüfung auf Ungültigkeit answer != "y" and answer != "n". Eine Antwort muss sich von beiden akzeptierten Zeichenketten unterscheiden, um zurückgewiesen zu werden. Mit or würde selbst "y" zu einer Wiederholung führen, weil es sich von "n" unterscheidet. Vollziehe eine akzeptable und eine nicht akzeptable Antwort nach, um eine solche Bedingung zu prüfen.
Für dieselben Aufgaben lässt sich while True mit einem Einlesen im Körper verwenden, gefolgt von einer Abbruchprüfung und break. So steht die Entscheidung direkt nach der Eingabe und das Einlesen muss nicht zweimal geschrieben werden.
Wichtige Erkenntnisse
- Ein Sentinelwert markiert das Ende der Daten und muss vor der Verarbeitung geprüft werden.
- Eine Schleife mit vorbereitendem Einlesen liest vor der Schleife und erneut am Ende des Körpers.
- Vergleiche passende Datentypen: input gibt eine Zeichenkette zurück.
- Bei der Validierung wird wiederholt, solange die aktuelle Antwort ungültig ist.
- Prüfe, ob die Anzahl positiv ist, bevor du ein arithmetisches Mittel berechnest.
2Sequenzen mit for-Schleifen und range durchlaufen
Wenn eine Aufgabe jedes Zeichen, jeden Wert einer Liste oder eine bekannte Zahlenfolge durchläuft, übernimmt eine for-Schleife das Weitergehen. Du kannst dich auf die Aktion für jedes Element konzentrieren. Ein Zahlenbereich liefert Schritte mit ganzen Zahlen, ohne dass du eine lange Liste schreiben musst. Sein Startwert, seine ausgeschlossene Endgrenze und seine Schrittweite erklären sowohl die durchlaufenen Werte als auch die leeren Fälle. Der Vergleich dieser Struktur mit while-Schleifen hilft dir, eine Aufgabe übersichtlich auszudrücken.
2.1 Zeichen und Listenwerte durchlaufen
Eine for-Schleife durchläuft die Elemente einer Sequenz der Reihe nach. Bei jedem Durchlauf weist Python das nächste Element der Schleifenvariablen zu und führt den eingerückten Körper aus. Eine Schleife über eine Sequenz heißt oft Schleife mit bestimmter Anzahl von Durchläufen, weil die Elemente ihren Arbeitsumfang festlegen.
Ein Element nach dem anderen
Eine Zeichenkette ist eine Sequenz von Zeichen:
for ch in "cat":
print(ch)
Dies gibt c, a und t in getrennten Zeilen aus. Auch Leerzeichen und Satzzeichen zählen als Zeichen. Die Zeichenkette "hi there" hat einschließlich ihres Leerzeichens acht Zeichen, sodass das Durchlaufen aller Zeichen acht Durchläufe benötigt.
Eine Liste enthält eine Sequenz von Werten. Ihre Literalform verwendet eckige Klammern und Kommas:
scores = [3, 41, 12]
for score in scores:
print(score * 2)
Die Ausgabe lautet 6, 82 und 24, jeweils in einer eigenen Zeile. score enthält jeweils eine Zahl, nicht die ganze Liste und nicht ihre Position. Um von 3 zu 41 und zu 12 zu gelangen, muss kein Zähler von Hand aktualisiert werden.
Verwende einen Namen, der ein einzelnes Element beschreibt: name in names oder score in scores. Benötigt der Körper den aktuellen Wert nie, ist _ ein üblicher Name für diese ungenutzte Schleifenvariable.
Eine Zuweisung ersetzt kein Element
Die Schleifenvariable ist eine gewöhnliche Variable. Wenn du ihr eine andere Zahl zuweist, ersetzt das nicht die Zahl in der Liste:
numbers = [1, 2, 3]
for n in numbers:
n = n * 10
print(n)
print(numbers)
Der Körper gibt 10, 20 und 30 aus. Bei jedem neuen Durchlauf wird n das nächste Element aus der unveränderten Liste zugewiesen. Die letzte Ausgabezeile lautet [1, 2, 3]: Die Liste selbst hat sich nicht geändert. Nach der Schleife behält n den Wert 30, den letzten im Körper zugewiesenen Wert.
Eine leere Sequenz gibt dem Körper keine Arbeit. Bei for ch in "": gibt es null Durchläufe und die Schleife weist ch keinen Wert zu. Verlass dich nicht darauf, dass eine Schleife ihre Variable erstellt, wenn möglicherweise keine Elemente vorhanden sind.
Zugehörigkeit innerhalb einer Schleife
In einem for-Kopf leitet in die zu durchlaufende Sequenz ein. In einer Bedingung prüft es die Zugehörigkeit und ergibt True oder False. Beide Verwendungen können zusammenwirken:
vowels = 0
for ch in "education":
if ch in "aeiou":
vowels += 1
print(vowels)
Jedes Zeichen wird durchlaufen, aber der Zähler ändert sich nur bei e, u, a, i und o. Die Ausgabe ist 5. Das if ist innerhalb der Schleife eingerückt und die Aktualisierung des Zählers innerhalb des if.
Diese Schleife zeigt auch, warum eine Schleifenvariable und ein Zähler verschiedene Aufgaben haben. ch enthält das aktuelle Zeichen; vowels hält fest, wie viele Zeichen die Bedingung bisher erfüllt haben. Der Zähler wird vor der Schleife initialisiert, damit er sein Ergebnis zwischen den Durchläufen behält.
Eine einzelne ganze Zahl kann keine Elemente liefern: for i in 5: löst TypeError aus. Um eine Aktion fünfmal zu wiederholen, schreibe for _ in range(5):. Der Zahlenbereich liefert die Schritte, auch wenn der Körper deren Werte nicht verwendet.
Wichtige Erkenntnisse
- Eine for-Schleife weist ihrer Schleifenvariablen der Reihe nach jedes Element der Sequenz zu.
- Leerzeichen und Satzzeichen sind Zeichen in einer Zeichenkette.
- Eine erneute Zuweisung an eine numerische Schleifenvariable lässt die ursprüngliche Liste unverändert.
- Bei einer leeren Sequenz wird der Körper nullmal ausgeführt und der Schleifenvariablen kein Wert zugewiesen.
- In einer Bedingung prüft
indie Zugehörigkeit; in einem for-Kopf leitet es die zu durchlaufenden Elemente ein. - Verwende
range(5), nicht die ganze Zahl5, um fünf Wiederholungen zu ermöglichen.
2.2 Startwert, Endgrenze und Schrittweite eines Zahlenbereichs wählen
Ein Zahlenbereich (range) beschreibt ganze Zahlen mit gleichmäßigen Abständen. Er ist nützlich, um Arbeit eine festgelegte Anzahl von Malen zu wiederholen, vorwärts oder rückwärts zu zählen und regelmäßige Schritte auszuwählen. Seine Endgrenze ist immer ausgeschlossen.
Drei Formen
| Form | Bedeutung | Werte |
|---|---|---|
range(5) | Start bei 0; Schrittweite 1 | 0, 1, 2, 3, 4 |
range(2, 6) | Start bei 2; Schrittweite 1 | 2, 3, 4, 5 |
range(1, 10, 2) | Start bei 1; Schrittweite 2 | 1, 3, 5, 7, 9 |
Bei einem Argument ist dieses die Endgrenze. Bei zwei Argumenten sind es Startwert und Endgrenze. Bei drei Argumenten ist das letzte die Schrittweite, die nach jedem Wert addiert wird. range(0, 10, 3) durchläuft 0, 3, 6 und 9; der nächste Schritt würde 12 erreichen, deshalb wird dieser Wert nicht geliefert.
Die Endgrenze bleibt auch dann ausgeschlossen, wenn ein Schritt genau auf ihr landen könnte. range(0, 10, 5) liefert nur 0 und 5. Bei der positiven Standardschrittweite 1 und einer Endgrenze über dem Startwert ist die Anzahl der gelieferten Werte gleich Endgrenze minus Startwert.
Mit negativer Schrittweite rückwärtszählen
range(5, 0, -1) liefert 5, 4, 3, 2 und 1. Um 0 einzuschließen, setze die Endgrenze darunter: range(5, -1, -1) liefert sechs Werte und endet bei 0.
Die Richtung muss zu den Grenzen passen. range(5, 0) ist leer, weil seine Standardschrittweite positiv ist. Auch range(1, 5, -1) ist leer, weil der Zahlenbereich unter der Endgrenze beginnt, aber abwärtsläuft. Leere Zahlenbereiche sind gültig und führen zu null Durchläufen; eine Schrittweite von null löst dagegen ValueError aus.
Den letzten benötigten Wert innerhalb der Grenze halten
Um die geraden ganzen Zahlen von 2 bis 20 zu addieren:
total = 0
for n in range(2, 21, 2):
total += n
print(total)
Die Endgrenze 21 ermöglicht, dass 20 durchlaufen wird. Die zehn Werte ergeben zusammen 110, sodass das Programm 110 ausgibt. Mit der Endgrenze 20 würde 20 ausgelassen und es ergäbe sich 90.
Lass für ein Einmaleins den Zahlenbereich die Faktoren liefern:
for i in range(1, 11):
print(7, "x", i, "=", 7 * i)
Die erste Ausgabezeile lautet 7 x 1 = 7 und die zehnte 7 x 10 = 70. Wenn die Zahl selbst nicht verwendet wird, kann for _ in range(3): eine Meldung dreimal wiederholen.
Einen Zahlenbereich untersuchen und seine Argumente prüfen
list(range(2, 6)) erzeugt [2, 3, 4, 5], was beim Prüfen der Grenzen hilfreich ist. len(range(0, 10, 3)) ist 4. Ein Zahlenbereich speichert seine definierenden Grenzen und seine Schrittweite, statt eine Liste mit jeder ganzen Zahl zu erstellen.
Die Argumente sind ganze Zahlen, darunter null und negative ganze Zahlen: range(-3, 3) durchläuft -3 bis 2. Eine Gleitkommazahl wie 3.0 wird mit TypeError zurückgewiesen, obwohl sie keinen Nachkommaanteil hat. Eine als Text eingegebene Anzahl kann zuerst mit n = int(input("How many? ")) umgewandelt und dann in range(n) verwendet werden.
Wichtige Erkenntnisse
- Die Endgrenze eines Zahlenbereichs ist in jeder Form ausgeschlossen.
- Ein fehlender Startwert ist standardmäßig 0; eine fehlende Schrittweite ist standardmäßig 1.
- Zähle mit einer negativen Schrittweite und einer Endgrenze unter dem Startwert rückwärts.
- Grenzen, die nicht zur Richtung der Schrittweite passen, ergeben einen leeren Zahlenbereich.
- Die Argumente von range müssen ganze Zahlen sein und die Schrittweite darf nicht null sein.
- Untersuche die gelieferten Werte mit
list()und ihre Anzahl mitlen().
2.3 Eine zur Aufgabe passende Schleife wählen
Wähle eine Schleife, indem du fragst, was die Wiederholung steuert. Gibt es eine Sequenz von Elementen oder eine Anzahl von Wiederholungen, drückt for die Aufgabe meist direkt aus. Hängt die nächste Wiederholung von einer veränderlichen Bedingung oder einer zukünftigen Eingabe ab, setzt while diese Entscheidung in seinen Schleifenkopf.
Festgelegte Elemente oder eine veränderliche Bedingung
| Aufgabe | Naheliegende Schleife | Grund |
|---|---|---|
| Jeden Namen in einer Liste anzeigen | for name in names: | Die Liste liefert die Elemente. |
| Eine Meldung so oft wiederholen, wie der Benutzer vorgibt | for _ in range(n): | Die eingegebene Zahl liefert eine Anzahl. |
| Nachrichten bis zur Eingabe von „quit“ lesen | while | Der Endpunkt hängt von einer zukünftigen Eingabe ab. |
| Ein Guthaben bis zu einem Zielwert wachsen lassen | while balance < target: | Das aktuelle Guthaben entscheidet über eine Wiederholung. |
Eine Anzahl muss nicht als Literal im Programm stehen. Nachdem n eingelesen wurde, liefert range(n) weiterhin eine festgelegte Folge von Schritten. Eine Schleife mit unbestimmter Anzahl von Durchläufen wartet auf eine Bedingung, deren Endpunkt nicht als Anzahl von Wiederholungen festgelegt ist.
Eine große Anzahl von Wiederholungen zu schätzen, passt schlecht zu „bis zum Ende“. Eine Schleife über range(1000) kann ihre Versuche aufbrauchen, bevor der Benutzer fertig ist, und eine Version ohne Abbruchprüfung läuft nach Abschluss der Aufgabe weiter.
Eine Zählschleife umschreiben
Diese beiden Schleifen geben 1 bis 5 aus, jede Zahl in einer eigenen Zeile:
for i in range(1, 6):
print(i)
i = 1
while i < 6:
print(i)
i += 1
In der while-Version wird der Startwert des Zahlenbereichs zur Initialisierung, die ausgeschlossene Endgrenze zum <-Vergleich und die Schrittweite zur Aktualisierung. Der Körper verwendet i vor dieser Aktualisierung. Würde die Aktualisierung vor print(i) verschoben, verschöben sich die ausgegebenen Werte.
Beim Rückwärtszählen ändern sich sowohl der Vergleich als auch die Aktualisierung:
i = 10
while i > 0:
print(i)
i -= 2
Dies gibt 10, 8, 6, 4 und 2 aus, genau wie for i in range(10, 0, -2):. Der absteigende Zahlenbereich schließt seine Endgrenze aus, daher lautet die entsprechende while-Bedingung i > 0.
Beide Formen erfüllen die Aufgabe, die Zahlen auszugeben; ihre Endwerte für die Schleifenvariable unterscheiden sich. Die while-Version führt vor dem Anhalten ihre letzte Aktualisierung auf 0 aus. Die for-Version endet, nachdem sie ihren letzten gelieferten Wert 2 zugewiesen hat.
Ein Zahlenbereich behält die angegebenen Grenzen
n = 3
for i in range(n):
n = 10
print(i)
Dies gibt weiterhin 0, 1 und 2 aus. Der Zahlenbereich wurde mit 3 erstellt; die Zuweisung von 10 an n erstellt ihn nicht neu. Ein break kann die Schleife vorzeitig beenden, aber eine Änderung dieser separaten Variablen ändert die vom Zahlenbereich gelieferten Zahlen nicht.
Ein while-Kopf wertet dagegen seinen Ausdruck bei jeder Rückkehr erneut aus. Verwendet dieser Ausdruck n, kann eine Änderung von n im Körper beeinflussen, wann die Schleife endet. Wenn beide Formen eine Zählaufgabe klar ausdrücken, übernimmt die for-Version das Weiterzählen ohne eine Aktualisierung von Hand, die man vergessen könnte.
Wichtige Erkenntnisse
- Verwende for, um vorgegebene Elemente oder eine bekannte Anzahl zu durchlaufen, auch wenn die Anzahl erst zur Laufzeit eingelesen wird.
- Verwende while, wenn eine veränderliche Bedingung oder eine zukünftige Eingabe die Wiederholung steuert.
- Beim Umschreiben einer Zählschleife müssen Startwert, Grenze, Schrittweite und Reihenfolge der Arbeit erhalten bleiben.
- Die Änderung einer Variablen, mit der ein Zahlenbereich erstellt wurde, verändert diesen Zahlenbereich nicht.
3Eine Schleife mit break, continue und else steuern
Eine Schleife führt normalerweise ihren Körper vollständig aus und kehrt für einen weiteren Durchlauf zurück. Manchmal soll sie enden, sobald ein Ergebnis vorliegt, oder das aktuelle Element überspringen und weiterlaufen. Break und continue drücken diese Entscheidungen aus. Eine Schleife kann auch einen else-Block für die reguläre Beendigung haben. Wenn du den genauen Sprung jeder Anweisung verfolgst, kannst du Suchvorgänge, Eingabeschleifen und begrenzte Versuche lesen, ohne einen vorzeitigen Abbruch mit einem regulären Ende zu verwechseln.
3.1 Mit break vorzeitig stoppen
break beendet sofort die innerste Schleife, die die Anweisung enthält. Python überspringt den Rest dieses Körpers und alle verbleibenden Durchläufe und fährt dann nach der Schleife fort. Eine Bedingung innerhalb des Körpers entscheidet, wann dieser vorzeitige Abbruch erfolgen soll.
Beim ersten gefundenen Ergebnis stoppen
Suche das erste Vielfache von 7 über 50:
for n in range(51, 100):
if n % 7 == 0:
print(n)
break
Die Schleife prüft 51, 52, 53, 54, 55 und 56. Bei 56 ist der Rest null, sodass Python 56 ausgibt und die Schleife verlässt. Es sind sechs Durchläufe nötig, obwohl der Zahlenbereich 49 Zahlen liefern kann. Ohne break würde die Schleife auch spätere Vielfache von 7 ausgeben.
break ist innerhalb des if eingerückt und wird daher nur bei einem Treffer ausgeführt. Stünde es stattdessen auf Höhe von if, würde es unabhängig von der Prüfung bereits beim ersten Durchlauf ausgeführt. Ein break innerhalb eines if beendet die Schleife, die dieses if enthält; es beendet nicht nur den bedingten Block.
Einmal lesen und dann über die Verarbeitung entscheiden
Eine while True-Schleife platziert die Entscheidung über den Abbruch nach dem Einlesen:
while True:
line = input("> ")
if line == "done":
break
print(line)
print("Done!")
Bei den Eingaben „hello“, „there“ und „done“ lauten die Antwortzeilen:
hello
there
Done!
Der Sentinelwert wird vor der Verarbeitungszeile geprüft. Wenn er erscheint, überspringt break die Anweisung print(line). Das letzte nicht eingerückte print wird weiterhin nach der Schleife ausgeführt. Es gibt nur eine input-Anweisung, weil jeder Durchlauf mit dem Einlesen einer neuen Zeile beginnt.
Eine numerische Summe verwendet dieselbe Reihenfolge: Initialisiere total = 0 vor der Schleife; lies eine Zahl und wandle sie um; brich ab, wenn sie 0 ist; addiere sie andernfalls. Für 4, 7 und 0 beträgt die Summe 11. Würde vor der Abbruchprüfung verarbeitet, gelangte der Sentinelwert in die Berechnung. Das ist relevant, wenn der Stoppwert eine Anzahl, ein Produkt oder ein arithmetisches Mittel verändern könnte.
Bei der Eingabe validieren
while True:
age = int(input("Age: "))
if 0 <= age <= 120:
break
print("Please enter an age from 0 to 120.")
print("Accepted:", age)
Der verkettete Vergleich akzeptiert ein Alter von 0 bis einschließlich 120. Er bedeutet 0 <= age and age <= 120. Eine akzeptierte Zahl führt vor der Warnung aus der Schleife; eine Zahl außerhalb dieses Bereichs führt zur Warnung und dann zu einer weiteren Eingabe. In dieser Form beschreibt das if eine gültige Antwort, während eine über den Schleifenkopf gesteuerte Validierungsschleife eine ungültige Antwort beschreibt.
Den Sprung wörtlich lesen
Eine Anweisung nach break im selben Block kann nicht ausgeführt werden. Setze eine Meldung oder ein gespeichertes Ergebnis vor das break, wenn sie zum Erfolgsfall gehören. Setze Code nach die Schleife, wenn er sowohl nach einem vorzeitigen Abbruch als auch nach regulärer Beendigung ausgeführt werden soll.
break muss innerhalb einer Schleife stehen; andernfalls löst Python SyntaxError aus. Mehrere getrennte Ausgänge können eine Schleife schwerer nachvollziehbar machen. Wenn eine einzige Bedingung die Abbruchregel der Aufgabe auf natürliche Weise beschreibt, kann sie im Schleifenkopf den Ablauf leichter nachvollziehbar machen.
Wichtige Erkenntnisse
- Break beendet sofort die innerste Schleife, die es enthält.
- Setze break in die Bedingung, die den Abbruch auslösen soll.
- Eine while True-Eingabeschleife liest Daten ein, prüft auf den Sentinelwert und verarbeitet dann die Daten.
- Anweisungen nach break im selben Block sind unerreichbar.
3.2 Ein Element mit continue überspringen
continue überspringt den Rest des aktuellen Durchlaufs. Die Schleife bleibt aktiv: Eine for-Schleife nimmt ihr nächstes Element und eine while-Schleife kehrt zu ihrer Bedingung zurück. Das ist nützlich, wenn ein Element nicht von den Verarbeitungsschritten betroffen sein soll, die auf eine Prüfung folgen.
Ausgewählte Werte überspringen
total = 0
for n in range(1, 11):
if n % 3 == 0:
continue
total += n
print(total)
Der Zahlenbereich liefert alle zehn ganzen Zahlen von 1 bis einschließlich 10. Bei 3, 6 und 9 überspringt continue die Addition. Die Summe aller zehn ist 55; lässt man diese drei Werte aus, entfallen 18, sodass das Programm 37 ausgibt.
Continue entfernt keinen Durchlauf aus dem Zahlenbereich. Der Körper beginnt weiterhin mit jedem Wert, auch mit den übersprungenen. Es ändert, welche späteren Zeilen in diesem Durchlauf ausgeführt werden.
Ein positiver Filter kann dieselbe Arbeit ausdrücken. In einer Schleife über [5, -2, 8, -7, 3] gibt if n < 0: continue gefolgt von print(n) die Werte 5, 8 und 3 aus. Setzt man die print-Anweisung in if n >= 0:, ergibt sich dieselbe Ausgabe. Continue ist oft hilfreich, wenn mehrere Verarbeitungszeilen folgen, weil zurückgewiesene Elemente diesen Teil des Körpers sofort verlassen können.
Eine while-Aktualisierung nicht überspringen
i = 0
while i < 5:
if i == 2:
continue
print(i)
i += 1
Dies gibt 0 und 1 aus und bleibt dann bei 2 hängen. Bei 2 springt continue zur Bedingung, ohne die Aktualisierung zu erreichen. Die Bedingung bleibt wahr und derselbe Zweig wird erneut ausgeführt.
Um die Ausgabe von 2 zu überspringen und dennoch voranzukommen, aktualisiere auch in diesem Zweig:
i = 0
while i < 5:
if i == 2:
i += 1
continue
print(i)
i += 1
Nun lautet die Ausgabe 0, 1, 3 und 4 in getrennten Zeilen. Der Weg mit dem Überspringen führt von 2 zu 3. Jeder Weg durch diesen Körper führt genau eine Aktualisierung aus.
Break, continue und pass
| Anweisung | Wirkung beim Erreichen |
|---|---|
break | Die enthaltende Schleife sofort beenden. |
continue | Den Rest dieses Durchlaufs überspringen und die nächste Schleifenprüfung oder das nächste Element beginnen. |
pass | Nichts tun; normal mit der folgenden Anweisung fortfahren. |
Angenommen, bei einer Schleife über [1, 2, 3, 4] enthält ein if n == 2: eine dieser Anweisungen und print(n) folgt auf das if. Break gibt nur 1 aus. Continue gibt 1, 3 und 4 aus. Pass gibt alle vier Werte aus, weil es die print-Anweisung nicht überspringt.
pass kann während der Codeentwicklung einen Körper füllen, in dem Python eine Anweisung verlangt. Es liefert weder eine Aktualisierung noch einen Ausgang: while True: pass läuft weiter. Break und continue müssen innerhalb einer Schleife stehen und wirken nur auf die innerste Schleife, die sie enthält.
Wichtige Erkenntnisse
- Continue überspringt die verbleibenden Anweisungen des aktuellen Durchlaufs, danach läuft die Schleife weiter.
- Ein übersprungenes Element zählt weiterhin als Durchlauf.
- Jeder sich wiederholende Weg durch einen while-Körper muss weiterhin zum Ausgang führen können.
- Pass tut nichts und überspringt keine späteren Anweisungen.
- Break beendet die Schleife; continue hält sie aktiv.
3.3 Was das else einer Schleife bedeutet
Ein else-Block kann zu einer for- oder while-Schleife gehören. Er wird einmal ausgeführt, wenn die Schleife regulär endet: Eine for-Schleife hat ihre Elemente aufgebraucht oder eine while-Bedingung wird falsch. Endet diese Schleife durch break, wird der Block übersprungen. Lies ihn als den Fall ohne break.
Eine Suche ohne Treffer melden
for n in [4, 9, 15, 22]:
if n % 5 == 0:
print("First multiple of 5:", n)
break
else:
print("No multiple of 5")
Die Schleife erreicht 15, gibt First multiple of 5: 15 aus und wird abgebrochen. Das else wird übersprungen. Bei [4, 9, 22] durchläuft die Schleife jedes Element ohne Abbruch und gibt einmal No multiple of 5 aus.
Die Ausrichtung ist entscheidend. Das else steht auf Höhe von for und gehört deshalb zur Schleife. Ein else auf Höhe des inneren if würde für jedes nicht passende Element ausgeführt und einen Misserfolg melden, bevor die Suche beendet ist.
Auch eine leere Liste führt zum else der Schleife. Es gibt keine Elemente, daher wird der Körper nullmal ausgeführt und es erfolgt kein break. Ebenso führt eine while-Schleife, deren Bedingung bei der ersten Prüfung falsch ist, sofort ihr else aus.
Nach einem Teiler suchen
Eine Primzahl ist eine ganze Zahl von mindestens 2, deren einzige positive Teiler 1 und die Zahl selbst sind. Suche nach einem Teiler zwischen diesen beiden Werten:
n = 29
if n < 2:
print("Not prime")
else:
for d in range(2, n):
if n % d == 0:
print(n, "is divisible by", d)
break
else:
print(n, "is prime")
Für 29 ist jeder Rest ungleich null und das else der Schleife gibt 29 is prime aus. Für 21 ist der erste Teiler 3 und der break überspringt das else der Schleife. Die äußere Prüfung behandelt Zahlen unter 2. Ohne sie würde ein leerer Zahlenbereich für 1 zum else führen und 1 fälschlich als Primzahl bezeichnen. Für 2 ist der Zahlenbereich ebenfalls leer, aber die Schlussfolgerung „Primzahl“ ist richtig.
Begrenzte Versuche mit while und else
attempts = 0
while attempts < 3:
guess = input("Password: ")
if guess == "open sesame":
print("Welcome!")
break
attempts += 1
else:
print("Too many attempts.")
Eine richtige Eingabe führt zum break, auch beim dritten Versuch. Drei falsche Eingaben erhöhen den Zähler auf 3; die Bedingung wird falsch und das else gibt die Fehlermeldung aus. Eine gewöhnliche Anweisung nach der Schleife würde in beiden Fällen ausgeführt und könnte sie daher nicht unterscheiden.
Das Ergebnis mit einer Merkvariablen festhalten
Eine Merkvariable ist eine boolesche Variable, die festhält, ob etwas geschehen ist. Beginne mit found = False, ändere den Wert bei einem Treffer zu True und brich ab. Nach der Schleife behandelt if not found: den Misserfolg. Das liefert dasselbe Suchergebnis wie das else der Schleife und hält das Ereignis ausdrücklich fest. Wähle eine Form, deren Einrückung und Abbruchweg du klar erklären kannst.
Wichtige Erkenntnisse
- Das else einer Schleife wird bei regulärer Beendigung ausgeführt und bei einem break aus dieser Schleife übersprungen.
- Ein else auf Höhe eines inneren if hat eine andere Bedeutung.
- Auch bei null Durchläufen wird das else der Schleife erreicht.
- Eine Suche kann einen Misserfolg einmal melden, nachdem jedes Element die Prüfung nicht bestanden hat.
- Eine boolesche Merkvariable kann ein Ergebnis zur Verwendung nach der Schleife festhalten.
- Bei einer leeren Teilersuche ist die separate Regel nötig, dass Primzahlen mindestens 2 sind.
4Gängige Schleifenmuster verwenden
Viele Schleifenaufgaben folgen einer kleinen Auswahl wiederverwendbarer Muster. Ein Zähler hält fest, wie oft eine Prüfung erfolgreich ist, ein Akkumulator baut ein Ergebnis auf und eine Variable für den bisher besten Wert speichert ein Maximum oder Minimum. Suchvorgänge halten auf ähnliche Weise einen Treffer fest. Der Startwert und die Stelle, an der er sich ändert, bestimmen, was das Endergebnis bedeutet. Du behandelst auch leere Daten und Gleichstände, bei denen eine kleine Entscheidung die Antwort ändern kann.
4.1 Anzahlen, Summen, Produkte und Text aufbauen
Ein Akkumulator bewahrt ein Ergebnis zwischen den Durchläufen. Ein Zähler ist ein besonderer Akkumulator, der jedes Mal um 1 steigt, wenn ein Ereignis eintritt. Setze den Startwert vor der Schleife, aktualisiere ihn innerhalb der Schleife und verwende das fertige Ergebnis danach.
Ereignisse zählen oder Werte addieren
count = 0
for n in [4, 15, 22, 8, 11]:
if n > 10:
count += 1
print(count)
Die Prüfung ist für 15, 22 und 11 erfolgreich, sodass die Ausgabe 3 lautet. Die Aktualisierung addiert 1 für ein passendes Element; die Addition von n würde stattdessen die passenden Werte aufsummieren.
Um jedes Element zu summieren, initialisiere total = 0, entferne die if-Prüfung, füge total += n direkt im Körper hinzu und gib total danach aus. Die fünf Werte ergeben zusammen 60. Ihr arithmetisches Mittel ist 60 / 5, was 12.0 ergibt; die Division mit / gibt für diese ganzzahligen Operanden eine Gleitkommazahl zurück.
Für das arithmetische Mittel ausgewählter Werte aktualisiere Summe und Anzahl unter derselben Bedingung:
total = 0
count = 0
for n in [4, 15, 22, 8, 11]:
if n > 10:
total += n
count += 1
if count > 0:
print(total / count)
else:
print("No matching values")
Hier ist die Summe der ausgewählten Werte 48 und ihre Anzahl 3, sodass die Ausgabe 16.0 lautet. Eine Division durch die Länge der ganzen Liste würde die falsche Gruppe verwenden. Die Prüfung der Anzahl behandelt auch eine leere Liste oder eine Liste ohne Treffer.
Einen zur Operation passenden Startwert wählen
| Ergebnis | Startwert | Aktualisierung |
|---|---|---|
| Anzahl | 0 | Für ein Ereignis 1 addieren. |
| Summe | 0 | Jeden ausgewählten Wert addieren. |
| Produkt | 1 | Mit jedem ausgewählten Wert multiplizieren. |
| Text | "" | Jedes neue Stück an den gesammelten Text anfügen. |
Ein Produkt der ganzen Zahlen von 1 bis 5 beginnt bei 1 und endet bei 120. Ein Start bei 0 würde jedes Produkt bei 0 halten.
Auch beim Aufbau von Text ist die Reihenfolge wichtig:
rev = ""
for ch in "stressed":
rev = ch + rev
print(rev)
Jedes neue Zeichen wird vor den gespeicherten Text gesetzt, sodass desserts entsteht. Ändert man die Aktualisierung zu rev = rev + ch, werden Zeichen am Ende angefügt und stressed entsteht erneut.
Das Ergebnis zwischen den Durchläufen bewahren
Wird total = 0 in eine Summenschleife verschoben, geht die bisherige Arbeit bei jedem Durchlauf verloren. Bei [4, 15, 22, 8, 11] bleibt nach dem Zurücksetzen vor jeder Addition am Ende nur 11 übrig. Initialisiere außerhalb der Schleife, damit die nächste Addition die vorherige Zwischensumme verwendet.
Eine print-Anweisung im Körper zeigt nach jeder Aktualisierung die laufende Summe: in diesem Beispiel 4, 19, 41, 49 und 60. Eine print-Anweisung nach der Schleife zeigt nur 60. Wähle die Position passend zur gewünschten Ausgabe.
Für eine einfache gespeicherte Liste liefert sum(values) ihre Summe und len(values) ihre Anzahl. Eine ausdrücklich geschriebene Schleife ermöglicht es, Werte zu filtern, mehrere Ergebnisse gemeinsam zu verfolgen oder Werte bei ihrer Eingabe zu verarbeiten.
Wichtige Erkenntnisse
- Initialisiere einen Akkumulator vor der Schleife, damit er frühere Ergebnisse behält.
- Ein Zähler addiert 1 pro Ereignis; eine Summe addiert den Wert selbst.
- Beginne Summen bei 0, Produkte bei 1 und Text mit einer leeren Zeichenkette.
- Zähle und summiere für das arithmetische Mittel einer Auswahl dieselben ausgewählten Werte.
- Prüfe vor der Division, ob die Anzahl ungleich null ist.
- Gib innerhalb der Schleife laufende Ergebnisse und nach der Schleife ein Endergebnis aus.
- Ob ein Zeichen vor oder nach dem gespeicherten Text angefügt wird, ändert die Reihenfolge.
4.2 Den bisher besten Wert festhalten
Um ein Maximum zu finden, halte den bisher größten Wert fest. Vergleiche jedes neue Element mit diesem gespeicherten Wert und ersetze ihn nur, wenn das neue Element größer ist. Das Minimummuster funktioniert genauso mit umgekehrtem Vergleich.
Ohne erfundenen Datenwert beginnen
None ist Pythons Wert für „noch nichts“. Damit kann das erste Element auf klare Weise zum aktuell besten werden:
largest = None
for n in [12, -3, 25, 7]:
if largest is None or n > largest:
largest = n
print(largest)
Die gespeicherten Werte nach jedem Element sind 12, 12, 25 und 25. Das Programm gibt 25 aus. Beim ersten Element ist largest is None wahr. Pythons or beendet die Auswertung dort und versucht daher nicht den ungültigen Vergleich einer Zahl mit None. Bei späteren Durchläufen ist der gespeicherte Wert eine Zahl und der zweite Vergleich wird verwendet.
Für ein Minimum beginne mit smallest = None und verwende smallest is None or n < smallest. Dieselbe Liste ergibt -3.
Beginnt die Suche nach einem Maximum bei 0, kann sie einen Wert melden, der nie vorkam. Für -5, -2 und -9 überschreitet kein Wert die 0, sodass diese Version fälschlich 0 behalten würde. Das Maximum ist -2. Beginnt die Suche nach einem Minimum bei 0, entsteht das entsprechende Problem, wenn jedes Element positiv ist.
Ist bekannt, dass die Daten ein Element enthalten, funktioniert auch der erste Wert als bisher bester Startwert. Eingebaute Funktionen decken einfache gespeicherte Listen ab: max([12, -3, 25, 7]) ergibt 25 und min([12, -3, 25, 7]) ergibt -3. Eine selbst geschriebene Schleife kann zugehörige Informationen festhalten, etwa wo der Wert vorkam.
Die Position speichern, wenn sich der beste Wert ändert
largest = None
best_day = None
day = 0
for temperature in [18, 23, 21, 26, 24]:
day += 1
if largest is None or temperature > largest:
largest = temperature
best_day = day
print(largest, best_day)
Der Tageszähler steigt bei jedem Element. Der beste Tag ändert sich nur, wenn ein neues Maximum erscheint. Die endgültige Ausgabe lautet 26 4, also eine Temperatur von 26 an Tag 4. Würde der Tag nach der Schleife gespeichert, wäre das lediglich der zuletzt geprüfte Tag.
Entscheiden, was bei Gleichstand geschehen soll
Für [5, 8, 8, 3] behält die Prüfung n > largest die erste 8 und ihre Position, beim Zählen ab 1 die Position 2. Ersetzt man > durch >=, wird auch bei einem gleichen Wert aktualisiert und die letzte 8 an Position 3 behalten. Die größte Zahl bleibt gleich; die gespeicherte Position unterscheidet sich.
Eine leere Liste lässt einen mit None initialisierten besten Wert unverändert. Prüfe diesen Zustand, bevor du eine Zahl meldest oder damit rechnest. Er bedeutet, dass kein Element einen besten Wert geliefert hat.
Der Vergleich kann eine Eigenschaft eines Elements verwenden. Um das längste Wort unter „pear“, „banana“ und „fig“ zu behalten, vergleiche len(word) mit der Länge des gespeicherten Wortes. „Banana“ hat sechs Zeichen und gewinnt daher. Speichere das Wort selbst, wenn es zum besten wird, damit das Ergebnis das Element und nicht nur seine Länge bezeichnet.
Wichtige Erkenntnisse
- Vergleiche jedes neue Element mit dem bisher besten und ersetze den besten Wert, wenn das neue Element besser ist.
- None hält fest, dass noch kein erstes Element gefunden wurde.
- Die Kurzschlussauswertung von
orvermeidet den Vergleich der ersten Zahl mit None. - Null ist kein allgemein sicherer Startwert für Maxima oder Minima.
- Speichere eine Position gleichzeitig mit dem zugehörigen besten Wert.
- Ein strenger Vergleich behält den ersten besten Wert bei Gleichstand; lässt der Vergleich Gleichheit zu, bleibt der letzte erhalten.
4.3 Einen Treffer suchen und festhalten
Eine lineare Suche prüft Elemente der Reihe nach, bis sie einen Treffer findet oder keine Elemente mehr übrig sind. Ein Treffer kann ein exakter Wert, das erste Element sein, das eine Bedingung erfüllt, oder ein Beleg für eine Frage nach mindestens einem oder nach allen Elementen.
Einen Erfolg festhalten
names = ["Ana", "Ben", "Chen"]
found = False
for name in names:
if name == "Ben":
found = True
break
if found:
print("Ben is on the list")
else:
print("Ben is not on the list")
Die Merkvariable beginnt mit dem Wert falsch, weil noch nichts gefunden wurde. Die erste Prüfung, Ana, lässt sie unverändert. Die zweite Prüfung findet Ben, setzt die Merkvariable auf wahr und beendet die Suche. Die Ausgabe lautet Ben is on the list.
Die Merkvariable hält ein Ereignis über die ganze Suche hinweg fest. Setze sie nicht bei jeder Nichtübereinstimmung zurück. Wenn eine Schleife nach dem Finden von Ben weiterläuft und bei Chen found = False setzt, geht das erfolgreiche Ergebnis verloren. Ebenso gehört „nicht gefunden“ an die Stelle nach allen erfolglosen Prüfungen, nicht in ein else für jedes Element, das bereits für Ana einen Misserfolg meldet, bevor Ben geprüft wird.
Erster oder letzter Treffer
Für [7, 4, 9, 10] ist die erste gerade Zahl 4 und die letzte 10. Diese Schleife speichert die erste:
match = None
for n in [7, 4, 9, 10]:
if n % 2 == 0:
match = n
break
print(match)
Die Ausgabe ist 4. Entferne den break und jeder neue Treffer überschreibt den vorherigen, sodass 10 bleibt. Passt nichts, bleibt der gespeicherte Wert None. Entscheide, ob die Aufgabe nach dem Vorhandensein, dem ersten Element, dem letzten Element oder einer Position fragt, bevor du festlegst, was gespeichert wird.
Um eine Position zu melden, führe einen Zähler, der bei jedem geprüften Element steigt, und speichere ihn bei einem Treffer. Gib an, wie die Positionen nummeriert werden: Beim Zählen ab 1 steht Chen in der Namensliste an Position 3; Pythons übliche Positionsnummerierung beginnt bei 0.
Für mindestens eins genügt ein Erfolg; für alle genügt ein Misserfolg
Eine Suche nach mindestens einem Treffer beginnt mit falsch und wird beim ersten Element, das die Prüfung besteht, wahr. Sie kann dort enden, weil ein Erfolg die Frage beantwortet.
Eine Prüfung aller Elemente beginnt mit wahr und wird beim ersten Misserfolg falsch:
all_positive = True
for n in [3, 8, -1, 5]:
if n <= 0:
all_positive = False
break
print(all_positive)
Der dritte Wert, -1, widerlegt „Alle Werte sind positiv“, sodass die Ausgabe False lautet. Es ist nicht nötig, 5 zu prüfen. Auch null würde die Prüfung nicht bestehen, weil positiv größer als null bedeutet. Gibt es keine Elemente, bleibt die Merkvariable wahr: Es ist kein Gegenbeispiel aufgetreten.
Exakte Zugehörigkeit und eigene Bedingungen
Für Gleichheit allein liefert "Ben" in names direkt True oder False. Eine Schleife macht den sich ändernden Suchzustand sichtbar und erlaubt eine eigene Bedingung, etwa „das erste Wort mit mehr als fünf Zeichen“.
Zeichenkettenvergleiche sind exakt. "ben" unterscheidet sich von "Ben", und "Ben " enthält ein Leerzeichen am Ende. Eine Suche nach einer dieser Zeichenketten darf die anderen nicht als gleich behandeln.
Wichtige Erkenntnisse
- Eine lineare Suche prüft Elemente der Reihe nach, bis ihre Abbruchregel erfüllt ist.
- Initialisiere eine Merkvariable für einen Treffer einmal und behalte einen festgehaltenen Erfolg.
- Melde „nicht gefunden“ erst, nachdem die vollständige Suche erfolglos war.
- Break behält den ersten Treffer; Überschreiben bei jedem Treffer behält den letzten.
- Eine Mindestens-eins-Prüfung stoppt bei einem Erfolg; eine Alle-Prüfung stoppt bei einem Gegenbeispiel.
- Die Gleichheit von Zeichenketten unterscheidet Groß- und Kleinschreibung sowie Leerzeichen.
5Verschachtelte Schleifen schreiben
Eine Schleife innerhalb einer anderen Schleife kann Zeilen erstellen, Kombinationen prüfen oder Arbeit für jede Gruppe wiederholen. Die äußere Schleife wählt eine Gruppe; die innere Schleife erledigt ihre Arbeit für diese Gruppe, bevor die äußere Schleife weitergeht. Bei dieser Struktur sind die Einrückung und die Platzierung des Zurücksetzens besonders wichtig. Du zählst innere Ausführungen, erstellst ein kleines Raster und eine wachsende Form und verfolgst vorzeitige Abbrüche, die eine Schleife oder beide betreffen.
5.1 Zeilen, Kombinationen und wachsende Muster
Eine verschachtelte Schleife ist eine Schleife im Körper einer anderen Schleife. Bei jedem äußeren Durchlauf beginnt die innere Schleife und führt ihre Arbeit vollständig aus. Die äußere Variable bleibt gleich, während sich die innere Variable ändert.
Eine Zeile nach der anderen erstellen
for row in range(1, 4):
for col in range(1, 5):
print(row * col, end=" ")
print()
Die Ausgabe hat diese drei Zeilen, jeweils mit einem Leerzeichen nach der letzten Zahl:
1 2 3 4
2 4 6 8
3 6 9 12
Zuerst ist row gleich 1, während col die Werte 1 bis 4 annimmt. Dann wird row zu 2 und die innere Schleife beginnt erneut bei Spalte 1. Schließlich erhält Zeile 3 dieselben vier Spalten. Der innere Körper wird zwölfmal ausgeführt.
end=" " ersetzt den üblichen Zeilenumbruch von print durch ein Leerzeichen. Das leere print() beendet die Zeile. Es steht innerhalb des äußeren, aber außerhalb des inneren Körpers und wird daher dreimal ausgeführt. Eine Einrückung um eine weitere Ebene würde jede Zahl in eine eigene Zeile setzen. Ohne Einrückung würde es erst nach beiden Schleifen einmal eine Zeile beenden.
Gib den Schleifenvariablen unterschiedliche Namen, etwa row und col. Wird der äußere Name in der inneren Schleife erneut verwendet, überschreibt das den Wert, der zur Bestimmung der aktuellen Zeile benötigt wird.
Die Arbeit zählen
Hat jeder äußere Durchlauf dieselbe Anzahl innerer Durchläufe, multipliziere die Anzahlen. Drei Zeilen und vier Spalten ergeben zwölf Ausführungen des inneren Körpers. Zwei Schleifen mit je 100 Durchläufen ergeben 10.000 innere Ausführungen; drei Ebenen ergeben 1.000.000. Eine kleine Erhöhung jeder Grenze kann daher zu deutlich mehr wiederholter Arbeit führen.
Ändert sich die innere Grenze mit der äußeren Variablen, addiere die einzelnen Anzahlen:
for row in range(1, 5):
for _ in range(row):
print("*", end="")
print()
Dies gibt aus:
*
**
***
****
Die Zeilenlängen sind 1, 2, 3 und 4, also insgesamt zehn Sterne. Für ein Muster mit n solchen Zeilen ist die Gesamtzahl . Eine Multiplikation von vier mit vier würde fälschlich voraussetzen, dass jede Zeile vier Sterne hat.
Ein Ergebnis für jede Gruppe zurücksetzen
Um jede Zeile des Einmaleinsrasters zu summieren, setze row_total = 0 innerhalb der äußeren Schleife direkt vor der inneren Schleife. Addiere row * col im inneren Körper und gib row_total nach der inneren Schleife aus. Die Ausgaben sind 10, 20 und 30.
Eine Initialisierung nur einmal vor beiden Schleifen behält auch die Summen früherer Zeilen. Eine Ausgabe nach jeder Zeile ergibt dann 10, 30 und 60. Beide Platzierungen bewahren ein Ergebnis, aber eine bewahrt ein Zeilenergebnis und die andere eine laufende Summe des ganzen Rasters.
Kombinationen durchlaufen
Zwei Schleifen über range(1, 7) durchlaufen alle 36 geordneten Ergebnisse für zwei Würfel. Die erste Schleife liefert den ersten Würfel und die zweite den zweiten Würfel. Eine Bedingung im inneren Körper kann Paare mit der Summe 7 zählen. Sechs erfüllen sie: (1, 6), (2, 5), (3, 4), (4, 3), (5, 2) und (6, 1). Die Umkehrung eines Paars beschreibt ein anderes geordnetes Ergebnis.
Wichtige Erkenntnisse
- Die innere Schleife beginnt bei jedem äußeren Durchlauf erneut.
- Multipliziere die Anzahlen der Durchläufe nur, wenn die Länge der inneren Schleife fest bleibt.
- Addiere die Zeilenlängen, wenn die innere Grenze von der Zeile abhängt.
- Die Einrückung bestimmt, ob eine Aktion pro Element, pro Zeile oder insgesamt einmal geschieht.
- Setze einen zeilenweisen Akkumulator innerhalb der äußeren Schleife vor der inneren Schleife zurück.
- Unterschiedliche Namen für Schleifenvariablen halten Zeilen- und Spaltenwerte verfügbar.
5.2 Innerhalb verschachtelter Schleifen überspringen und stoppen
Break und continue wirken auf die innerste Schleife, die sie enthält. Suche bei verschachteltem Code diese Schleife, bevor du vorhersagst, was als Nächstes geschieht. Ein break im inneren Körper stoppt nicht von selbst die äußere Schleife.
Einen inneren break verfolgen
for a in range(1, 4):
for b in range(1, 4):
if b > a:
break
print(a, b)
Bei a = 1 wird das Paar 1 1 ausgegeben. Wird b zu 2, beendet der break diese innere Schleife. Die äußere Schleife geht zu a = 2 weiter und beginnt eine neue innere Schleife mit b gleich 1. Sie gibt 2 1 und 2 2 aus und bricht dann bei b gleich 3 ab. Für a gleich 3 besteht jeder Wert von b die Prüfung. Die sechs Ausgabezeilen lauten:
1 1
2 1
2 2
3 1
3 2
3 3
Beide Schleifen mit einem festgehaltenen Ergebnis stoppen
Eine Suche nach einer Kombination kann eine Merkvariable und je einen break auf jeder Ebene verwenden:
found = False
for a in range(1, 6):
for b in range(1, 6):
if a * b == 12:
found = True
break
if found:
break
if found:
print(a, b)
else:
print("No matching pair")
Die Zeilen mit a gleich 1 und 2 enthalten keinen Treffer. In Zeile 3 erreicht b den Wert 4 und das Produkt ist 12. Der innere break beendet die b-Schleife; die Merkvariable bewirkt dann, dass der äußere break ausgeführt wird. Die endgültige Ausgabe lautet 3 4.
Die Merkvariable wird vor beiden Schleifen initialisiert, weil sie ein Ergebnis für die gesamte Suche festhält. Das äußere if found: gehört nach die innere Schleife, aber innerhalb des äußeren Körpers. Durch seine Einrückung erfolgt eine Prüfung pro abgeschlossener oder unterbrochener Zeile.
Werte bewahren, wenn die Suche weiterläuft
Wird nur der äußere break entfernt, setzt sich die Suche in späteren Zeilen fort. In diesem Beispiel ist ein späterer Treffer 4 3, aber die Schleife prüft schließlich Zeile 5 und endet mit a = 5 und b = 5. Die Ausgabe der Schleifenvariablen ergibt dann 5 5, keinen gespeicherten Treffer.
Benötigt die Aufgabe das letzte passende Paar, speichere best_a = a und best_b = b bei jedem Treffer. Diese separaten Variablen behalten einen Treffer, während sich die Schleifenvariablen weiter ändern. Prüfe die Merkvariable vor ihrer Ausgabe, wenn möglicherweise kein Treffer existiert.
Ein Paar überspringen und die Zeile fortsetzen
Ein continue innerhalb der inneren Schleife geht zu deren nächstem inneren Wert. Bei zwei Schleifen, die 1 bis 4 durchlaufen, überspringt if a == b: continue vor der Verarbeitung vier gleiche Paare. Von den ursprünglichen sechzehn bleiben zwölf geordnete Paare.
Ein if kann Paare auch ohne Sprung auswählen. Zwei Würfel haben drei geordnete Paare mit der Summe 10: (4, 6), (5, 5) und (6, 4). Eine Bedingung im inneren Körper erkennt sie.
Wichtige Erkenntnisse
- Ein innerer break beendet nur die innere Schleife; ein inneres continue überspringt nur den aktuellen inneren Durchlauf.
- Eine Merkvariable und ein zweiter break können einen vorzeitigen Abbruch aus beiden Schleifen ermöglichen.
- Setze die äußere Prüfung der Merkvariablen nach die innere Schleife und innerhalb des äußeren Körpers.
- Schleifenvariablen ändern sich nach einem Treffer weiter, solange die Suche nicht endet; speichere passende Werte bei Bedarf.
6Schleifen nachvollziehen und Fehler beheben
Eine Schleife kann richtig aussehen und dennoch den falschen letzten Wert durchlaufen, einen Wert zu früh addieren oder ein Trennzeichen zu viel ausgeben. Das Nachvollziehen macht ihr tatsächliches Verhalten sichtbar: Halte jede Änderung in der Reihenfolge ihrer Ausführung fest und vergleiche sie mit dem beabsichtigten Ergebnis. Sehr kleine Beispiele sind besonders nützlich, weil du jeden Durchlauf prüfen kannst. Du unterscheidest Ausführungen des Körpers von Bedingungsprüfungen, untersuchst Endwerte und korrigierst Grenzen anhand eines nachvollzogenen Ablaufs.
6.1 Werte in der Ausführungsreihenfolge nachvollziehen
Nachvollziehen des Programmablaufs bedeutet, ein Programm von Hand Anweisung für Anweisung auszuführen und dabei seine Werte und Ausgaben festzuhalten. Eine Ablauftabelle gibt jeder relevanten Variablen eine Spalte. Kennzeichne, ob ein Wert vor oder nach einer Aktualisierung festgehalten wird, damit die Zeilen eine klare Bedeutung haben.
Eine while-Schleife nachvollziehen
total = 0
i = 1
while i <= 4:
total = total + i
i = i + 1
print(total)
Beginne mit total = 0 und i = 1. Prüfe die Bedingung, bevor du in den Körper eintrittst. Führe bei jeder wahren Prüfung die Addition vor dem Inkrement aus:
| Durchlauf | i vorher | total nachher | i nachher |
|---|---|---|---|
| 1 | 1 | 1 | 2 |
| 2 | 2 | 3 | 3 |
| 3 | 3 | 6 | 4 |
| 4 | 4 | 10 | 5 |
Die nächste Prüfung ist 5 <= 4 und damit falsch. Es gibt keine fünfte Zeile für den Körper. Der Körper wird viermal ausgeführt, die Bedingung wird fünfmal geprüft und die print-Anweisung nach der Schleife gibt einmal 10 aus. Die Endwerte sind i = 5 und total = 10.
Unterscheide die fehlgeschlagene Prüfung von einem Durchlauf: Sie beendet die Schleife, ohne ihren Körper auszuführen. Ist die Anfangsbedingung bereits falsch, gibt es überhaupt keine Zeilen für den Körper und die Variablen behalten ihre Startwerte.
Die Reihenfolge der Anweisungen ändert das Ergebnis
Wird das Inkrement über die Addition verschoben, verwendet jeder Durchlauf den neuen Wert von i. Die vier Additionen werden zu 2, 3, 4 und 5 und ergeben 14. Die Bedingung prüft i weiterhin am Anfang, vor diesem Inkrement. Würde man nur die Werte im Schleifenkopf nachvollziehen, bliebe unbemerkt, welchen Wert die Addition tatsächlich verwendet.
Enthält ein Körper break oder continue, verfolge seine verbleibenden Zeilen nicht weiter, sobald der Sprung erfolgt. Kehre bei continue zum Schleifenkopf oder zum nächsten Element zurück; fahre bei break nach der Schleife fort. Eine Ablauftabelle muss diesen Wegen folgen, statt einfach alle Anweisungen des Körpers in jede Zeile zu kopieren.
Zeichen und verschachtelte Schleifen nachvollziehen
Eine for-Schleife weist zu Beginn ihres Durchlaufs das nächste Element zu:
rev = ""
for ch in "abc":
rev = ch + rev
print(rev)
Der gespeicherte Text wird zu "a", dann zu "ba" und dann zu "cba". Die Ausgabe ist cba. Halte den tatsächlichen Text einschließlich seiner Reihenfolge fest, statt nur zu schreiben, dass „ein Zeichen hinzugefügt wurde“.
Verwende bei verschachtelten Schleifen eine Zeile für jeden inneren Durchlauf. Halte beide Schleifenvariablen fest, sodass sich der äußere Wert über die zu ihm gehörenden Zeilen wiederholt. In einer Schleife mit zwei Zeilen und drei Spalten lauten die Zeilenwerte 1, 1, 1, 2, 2, 2, während die Spaltenwerte 1, 2, 3, 1, 2, 3 lauten.
Den Ablauf mit print ausgeben
Ein vorübergehendes print("i =", i, "total =", total) nach beiden Aktualisierungen in der Summenschleife zeigt i und total am Ende jedes Durchlaufs. Eine Platzierung vor den Aktualisierungen zeigt einen anderen Zeitpunkt. Vergleiche die Position der print-Anweisung mit den Spaltenbeschriftungen deiner Tabelle. Entferne diagnostische Ausgaben nach der Korrektur des Codes, damit sie nicht zu zusätzlicher Programmausgabe werden.
Halte bei einer Frage wie „Was wird ausgegeben?“ nur Anweisungen fest, die tatsächlich etwas ausgeben. Die Änderung einer Variablen ist selbst keine Ausgabe; vor einer einzigen abschließenden print-Anweisung können mehrere Aktualisierungen erfolgen.
Wichtige Erkenntnisse
- Vollziehe Anweisungen in genau der Reihenfolge nach, in der Python sie ausführt.
- Kennzeichne festgehaltene Werte als vor oder nach der jeweiligen Aktualisierung.
- Eine regulär endende while-Schleife prüft ihre Bedingung einmal öfter, als sie ihren Körper ausführt.
- Break und continue ändern, welche Anweisungen in einer Ablauftabelle erscheinen.
- Halte Ausgaben getrennt von Änderungen an Variablen fest.
6.2 Grenzen und Trennzeichen korrigieren
Ein Um-eins-Fehler durchläuft einen Wert zu viel oder zu wenig oder verschiebt die durchlaufenen Werte um eins. Er entsteht häufig durch die ausgeschlossene Endgrenze eines Zahlenbereichs, die Wahl zwischen < und <= oder den Startwert eines Zählers.
Die beabsichtigten Endpunkte festlegen
Um 1 bis 10 zu addieren, ist range(1, 10) zu kurz. Es liefert nur 1 bis 9 und ergibt eine Summe von 45. range(1, 11) schließt 10 ein und ergibt 55. Für einen aufsteigenden ganzzahligen Zahlenbereich mit Schrittweite 1 verwende die Endgrenze n + 1, um den letzten Wert n einzuschließen.
Bei der Standardschrittweite 1 liefert range(a, b) b - a Werte, wenn b größer als a ist. Ein break kann die Schleife dennoch beenden, bevor alle verwendet werden. Liste bei anderen Schrittweiten einen kleinen Fall auf oder prüfe die Anzahl mit len(range(...)).
Die Anzahl der Durchläufe einer while-Schleife hängt gemeinsam von ihrem Startwert, ihrem Vergleich und ihrer Aktualisierung ab. Für eine nichtnegative ganze Zahl n, mit i += 1 am Ende jedes Durchlaufs und ohne vorzeitigen Abbruch:
| Start und Bedingung | Ausführungen des Körpers |
|---|---|
i = 0; while i < n: | n |
i = 1; while i <= n: | n |
i = 0; while i <= n: | n + 1 |
Bei n gleich 0 überspringen die ersten beiden den Körper. Die dritte wird einmal mit i gleich 0 ausgeführt. Dieser kleine Fall zeigt den zusätzlichen Durchlauf, ohne eine lange Schleife nachzuvollziehen.
Grenzen beim Rückwärtszählen
Beginnend bei 5 und mit einer Ausgabe vor n -= 1 gibt while n > 0: fünf Werte aus und endet bei 1. Mit n >= 0 werden sechs Werte ausgegeben, bis 0. Die entsprechenden absteigenden Zahlenbereiche sind range(5, 0, -1) und range(5, -1, -1).
Prüfe auch die Reihenfolge. Die Aktualisierung eines Zählers vor seiner Verwendung kann jeden Wert verschieben, selbst wenn die Schleife die erwartete Anzahl von Durchläufen hat. Eine Ablauftabelle sollte die tatsächlichen ersten und letzten Werte festhalten, die die Berechnung verwendet.
Elemente und die Zwischenräume zwischen ihnen
Ein Zaunpfahlfehler verwechselt die Anzahl der Elemente mit der Anzahl der Zwischenräume. Fünf Zaunabschnitte brauchen sechs Pfähle. Fünf ausgegebene Zahlen brauchen nur vier Trennzeichen dazwischen.
for i in range(1, 6):
print(i, end="-")
Dies gibt 1-2-3-4-5- einschließlich eines unerwünschten abschließenden Bindestrichs aus. Jede print-Anweisung fügt nach einem Element einen Bindestrich hinzu, auch nach dem letzten.
Eine Korrektur besteht darin, das erste Element separat auszugeben und dann vor jedem weiteren Element ein Trennzeichen auszugeben:
print(1, end="")
for i in range(2, 6):
print("-" + str(i), end="")
print()
Die Ausgabe ist 1-2-3-4-5. Die Schleife gibt vier Stücke aus Bindestrich und Zahl aus und die letzte leere print-Anweisung beendet die Zeile. Diese Version hat ein bekanntes erstes Element; im allgemeinen Fall leerer Daten muss auch die Ausgabe des ersten Elements übersprungen werden.
Die Korrektur mit kleinen Fällen prüfen
Schreibe den beabsichtigten ersten Wert, letzten Wert und die Anzahl auf, bevor du den Code änderst. Wähle die Grenzen und den Vergleich passend dazu und vollziehe dann einen kurzen Ablauf nach. Prüfe neben einem gewöhnlichen Fall auch null und ein Element. Null zeigt Arbeit, die übersprungen werden sollte; ein Element zeigt ein unnötiges Trennzeichen oder eine zusätzliche Aktualisierung. Ändere die Grenze, die den Fehler verursacht, sodass die Wiederholung im Code zur Aufgabe passt.
Wichtige Erkenntnisse
- Prüfe Startwert, letzten benötigten Wert und Anzahl der Durchläufe gemeinsam.
- Ein aufsteigender Zahlenbereich mit Schrittweite eins schließt n ein, wenn seine Endgrenze n + 1 ist.
- Der while-Vergleich und die Aktualisierung bestimmen gemeinsam die Anzahl der Durchläufe.
- Auch absteigende Zahlenbereiche schließen ihre Endgrenze aus.
- Bei einer nicht leeren Sequenz unterscheiden sich die Anzahl der Elemente und die Anzahl der Trennzeichen um eins.
- Vollziehe nach einer Korrektur der Grenzen sehr kleine Fälle nach, besonders null und ein Element.
Schleifen in Python: Beispiele
1Eine while-Schleife voranbringen und beenden
15 Schritte
- 1EinführungWiederholung braucht eine Entscheidung
Ein Programm, das wiederholt nach einer Antwort fragt, braucht eine Regel für einen weiteren Versuch. Eine while-Schleife setzt diese Regel in eine Bedingung, die vor jedem Durchlauf geprüft wird.
Du verfolgst einen Countdown, findest heraus, warum ein veränderlicher Wert seinen Ausgang trotzdem verfehlen kann, und erstellst eine Eingabeschleife, deren Stoppsignal nie in ihre Berechnungen gelangt.
- 2ErklärungDen Countdown einrichten
Eine while-Schleife wiederholt einen eingerückten Körper, solange ihre Bedingung wahr ist. Gib ihrem steuernden Wert vor dem Schleifenkopf einen Startwert:
remaining = 4 while remaining > 0: print(remaining) remaining -= 1Hier ist der Startwert 4, die Prüfung fragt, ob noch etwas übrig ist, und die Aktualisierung subtrahiert 1. Die Ausgabe erfolgt vor dieser Subtraktion.
- 3BeispielDie ersten beiden Durchläufe ausführen
Die erste Prüfung verwendet remaining gleich 4 und ist erfolgreich. Die print-Anweisung zeigt 4, dann ändert die Aktualisierung remaining auf 3. Python kehrt zum Schleifenkopf zurück.
Die nächste Prüfung verwendet 3, sodass der Körper 3 ausgibt und den Wert auf 2 ändert. Zwischen der Ausgabe und der Aktualisierung wird die Bedingung nicht erneut geprüft; die Anweisungen werden in ihrer geschriebenen Reihenfolge ausgeführt.
- 4BeispielDie fehlgeschlagene Prüfung erreichen
Die nächsten beiden Durchläufe geben 2 und 1 aus. Nach der letzten Aktualisierung ist remaining gleich 0. Die Prüfung
remaining > 0ist jetzt falsch, sodass der Körper nicht erneut ausgeführt wird.Vier Werte wurden ausgegeben, aber der Schleifenkopf wurde fünfmal geprüft: vier wahre Prüfungen und eine letzte falsche Prüfung. Ein Start mit remaining gleich 0 hätte keine Durchläufe des Körpers ergeben.
- 5HerausforderungDie Reihenfolge ändern
Verschiebe im Countdown
remaining -= 1überprint(remaining). Welche vier Werte werden ausgehend von 4 ausgegeben?---reveal---
Die Ausgabe ist 3, 2, 1 und 0. Jede Prüfung lässt weiterhin den alten positiven Wert zu, aber die print-Anweisung verwendet den aktualisierten Wert. Wird die Bedingung während des Körpers falsch, unterbricht das den Körper nicht; der Schleifenkopf prüft sie bei der nächsten Rückkehr.
- 6TippDen fehlenden Fortschritt finden
Gibt ein Countdown immer wieder 4 aus, suche nach der Aktualisierung und ihrer Einrückung. Eine Aktualisierung nach der Schleife kann der Schleife nicht beim Beenden helfen, weil sie noch nicht erreicht wurde.
Addiert die Aktualisierung unter
while remaining > 0:den Wert 1, bewegt sich der Wert vom Ausgang weg. Eine vorübergehende print-Anweisung nach der Aktualisierung zeigt, ob sich der Wert in die beabsichtigte Richtung ändert. - 7BeispielAuch ein veränderlicher Wert kann das Ziel verfehlen
n = 2 while n != 7: print(n) n += 2Dies durchläuft 2, 4, 6, 8 und spätere gerade Zahlen. Die Variable ändert sich jedes Mal, doch keiner dieser Werte ist gleich 7. Lautet die Aufgabe, gerade Werte unter 7 auszugeben, passt
while n < 7:: Die nächste Prüfung schlägt fehl, nachdem n zu 8 geworden ist. - 8HerausforderungEinen übersprungenen Zielwert korrigieren
Eine Schleife beginnt bei 5, gibt n aus, solange
n != 12gilt, und addiert am Ende 2. Die Aufgabe ist, ihre ungeraden Werte unter 12 auszugeben. Warum schlägt sie fehl und welcher Schleifenkopf behebt das?---reveal---
Die Werte bleiben ungerade und sind nie gleich 12. Verwende
while n < 12:. Das gibt 5, 7, 9 und 11 aus und endet, wenn n den Wert 13 erreicht. Eine Änderung der Aktualisierung auf 1 würde die benötigte Folge ungerader Zahlen verändern. - 9KernaussageDezimalschritte mit ganzen Zahlen zählen
Wiederholte Dezimaladditionen können einen Zielwert verfehlen, auf den mittels Gleichheit geprüft wird: Zehn Additionen von
0.1zu0.0ergeben0.9999999999999999.Lass für eine feste Folge von Zehnteln ganze Zahlen die Durchläufe steuern:
for i in range(11): x = i / 10 print(x)Dies berechnet elf Werte von 0,0 bis einschließlich 1,0, ohne dass eine gespeicherte Dezimalzahl einen exakten Gleichheitswert zum Stoppen erreichen muss.
- 10ErklärungVor der Prüfung einlesen
Ein Sentinelwert bedeutet „keine weiteren Daten“. Bei einer Sammlung positiver Anzahlen kann 0 das Ende markieren. Ein vorbereitendes Einlesen holt die erste Zahl vor der Schleife, damit ihr Kopf einen Wert zum Prüfen hat.
total = 0 number = int(input("Count (0 to stop): "))Die Umwandlung ist wichtig: input gibt Text zurück, während diese Schleife Zahlen vergleichen wird.
- 11BeispielVerarbeiten und dann den nächsten Wert einlesen
while number != 0: total += number number = int(input("Count (0 to stop): ")) print(total)Füge dies unter dem vorbereitenden Code an. Die Eingaben 6, 9 und 0 addieren zuerst 6 und dann 9, sodass eine Summe von 15 bleibt. Die neue 0 besteht die nächste Prüfung im Schleifenkopf nicht und wird daher nicht addiert. Ohne das letzte Einlesen im Körper würde der erste Wert wiederholt verarbeitet.
- 12VerbindungNur nicht akzeptable Antworten zurückweisen
Das Sammeln von Eingaben endet bei einem besonderen Wert. Die Validierung wiederholt sich dagegen, bis ein Wert akzeptabel ist. Um eine ganze Zahl von 1 bis einschließlich 5 zu akzeptieren, wiederhole, solange
choice < 1 or choice > 5gilt, und lies im Körper eine neue Auswahl ein.Die Bedingung muss beide möglichen Verstöße erfassen. Mit and würde nichts zurückgewiesen: Eine Zahl kann nicht gleichzeitig unter 1 und über 5 liegen.
- 13HerausforderungDaten und Stoppsignal behandeln
Punktzahlen sind nichtnegativ und -1 ist der Sentinelwert. Welche Summe und Anzahl sollte eine Schleife für das arithmetische Mittel bei den Eingaben 0, 9 und -1 verwenden? Was geschieht, wenn -1 zuerst eingegeben wird?
---reveal---
Verwende die Summe 9 und die Anzahl 2; das ergibt ein arithmetisches Mittel von 4,5. Null ist ein Datenwert, während -1 ausgeschlossen ist. Steht -1 an erster Stelle, bleibt die Anzahl 0; melde, dass keine Daten vorliegen, statt zu dividieren. Die Prüfung des Sentinelwerts muss vor beiden Aktualisierungen stehen.
- 14HerausforderungEinen vollständigen Eingabeweg prüfen
Eine Schleife mit vorbereitendem Einlesen wiederholt sich bei
text != 0, aber text kommt direkt von input. Die Eingabe von 0 stoppt sie nicht. Erkläre das Problem mit den Datentypen und gib zwei gültige Korrekturen an.---reveal---
Input liefert
"0", eine Zeichenkette, die sich von der ganzen Zahl 0 unterscheidet. Vergleiche mit"0", um einen Sentinelwert als Text zu behalten, oder wandle die Eingabe mit int um, bevor du sie mit 0 vergleichst. Sowohl das erste als auch die späteren Einlesen müssen dieser Wahl folgen. - 15ZusammenfassungVor der Ausführung einen Weg verfolgen
Vollziehe bei einer neuen while-Schleife einen gewöhnlichen Durchlauf, den beabsichtigten Abbruch und einen Fall nach, der nullmal ausgeführt werden sollte. Bestimme auf jedem sich wiederholenden Weg die nächste Eingabe oder Aktualisierung, die Fortschritt ermöglicht.
Setze bei einer Berechnung mit Eingaben die Stoppprüfung vor die Verarbeitung und entscheide, wie leere Daten gemeldet werden sollen. Diese Prüfungen finden sowohl eine feststeckende Schleife als auch ein irreführendes Ergebnis.
2Elemente und Zahlenbereiche die Wiederholung steuern lassen
13 Schritte
Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.
- 1EinführungJedes Element einmal an die Reihe kommen lassen
- 2ErklärungDie Variable enthält das aktuelle Element
- 3BeispielZu den Zeichen gehören auch Leerzeichen
- 4HerausforderungDer Elementvariablen einen neuen Wert zuweisen
- 5ErklärungBei null beginnen, wenn nur eine Endgrenze angegeben ist
- 6BeispielEine Schrittweite wählen und untersuchen
- 7TippAbsteigende Werte brauchen eine negative Schrittweite
- 8HerausforderungDen letzten benötigten Wert einschließen
- 9VerbindungDie Abbruchregel an die Aufgabe anpassen
- 10BeispielEine absteigende Zählung umschreiben
- 11HerausforderungEine spätere Zuweisung erstellt range nicht neu
- 12HerausforderungDie Grenze umschreiben und die Daten beibehalten
- 13ZusammenfassungZuerst die gelieferten Werte prüfen
3Entscheiden, was nach einem Treffer oder Überspringen geschieht
14 Schritte
Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.
- 1EinführungDrei unterschiedliche nächste Schritte
- 2ErklärungBreak verlässt die enthaltende Schleife
- 3BeispielVor einem Abbruch in der Mitte des Körpers einlesen
- 4HerausforderungDen Ausgang finden
- 5ErklärungContinue verlässt nur diesen Durchlauf
- 6TippEine übersprungene Aktualisierung kann while festhalten
- 7KernaussagePass überspringt nichts
- 8HerausforderungDrei Versionen vorhersagen
- 9ErklärungElse gehört zur Schleife
- 10KernaussageAuch null Durchläufe enden regulär
- 11VerbindungDasselbe Ereignis ausdrücklich festhalten
- 12HerausforderungErfolg beim letzten erlaubten Versuch
- 13HerausforderungÜberspringen mit regulärer Beendigung kombinieren
- 14ZusammenfassungDas Ziel eines Sprungs einzeichnen
4Ein Schleifenergebnis aufbauen und bewahren
14 Schritte
Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.
- 1EinführungEin Ergebnis übersteht den nächsten Durchlauf
- 2ErklärungDieselbe Gruppe zählen und summieren
- 3BeispielDas arithmetische Mittel nach dem Sammeln berechnen
- 4KernaussageStartwerte passen zur Operation
- 5HerausforderungDen Fehler beim Zurücksetzen finden
- 6ErklärungDas erste Element als ersten besten Wert nehmen
- 7BeispielSpeichern, wo der beste Wert auftrat
- 8HerausforderungGleichstände und leere Daten behandeln
- 9ErklärungEine Suchmerkvariable merkt sich ein Ereignis
- 10BeispielEine Alle-Prüfung stoppt bei einem Gegenbeispiel
- 11HerausforderungDen ersten oder den letzten Treffer behalten
- 12VerbindungDen für die Aufgabe benötigten Zustand wählen
- 13HerausforderungEin leeres Ergebnis nach dem Filtern beschreiben
- 14ZusammenfassungDas Ergebnis vor der Wahl der Aktualisierungen benennen
5Zeilen erstellen und eine verschachtelte Suche steuern
11 Schritte
Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.
- 1EinführungEin vollständiger innerer Ablauf pro äußerem Durchlauf
- 2BeispielDie Zeile festhalten
- 3ErklärungJede Zeile auf der äußeren Ebene beenden
- 4KernaussageFeste und wachsende innere Arbeit zählen
- 5HerausforderungEin Ergebnis pro Zeile zurücksetzen
- 6ErklärungEin innerer break stoppt nicht die Zeilen
- 7BeispielDen Erfolg zur äußeren Entscheidung weitergeben
- 8TippEndwerte von Variablen nicht mit einem gespeicherten Treffer verwechseln
- 9HerausforderungEinen Ausgang entfernen
- 10HerausforderungEinen Filter und eine wachsende Grenze kombinieren
- 11ZusammenfassungEine Zeile nachvollziehen, bevor du Anzahlen multiplizierst
6Einen Fehler an einer Grenze bis zu seiner Ursache verfolgen
10 Schritte
Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.
- 1EinführungDie tatsächliche Arbeit sichtbar machen
- 2ErklärungWählen, wann jeder Wert festgehalten wird
- 3BeispielAlle drei Aktualisierungen verfolgen
- 4HerausforderungDas Inkrement verschieben
- 5TippEine print-Anweisung zum Nachvollziehen verwenden
- 6BeispielNull den zusätzlichen Durchlauf aufdecken lassen
- 7HerausforderungBeide Enden eines Countdowns prüfen
- 8ErklärungElemente von Zwischenräumen unterscheiden
- 9HerausforderungEine vollständige Korrektur prüfen
- 10ZusammenfassungDie beabsichtigten Endpunkte überprüfen
Schleifen in Python: Übungsaufgaben
Set 1: Die ersten Schritte einer Schleife verfolgen10 Übungsfragen
Frage 1 von 10
Wie oft wird der Körper dieser Schleife ausgeführt?
for ch in "up! ":
print(ch)
Antwort zeigenAntwort ausblenden
Frage 2 von 10
list(range(3, 12, 4))?Antwort zeigenAntwort ausblenden
Frage 3 von 10
Antwort zeigenAntwort ausblenden
Frage 4 von 10
Was gibt dieses Programm aus?
for n in [5, 11, 14, 18]:
if n % 2 == 0:
print(n)
break
print("Finished")
Antwort zeigenAntwort ausblenden
Frage 5 von 10
Was gibt dieses Programm aus?
count = 0
for amount in [6, 13, 9, 17]:
if amount >= 10:
count += 1
print(count)
Antwort zeigenAntwort ausblenden
Frage 6 von 10
Wie oft wird die innere print-Anweisung ausgeführt?
for row in range(2):
for col in range(5):
print("seat")
Antwort zeigenAntwort ausblenden
Frage 7 von 10
Was sind die Endwerte von i und total?
i = 1
total = 0
while i < 5:
i += 1
total += i
Antwort zeigenAntwort ausblenden
Frage 8 von 10
Was gibt dieses Programm aus?
n = 0
while n > 0:
print("Go")
n -= 1
print("End")
Antwort zeigenAntwort ausblenden
0 > 0, ist falsch, sodass Python den gesamten Schleifenkörper überspringt und die letzte print-Anweisung erreicht. Eine while-Schleife garantiert keinen Durchlauf vor der Prüfung ihrer Bedingung. Das nicht eingerückte print("End") wird auch ausgeführt, wenn der Körper keinen Durchlauf hat.Frage 9 von 10
Warum gibt diese Schleife immer weiter Werte aus?
n = 2
while n != 9:
print(n)
n += 2
Antwort zeigenAntwort ausblenden
n != 9 nicht falsch. Für die Aufgabe, diese geraden Werte unter 9 zu durchlaufen, würde eine Schranke wie n < 9 stoppen, sobald der nächste Wert sie überschreitet.Frage 10 von 10
Antwort zeigenAntwort ausblenden
30 / 3, also 10.0. Eine Anzahl von 2 würde null fälschlich verwerfen. Der Sentinelwert -1 trägt weder zur Summe noch zur Anzahl bei.Set 2: Eingaben und Ergebnisse im Griff behalten10 Übungsfragen
Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.
Frage 1 von 10
Was gibt dieses Programm aus?
n = 1
while n > 0:
n -= 1
print("Inside")
print(n)
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 2 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 3 von 10
range(7, 2)?Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 4 von 10
Was gibt dieses Programm aus?
for n in [2, 5, 8]:
if n == 5:
continue
print(n)
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 5 von 10
Was gibt dieses Programm aus?
for n in []:
if n == 7:
break
else:
print("Absent")
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 6 von 10
Mit welchem Startwert multipliziert diese Schleife 2, 3 und 4 korrekt?
product = ___
for n in [2, 3, 4]:
product *= n
print(product)
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 7 von 10
largest = 0 und ersetzt den Wert nur, wenn ein Element größer ist. Welchen Wert meldet sie für [-8, -3, -6] fälschlich?Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 8 von 10
Diese Suche hat keinen break. Was gibt sie aus und warum?
found = False
for label in ["East", "West", "North"]:
if label == "West":
found = True
else:
found = False
print(found)
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 9 von 10
Wie viele Paare werden ausgegeben?
for a in range(3):
for b in range(4):
if b == 2:
break
print(a, b)
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 10 von 10
while i <= n: und addiert am Ende jedes Durchlaufs 1, ohne vorzeitigen Abbruch. Wie oft wird der Körper für jede nichtnegative ganze Zahl n ausgeführt?Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Set 3: Grenzen wählen und Suchergebnisse bewahren10 Übungsfragen
Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.
Frage 1 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 2 von 10
Welche letzte Zeile gibt dieses Programm aus?
values = [4, 7]
for value in values:
value *= 3
print(values)
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 3 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 4 von 10
Wie oft gibt diese Schleife einen Wert aus?
limit = 4
for i in range(limit):
limit = 1
print(i)
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 5 von 10
Welche Zahl wird als erste ausgegeben?
for n in range(32, 50):
if n % 6 == 0:
print(n)
break
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 6 von 10
Was geschieht, wenn dieses Programm ausgeführt wird?
n = 1
for divisor in range(2, n):
if n % divisor == 0:
break
else:
print("Prime")
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 7 von 10
Der Code verwendet Positionen, die ab 1 nummeriert sind. Was gibt er aus?
largest = None
best_position = None
position = 0
for n in [9, 14, 6, 14, 8]:
position += 1
if largest is None or n >= largest:
largest = n
best_position = position
print(best_position)
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 8 von 10
all_positive = True, ändert den Wert beim ersten Wert n <= 0 zu False und bricht dann ab. Welches Ergebnis und welche Anzahl geprüfter Elemente liefert sie für [2, 7, 0, 9, -4]?Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 9 von 10
Wie viele Sterne gibt dieses Programm insgesamt aus?
for row in range(1, 6):
for _ in range(row):
print("*", end="")
print()
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 10 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Set 4: Aktualisierungen, Filter und verschachtelte Abbrüche nachvollziehen10 Übungsfragen
Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.
Frage 1 von 10
Wie oft wird der Körper ausgeführt und welchen Endwert hat amount?
amount = 3
while amount < 40:
amount *= 2
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 2 von 10
Zuerst wird eine nichtnegative ganze Zahl eingegeben. Die folgende Schleife soll Werte außerhalb von 2 bis 8 zurückweisen, wobei beide Endpunkte akzeptabel sind. Was ist an ihrer Bedingung falsch?
value = int(input("Value: "))
while value < 2 and value > 8:
value = int(input("Value: "))
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 3 von 10
Wie viele Vokale zählt diese Schleife?
count = 0
for ch in "Orbit":
if ch in "aeiou":
count += 1
print(count)
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 4 von 10
Die eingegebenen Textwerte sind „6“, „4“, „stop“. Was gibt dieses Programm nach den Eingabeaufforderungen aus?
total = 0
while True:
text = input("Amount or stop: ")
if text == "stop":
break
total += int(text)
print(total)
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 5 von 10
Was gibt dieses Programm aus, bevor es hängen bleibt?
i = 0
while i < 4:
if i == 1:
continue
print(i)
i += 1
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 6 von 10
Was gibt dieses Programm aus?
for n in [3, 8, 5]:
total = 0
total += n
print(total)
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 7 von 10
Was gibt dieses Programm aus?
match = None
for n in [9, 12, 7, 16, 5]:
if n % 4 == 0:
match = n
print(match)
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 8 von 10
Wie viele Paare werden ausgegeben?
for a in range(1, 4):
for b in range(1, 4):
if a == b:
continue
print(a, b)
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 9 von 10
Was ist der Endwert von total?
total = 0
for n in range(2, 7):
if n == 4:
continue
total += n
if total > 9:
break
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 10 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Set 5: Schleifenmuster kombinieren und Grenzfälle prüfen10 Übungsfragen
Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.
Frage 1 von 10
Eine Aufgabe benötigt alle ungeraden Werte unter 20, beginnend bei 3. Dieser Code endet nie. Welche Korrektur erhält die benötigten Ausgabewerte?
n = 3
while n != 20:
print(n)
n += 2
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 2 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 3 von 10
Beide Schleifen geben 4, 2 aus. Welche Endwerte haben ihre Schleifenvariablen?
for a in range(4, 0, -2):
print(a)
b = 4
while b > 0:
print(b)
b -= 2
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 4 von 10
Was wird in dieser Schleife ausgegeben?
for n in [3, 6, 9]:
if n == 6:
pass
print(n)
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 5 von 10
Der Benutzer gibt „bad“, „bad“ und dann „key“ ein. Welche Meldung wird nach diesen Eingabeaufforderungen ausgegeben?
attempts = 0
while attempts < 3:
guess = input("Code: ")
if guess == "key":
print("Open")
break
attempts += 1
else:
print("Locked")
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 6 von 10
Ein Programm soll den ersten Tag mit der höchsten Temperatur festhalten. Die Tagesnummern beginnen bei 1. Welcher Vergleich soll die Lücke ersetzen?
highest = None
best_day = None
day = 0
for temp in [-4, -1, -1, -3]:
day += 1
if highest is None or ___:
highest = temp
best_day = day
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 7 von 10
Was gibt dieses Programm in zwei Zeilen aus?
total = 0
for row in range(1, 3):
for col in range(1, 4):
total += row * col
print(total)
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 8 von 10
Was gibt diese verschachtelte Suche aus?
found = False
for a in range(1, 5):
for b in range(1, 5):
if a + b == 7:
found = True
break
if found:
break
print(a, b)
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 9 von 10
Welchen Text gibt dieses Programm aus?
text = ""
for ch in "lamp":
if ch == "a":
continue
text = ch + text
print(text)
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 10 von 10
Welches arithmetische Mittel gibt dieses Programm aus?
total = 0
count = 0
for n in [3, 11, -1, 14, 6, 20]:
if n <= 8:
continue
total += n
count += 1
if count == 2:
break
if count > 0:
print(total / count)
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Hängst du bei deiner eigenen Aufgabe fest? Hausaufgabenhilfe
Schlüsselbegriffe
A
Ablauftabelle
Akkumulator
Alle-Prüfung
arithmetisches Mittel
Ä
äußere Schleife
B
Beendigung
break-Anweisung
C
continue-Anweisung
D
diagnostische Ausgabe
E
else-Block einer Schleife
Endgrenze
range(1, 11), 10 als letzten gelieferten Wert einzuschließen.Endlosschleife
Endwert
erweiterte Zuweisung
total += n addiert die aktuelle Zahl zur gespeicherten Zwischensumme.F
Filtern
for-Schleife
G
geordnetes Paar
gespeicherter Treffer
Gleichstand
Gleitkommaapproximation
Grenzfall
I
Initialisierung
innere Schleife
innerste Schleife
K
KeyboardInterrupt
Kurzschlussauswertung
L
laufende Summe
leerer Zahlenbereich
range(5, 1) gibt einer for-Schleife keine Arbeit für den Körper und löst keinen Fehler aus.lineare Suche
M
Maximum
Merkvariable
Mindestens-eins-Prüfung
Minimum
N
Nachvollziehen des Programmablaufs
None
P
pass-Anweisung
Produktakkumulator
R
reguläre Beendigung
S
Schleife
Schleife mit bestimmter Anzahl von Durchläufen
Schleife mit unbestimmter Anzahl von Durchläufen
Schleife zur Eingabevalidierung
Schleifendurchlauf
Schleifenkörper
Schleifenvariable
Schrittweite
range(8, 0, -2) absteigende gerade Werte durchlaufen.sentinelgesteuerte Schleife
Sentinelwert
Sequenz
Startwert
range(3, 8) bei 3 statt beim Standardwert null beginnen.T
Treffer
Trennzeichen
Typumwandlung
U
Um-eins-Fehler
V
verschachtelte Schleife
verschachtelte Suche
vorbereitendes Einlesen
vorzeitiger Schleifenabbruch
W
while True-Schleife
while-Schleife
Z
Zahlenbereich
range(2, 11, 2) liefert fünf gerade Werte von 2 bis einschließlich 10.Zähler
Zählschleife
Zaunpfahlfehler
zeilenweiser Akkumulator
Zugehörigkeitsprüfung
ch in "aeiou" entscheidet, ob ein Vokalzähler erhöht wird.Über diese Einheit
Erstelle deine eigenen Lernmaterialien
Mach aus deinen Notizen, Folien und Dokumenten Lernleitfäden, Übungsfragen, Karteikarten und 6 weitere Tools.