Schleifen in Python

Lerne, wie ein Python-Programm Aufgaben wiederholt. Schreibe while-Schleifen, die laufen, bis sich eine Bedingung ändert, und for-Schleifen, die Zeichenketten, Listen und Zahlenbereiche durchlaufen. Steuere sie mit break, continue und dem else-Block einer Schleife. Wende die gängigen Muster zum Zählen, Summieren, Berechnen des arithmetischen Mittels, Finden des größten Werts und Suchen an. Erstelle verschachtelte Schleifen für Raster und Kombinationen und vollziehe Schleifen von Hand nach, um Um-eins-Fehler und Schleifen zu finden, die nie enden.

AnfängerEinheit 3 von 10 in Kurs: Python-Programmierung – Schleifen, Funktionen, Listen und Dateien

Was du lernst

  1. 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 schreiben
      Lies 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 endet
      Erkenne Endlosschleifen, erkläre ihre Ursachen, behebe sie und stoppe ein Programm, das in einer solchen Schleife feststeckt.
    • Eingaben lesen, bis die Eingabe beendet wird
      Verwende while-Schleifen, um Werte einzulesen, bis ein Stoppwert erscheint, und um erneut zu fragen, bis der Benutzer eine akzeptable Antwort gibt.
  2. 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 durchlaufen
      Schreibe 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 erzeugen
      Verwende 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ählen
      Entscheide, welche Art von Schleife zu einer Aufgabe passt, und schreibe eine Zählschleife von einer Form in die andere um.
  3. Ä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 verlassen
      Verwende 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 endet
      Fü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.
  4. 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 aufsummieren
      Verwende 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 finden
      Halte 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üllen
      Prü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 …?“.
  5. 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 erstellen
      Schreibe 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 steuern
      Verwende Bedingungen, break, continue und Merkvariablen innerhalb verschachtelter Schleifen und beachte dabei, dass sich jede Anweisung nur auf ihre eigene Schleife auswirkt.
  6. 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 nachvollziehen
      Fü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 beheben
      Erkenne Schleifen, die einmal zu oft oder zu wenig ausgeführt werden, zähle Durchläufe mit genauen Regeln und korrigiere die Grenzen.

Schleifen in Python einfach erklärt

6 Kapitel

1

Aktionen 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 erreichbares break verlassen.

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.
2

Sequenzen 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 in die Zugehörigkeit; in einem for-Kopf leitet es die zu durchlaufenden Elemente ein.
  • Verwende range(5), nicht die ganze Zahl 5, 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
FormBedeutungWerte
range(5)Start bei 0; Schrittweite 10, 1, 2, 3, 4
range(2, 6)Start bei 2; Schrittweite 12, 3, 4, 5
range(1, 10, 2)Start bei 1; Schrittweite 21, 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 mit len().

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
AufgabeNaheliegende SchleifeGrund
Jeden Namen in einer Liste anzeigenfor name in names:Die Liste liefert die Elemente.
Eine Meldung so oft wiederholen, wie der Benutzer vorgibtfor _ in range(n):Die eingegebene Zahl liefert eine Anzahl.
Nachrichten bis zur Eingabe von „quit“ lesenwhileDer Endpunkt hängt von einer zukünftigen Eingabe ab.
Ein Guthaben bis zu einem Zielwert wachsen lassenwhile 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.
3

Eine 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
AnweisungWirkung beim Erreichen
breakDie enthaltende Schleife sofort beenden.
continueDen Rest dieses Durchlaufs überspringen und die nächste Schleifenprüfung oder das nächste Element beginnen.
passNichts 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.
4

Gä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
ErgebnisStartwertAktualisierung
Anzahl0Für ein Ereignis 1 addieren.
Summe0Jeden ausgewählten Wert addieren.
Produkt1Mit 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 or vermeidet 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.
5

Verschachtelte 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 n(n+1)/2. 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.
6

Schleifen 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:

Durchlaufi vorhertotal nachheri nachher
1112
2233
3364
44105

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 BedingungAusfü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

6 Interaktive Lektionen

1

Eine while-Schleife voranbringen und beenden

15 Schritte
Verfolge veränderliche Werte, korrigiere einen unerreichbaren Zielwert und erfasse Eingaben, ohne das Stoppsignal mitzuzählen.
  1. 1
    Einfü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.

  2. 2
    Erklä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 -= 1
    

    Hier ist der Startwert 4, die Prüfung fragt, ob noch etwas übrig ist, und die Aktualisierung subtrahiert 1. Die Ausgabe erfolgt vor dieser Subtraktion.

  3. 3
    BeispielDie 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.

  4. 4
    BeispielDie 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 > 0 ist 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.

  5. 5
    HerausforderungDie Reihenfolge ändern

    Verschiebe im Countdown remaining -= 1 über print(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.

  6. 6
    TippDen 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.

  7. 7
    BeispielAuch ein veränderlicher Wert kann das Ziel verfehlen
    n = 2
    while n != 7:
        print(n)
        n += 2
    

    Dies 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.

  8. 8
    HerausforderungEinen übersprungenen Zielwert korrigieren

    Eine Schleife beginnt bei 5, gibt n aus, solange n != 12 gilt, 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.

  9. 9
    KernaussageDezimalschritte mit ganzen Zahlen zählen

    Wiederholte Dezimaladditionen können einen Zielwert verfehlen, auf den mittels Gleichheit geprüft wird: Zehn Additionen von 0.1 zu 0.0 ergeben 0.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.

  10. 10
    Erklä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.

  11. 11
    BeispielVerarbeiten 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.

  12. 12
    VerbindungNur 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 > 5 gilt, 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.

  13. 13
    HerausforderungDaten 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.

  14. 14
    HerausforderungEinen 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.

  15. 15
    ZusammenfassungVor 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.

2

Elemente und Zahlenbereiche die Wiederholung steuern lassen

13 Schritte
Durchlaufe Werte direkt, erstelle auf- und absteigende Zahlenbereiche und vergleiche eine zählende for-Schleife mit while.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungJedes Element einmal an die Reihe kommen lassen
  2. 2
    ErklärungDie Variable enthält das aktuelle Element
  3. 3
    BeispielZu den Zeichen gehören auch Leerzeichen
  4. 4
    HerausforderungDer Elementvariablen einen neuen Wert zuweisen
  5. 5
    ErklärungBei null beginnen, wenn nur eine Endgrenze angegeben ist
  6. 6
    BeispielEine Schrittweite wählen und untersuchen
  7. 7
    TippAbsteigende Werte brauchen eine negative Schrittweite
  8. 8
    HerausforderungDen letzten benötigten Wert einschließen
  9. 9
    VerbindungDie Abbruchregel an die Aufgabe anpassen
  10. 10
    BeispielEine absteigende Zählung umschreiben
  11. 11
    HerausforderungEine spätere Zuweisung erstellt range nicht neu
  12. 12
    HerausforderungDie Grenze umschreiben und die Daten beibehalten
  13. 13
    ZusammenfassungZuerst die gelieferten Werte prüfen
3

Entscheiden, was nach einem Treffer oder Überspringen geschieht

14 Schritte
Verfolge break, continue und das else einer Schleife durch Suchvorgänge und Eingabeschleifen.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungDrei unterschiedliche nächste Schritte
  2. 2
    ErklärungBreak verlässt die enthaltende Schleife
  3. 3
    BeispielVor einem Abbruch in der Mitte des Körpers einlesen
  4. 4
    HerausforderungDen Ausgang finden
  5. 5
    ErklärungContinue verlässt nur diesen Durchlauf
  6. 6
    TippEine übersprungene Aktualisierung kann while festhalten
  7. 7
    KernaussagePass überspringt nichts
  8. 8
    HerausforderungDrei Versionen vorhersagen
  9. 9
    ErklärungElse gehört zur Schleife
  10. 10
    KernaussageAuch null Durchläufe enden regulär
  11. 11
    VerbindungDasselbe Ereignis ausdrücklich festhalten
  12. 12
    HerausforderungErfolg beim letzten erlaubten Versuch
  13. 13
    HerausforderungÜberspringen mit regulärer Beendigung kombinieren
  14. 14
    ZusammenfassungDas Ziel eines Sprungs einzeichnen
4

Ein Schleifenergebnis aufbauen und bewahren

14 Schritte
Verfolge das arithmetische Mittel einer Auswahl, eine Suche nach dem besten Wert sowie Mindestens-eins- und Alle-Entscheidungen.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungEin Ergebnis übersteht den nächsten Durchlauf
  2. 2
    ErklärungDieselbe Gruppe zählen und summieren
  3. 3
    BeispielDas arithmetische Mittel nach dem Sammeln berechnen
  4. 4
    KernaussageStartwerte passen zur Operation
  5. 5
    HerausforderungDen Fehler beim Zurücksetzen finden
  6. 6
    ErklärungDas erste Element als ersten besten Wert nehmen
  7. 7
    BeispielSpeichern, wo der beste Wert auftrat
  8. 8
    HerausforderungGleichstände und leere Daten behandeln
  9. 9
    ErklärungEine Suchmerkvariable merkt sich ein Ereignis
  10. 10
    BeispielEine Alle-Prüfung stoppt bei einem Gegenbeispiel
  11. 11
    HerausforderungDen ersten oder den letzten Treffer behalten
  12. 12
    VerbindungDen für die Aufgabe benötigten Zustand wählen
  13. 13
    HerausforderungEin leeres Ergebnis nach dem Filtern beschreiben
  14. 14
    ZusammenfassungDas Ergebnis vor der Wahl der Aktualisierungen benennen
5

Zeilen erstellen und eine verschachtelte Suche steuern

11 Schritte
Verfolge den Neustart innerer Schleifen, wachsenden Arbeitsumfang, Ergebnisse pro Zeile und einen Abbruch aus beiden Schleifen.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungEin vollständiger innerer Ablauf pro äußerem Durchlauf
  2. 2
    BeispielDie Zeile festhalten
  3. 3
    ErklärungJede Zeile auf der äußeren Ebene beenden
  4. 4
    KernaussageFeste und wachsende innere Arbeit zählen
  5. 5
    HerausforderungEin Ergebnis pro Zeile zurücksetzen
  6. 6
    ErklärungEin innerer break stoppt nicht die Zeilen
  7. 7
    BeispielDen Erfolg zur äußeren Entscheidung weitergeben
  8. 8
    TippEndwerte von Variablen nicht mit einem gespeicherten Treffer verwechseln
  9. 9
    HerausforderungEinen Ausgang entfernen
  10. 10
    HerausforderungEinen Filter und eine wachsende Grenze kombinieren
  11. 11
    ZusammenfassungEine Zeile nachvollziehen, bevor du Anzahlen multiplizierst
6

Einen Fehler an einer Grenze bis zu seiner Ursache verfolgen

10 Schritte
Halte Aktualisierungen der Reihe nach fest, unterscheide Prüfungen von Durchläufen und korrigiere Trennzeichen in der Ausgabe.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungDie tatsächliche Arbeit sichtbar machen
  2. 2
    ErklärungWählen, wann jeder Wert festgehalten wird
  3. 3
    BeispielAlle drei Aktualisierungen verfolgen
  4. 4
    HerausforderungDas Inkrement verschieben
  5. 5
    TippEine print-Anweisung zum Nachvollziehen verwenden
  6. 6
    BeispielNull den zusätzlichen Durchlauf aufdecken lassen
  7. 7
    HerausforderungBeide Enden eines Countdowns prüfen
  8. 8
    ErklärungElemente von Zwischenräumen unterscheiden
  9. 9
    HerausforderungEine vollständige Korrektur prüfen
  10. 10
    ZusammenfassungDie beabsichtigten Endpunkte überprüfen

Schleifen in Python: Übungsaufgaben

50 Übungsfragen in 5 Sets

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)
  1. 2
  2. 3
  3. 4
  4. 5
Antwort zeigenAntwort ausblenden
Antwort: C
Die Zeichenkette hat vier Zeichen: zwei Buchstaben, ein Ausrufezeichen und ein abschließendes Leerzeichen. Die Schleife durchläuft jedes Zeichen einmal, einschließlich des Leerzeichens. Würde man nur sichtbare Zeichen ohne Leerzeichen zählen, ergäbe sich 3 und ein tatsächlicher Durchlauf des Körpers bliebe unberücksichtigt.

Frage 2 von 10

Welche Werte enthält list(range(3, 12, 4))?
  1. [3, 7]
  2. [3, 7, 11]
  3. [3, 7, 11, 15]
  4. [4, 8, 12]
Antwort zeigenAntwort ausblenden
Antwort: B
Der Startwert ist 3 und jeder Schritt addiert 4. So ergeben sich 3, 7 und 11, bevor der nächste Wert die Endgrenze überschreiten würde. Die Endgrenze 12 ist eine Schranke und kein zusätzlich gelieferter Wert. Ein Start bei 4 würde die Schrittweite mit dem Startwert verwechseln.

Frage 3 von 10

Eine Anzeige soll 8, 6, 4, 2, 0 in dieser Reihenfolge zeigen. Welcher Zahlenbereich liefert genau diese Werte?
  1. range(8, -1, -2)
  2. range(8, 0, -2)
  3. range(8, -2, 2)
  4. range(8, 1, -2)
Antwort zeigenAntwort ausblenden
Antwort: A
Eine Schrittweite von -2 liefert absteigende gerade ganze Zahlen ab 8 und eine Endgrenze unter 0 ermöglicht es, 0 einzuschließen. Bei der Endgrenze 0 schließt der Zahlenbereich 0 aus und endet bei 2. Eine positive Schrittweite von 8 in Richtung einer niedrigeren Endgrenze würde überhaupt keine Werte erzeugen.

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")
  1. 14, dann 18, dann Finished
  2. 5, dann Finished
  3. Nur 14
  4. 14, dann Finished
Antwort zeigenAntwort ausblenden
Antwort: D
Der erste gerade Wert ist 14, sodass der Körper ihn ausgibt und break die Schleife beendet, bevor 18 geprüft wird. Danach erreicht der Ablauf die print-Anweisung nach der Schleife, die „Finished“ ausgibt. Break stoppt die enthaltende Schleife; es beendet nicht das ganze Programm.

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)
  1. 4
  2. 30
  3. 2
  4. 17
Antwort zeigenAntwort ausblenden
Antwort: C
Nur 13 und 17 erfüllen die Bedingung und jede erfolgreiche Prüfung addiert 1 zu count, sodass das Endergebnis 2 ist. Die Addition der passenden Werte selbst würde 30 ergeben, aber diese Aktualisierung zählt Ereignisse. Werte, die die Prüfung nicht bestehen, lassen den Zähler unverändert.

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")
  1. 10
  2. 7
  3. 5
  4. 25
Antwort zeigenAntwort ausblenden
Antwort: A
Es gibt zwei äußere Durchläufe und jeder beginnt einen vollständigen inneren Ablauf mit fünf Durchläufen. Die Multiplikation der beiden Anzahlen ergibt zehn Ausführungen der print-Anweisung. Würde man die Anzahlen zu sieben addieren, entspräche das zwei getrennten, nacheinander ausgeführten Schleifen und nicht dieser verschachtelten Struktur.

Frage 7 von 10

Was sind die Endwerte von i und total?

i = 1
total = 0
while i < 5:
    i += 1
    total += i
  1. i ist 4; total ist 10.
  2. i ist 5; total ist 14.
  3. i ist 5; total ist 10.
  4. i ist 6; total ist 20.
Antwort zeigenAntwort ausblenden
Antwort: B
Die wahren Prüfungen im Schleifenkopf verwenden die i-Werte 1 bis 4, aber jedes Inkrement erfolgt vor der Addition, sodass total die Werte 2, 3, 4 und 5 erhält. Das ergibt 14 und die nächste Prüfung mit i gleich 5 schlägt fehl. Eine Summe von 10 würde jeweils den alten Wert von i statt des aktualisierten Werts verwenden.

Frage 8 von 10

Was gibt dieses Programm aus?

n = 0
while n > 0:
    print("Go")
    n -= 1
print("End")
  1. Go, dann End
  2. Nur End
  3. Überhaupt nichts
  4. Go wiederholt
Antwort zeigenAntwort ausblenden
Antwort: B
Die erste Prüfung, 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
  1. Sie durchläuft jede ganze Zahl, überspringt aber die Prüfung.
  2. Sie setzt n vor jedem Vergleich auf 2 zurück.
  3. Sie aktualisiert n nach dem ersten Überschreiten von 9 nicht mehr.
  4. Sie durchläuft gerade Werte und erreicht 9 nie.
Antwort zeigenAntwort ausblenden
Antwort: D
Die Aktualisierung durchläuft 2, 4, 6, 8, 10 und spätere gerade ganze Zahlen, sodass n nie gleich 9 ist. Das Überschreiten von 9 macht 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

Eine Schleife liest nichtnegative Punktzahlen und verwendet -1 zum Stoppen. Die Eingaben sind 12, 0, 18, -1. Welches arithmetische Mittel soll sie ohne den Sentinelwert melden?
  1. 10.0
  2. 7.25
  3. 15.0
  4. 9.666666666666666
Antwort zeigenAntwort ausblenden
Antwort: A
Die drei Datenwerte ergeben zusammen 30 und 0 ist eine gültige Punktzahl. Daher ist die Anzahl 3 und das arithmetische Mittel 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)
  1. Nur 0
  2. Nur Inside
  3. Inside, dann 0
  4. Inside wiederholt
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Eine Textantwort muss genau „yes“ oder „no“ lauten. Welche while-Bedingung fragt bei jeder nicht akzeptablen Antwort erneut und stoppt bei jeder der beiden akzeptablen Antworten?
  1. answer != "yes" and answer != "no"
  2. answer != "yes" or answer != "no"
  3. answer == "yes" or answer == "no"
  4. answer == "yes" and answer == "no"
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Wie viele Elemente liefert range(7, 2)?
  1. 2
  2. 5
  3. 6
  4. 0
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)
  1. Nur 2
  2. 2, dann 8
  3. 2, dann 5, dann 8
  4. Nur 8
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")
  1. Absent einmal
  2. Überhaupt nichts
  3. Absent siebenmal
  4. Eine TypeError-Meldung
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)
  1. 0
  2. 2
  3. 1
  4. 24
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

Eine Suche nach einem Maximum beginnt mit largest = 0 und ersetzt den Wert nur, wenn ein Element größer ist. Welchen Wert meldet sie für [-8, -3, -6] fälschlich?
  1. -8
  2. -6
  3. -3
  4. 0
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)
  1. True, weil sich eine wahre Merkvariable später nicht ändern kann.
  2. False, weil die letzte Nichtübereinstimmung die Merkvariable zurücksetzt.
  3. False, weil West nicht das erste Element ist.
  4. True, weil die Schleife beim passenden Eintrag stoppt.
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)
  1. 2
  2. 9
  3. 6
  4. 12
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Ein Zähler beginnt mit i gleich 0. Die Schleife verwendet 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?
  1. n + 1
  2. n
  3. n - 1
  4. 2n
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

Ein Programm soll die Zehntel von 0,0 bis einschließlich 1,0 anzeigen. Welcher Entwurf vermeidet es, die Schleife durch wiederholte Gleitkommaaddition und exakte Gleichheit zu steuern?
  1. Beginne x bei 0,0 und wiederhole bis x == 1.0.
  2. Zähle i von 0 bis 10 und gib i / 10 aus.
  3. Beginne x bei 0,0 und wiederhole, solange x != 1.0.
  4. Zähle i von 0 bis 9 und gib i / 10 aus.
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)
  1. [12, 21]
  2. [21, 21]
  3. [4, 7, 21]
  4. [4, 7]
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Welcher Zahlenbereich liefert in absteigender Reihenfolge genau die ganzen Zahlen, die größer als -6 und höchstens 6 sowie Vielfache von 3 sind?
  1. range(6, -6, -3)
  2. range(6, -7, -3)
  3. range(3, -6, -3)
  4. range(6, -3, -3)
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)
  1. 1
  2. 3
  3. 4
  4. 5
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
  1. 32
  2. 42
  3. 36
  4. 48
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")
  1. Es gibt nichts aus, weil der Zahlenbereich leer ist.
  2. Es gibt Prime aus und ordnet 1 falsch ein.
  3. Es meldet einen Fehler, weil range über der Endgrenze beginnt.
  4. Es findet den Teiler 1 und überspringt den else-Block.
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)
  1. 2
  2. 5
  3. 3
  4. 4
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

Eine Prüfung, ob alle Werte positiv sind, beginnt mit 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]?
  1. False nach 3 Elementen
  2. False nach 5 Elementen
  3. True nach 2 Elementen
  4. True nach 3 Elementen
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()
  1. 10
  2. 15
  3. 20
  4. 25
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Eine Schleife soll jede ganze Zahl von 1 bis einschließlich 7 addieren. Welcher Zahlenbereich soll ihre Werte liefern?
  1. range(1, 7)
  2. range(0, 7)
  3. range(2, 8)
  4. range(1, 8)
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
  1. 3 Durchläufe; amount ist 24.
  2. 4 Durchläufe; amount ist 40.
  3. 5 Durchläufe; amount ist 96.
  4. 4 Durchläufe; amount ist 48.
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: "))
  1. Sie akzeptiert nur Endpunkte; ersetze < durch <=.
  2. Sie weist nichts zurück; ersetze and durch or.
  3. Sie weist jeden Wert zurück; ersetze and durch or.
  4. Das letzte Einlesen fehlt; verschiebe die Eingabe vor while.
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)
  1. 1
  2. 2
  3. 0
  4. 5
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)
  1. 4
  2. Eine ValueError-Meldung
  3. 10
  4. 6
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
  1. 0, dann 1
  2. Nur 0
  3. 0, dann 2, dann 3
  4. Überhaupt nichts
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)
  1. 16
  2. 13
  3. 0
  4. 5
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)
  1. 12
  2. 5
  3. 16
  4. None
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)
  1. 6
  2. 3
  3. 9
  4. 2
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
  1. 5
  2. 14
  3. 16
  4. 10
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Eine Anzeige enthält 6 Werte in einer Zeile, wobei nur zwischen benachbarten Werten ein Komma steht. Wie viele Kommas soll sie ausgeben?
  1. 6
  2. 5
  3. 7
  4. 4
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
  1. Verwende while n <= 21:.
  2. Ändere den Startwert auf 2.
  3. Verwende while n < 20:.
  4. Ändere die Aktualisierung zu n += 1.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Ein Benutzer gibt eine ganze Zahl n ein. Danach soll ein Programm für nichtnegative n genau n-mal „Ready“ ausgeben. Welcher Schleifenkopf drückt diese Anzahl direkt aus?
  1. for _ in range(n):
  2. while n >= 0:
  3. for _ in n:
  4. for _ in range(n + 1):
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
  1. a ist 0; b ist 0.
  2. a ist 2; b ist 2.
  3. a ist 0; b ist -2.
  4. a ist 2; b ist 0.
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)
  1. 3, dann 9
  2. 3, dann 6, dann 9
  3. Nur 3
  4. Nur 6
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")
  1. Nur Locked
  2. Open, dann Locked
  3. Überhaupt nichts
  4. Nur Open
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
  1. temp > highest
  2. temp >= highest
  3. temp < highest
  4. temp <= highest
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)
  1. 6, dann 12
  2. 6, dann 18
  3. 18, dann 18
  4. 1, dann 4
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)
  1. 4 3
  2. 4 4
  3. 3 4
  4. 1 4
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)
  1. pml
  2. lmp
  3. pmal
  4. mlp
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)
  1. 6.25
  2. 15.0
  3. 12.5
  4. 25.0
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Hängst du bei deiner eigenen Aufgabe fest? Hausaufgabenhilfe

Schlüsselbegriffe

66 Schlüsselbegriffe, jeweils mit Definition

A

Ablauftabelle
Eine Ablauftabelle hält Variablenzustände über Schleifendurchläufe hinweg fest. Ihre Spalten sind so beschriftet, dass erkennbar ist, wann Werte beobachtet werden.
Die Ablauftabelle unterscheidet i vor dem Körper von i nach dem Inkrement.
Akkumulator
Ein Akkumulator ist eine Variable, die über mehrere Durchläufe hinweg ein Ergebnis wie eine Summe, ein Produkt oder einen Text bewahrt und aktualisiert.
Der Akkumulator total behält frühere Additionen, wenn der nächste Messwert eintrifft.
Alle-Prüfung
Eine Alle-Prüfung fragt, ob jedes Element eine Bedingung erfüllt, und kann beim ersten Misserfolg erfolglos enden.
Die Alle-Prüfung stoppt bei null, wenn sie prüft, ob jeder erfasste Wert positiv ist.
arithmetisches Mittel
Das arithmetische Mittel erhält man hier, indem man die Summe ausgewählter Werte durch deren Anzahl teilt.
Das arithmetische Mittel der passenden Punktzahlen verwendet deren Anzahl ohne zurückgewiesene Eingaben und den Sentinelwert.

Ä

äußere Schleife
Eine äußere Schleife umgibt eine andere Schleife und steuert, welche Gruppe oder Zeile die innere Schleife bei jedem Ablauf verarbeitet.
Die äußere Schleife hält row fest, während die innere Schleife jede Spalte dieser Zeile durchläuft.

B

Beendigung
Die Beendigung ist das Ende der Ausführung einer Schleife, wenn die Wiederholung durch eine falsche Bedingung oder eine Abbruchanweisung stoppt.
Die Beendigung einer Countdown-Schleife erfolgt, nachdem die Aktualisierung ihre nächste Bedingungsprüfung falsch gemacht hat.
break-Anweisung
Eine break-Anweisung ist eine Python-Anweisung, die ihre innerste enthaltende Schleife sofort beendet und deren restlichen Körper und verbleibende Durchläufe überspringt.
Break beendet die Suche, sobald der erste passende Wert ausgegeben wurde.

C

continue-Anweisung
Eine continue-Anweisung ist eine Python-Anweisung, die die verbleibenden Anweisungen des aktuellen Durchlaufs überspringt und zum nächsten Durchlauf übergeht.
Continue überspringt die Addition für einen negativen Wert, während spätere Werte weiterhin geprüft werden.

D

diagnostische Ausgabe
Eine diagnostische Ausgabe ist eine vorübergehende Ausgabeanweisung, mit der der Programmzustand an einer gewählten Stelle der Ausführung untersucht wird.
Eine diagnostische Ausgabe nach den Aktualisierungen zeigt Zähler und Summe am Ende des Durchlaufs.

E

else-Block einer Schleife
Ein else-Block einer Schleife ist ein Block, der nach regulärer Beendigung der Schleife ausgeführt und übersprungen wird, wenn diese Schleife durch break verlassen wird.
Der else-Block einer Schleife gibt eine Fehlermeldung aus, nachdem jeder Kandidat ohne Treffer geprüft wurde.
Endgrenze
Die Endgrenze eines Zahlenbereichs ist seine ausgeschlossene Grenze, die die gelieferten Werte in Richtung seiner Schrittweite begrenzt.
Eine Endgrenze von 11 ermöglicht es range(1, 11), 10 als letzten gelieferten Wert einzuschließen.
Endlosschleife
Eine Endlosschleife wiederholt sich, ohne über ihre Bedingung oder eine andere Steueranweisung einen Ausgang zu erreichen.
Eine Schleife ohne Aktualisierung wird zu einer Endlosschleife, die immer dieselbe positive Zahl ausgibt.
Endwert
Ein Endwert ist der Wert, den eine Variable nach dem Ende der Schleife enthält und der sich vom zuletzt ausgegebenen Wert unterscheiden kann.
Wenn eine Zählschleife i ausgibt und stoppt, sobald i den Wert 5 erreicht, ist der Endwert von i gleich 5, obwohl der letzte ausgegebene Wert 4 war.
erweiterte Zuweisung
Eine erweiterte Zuweisung verbindet eine Operation mit einer Zuweisung und ersetzt den Wert einer Variablen durch ihren aktualisierten Wert.
Die erweiterte Zuweisung total += n addiert die aktuelle Zahl zur gespeicherten Zwischensumme.

F

Filtern
Filtern wählt Elemente aus, die eine Bedingung erfüllen, sodass nur diese Elemente eine bestimmte Verarbeitung erhalten oder zu einem Ergebnis beitragen.
Das Herausfiltern negativer Werte ermöglicht der Schleife, nur die akzeptierten Messwerte zu summieren.
for-Schleife
Eine for-Schleife weist einer Variablen aufeinanderfolgende Elemente einer Sequenz zu und führt ihren Körper für jedes gelieferte Element aus.
Eine for-Schleife durchläuft die erfassten Punktzahlen der Reihe nach und gibt jeweils das Doppelte des aktuellen Werts aus.

G

geordnetes Paar
Ein geordnetes Paar hält zwei Werte mit unterschiedlichen Rollen als erster und zweiter Wert fest, sodass ihre Umkehrung ein anderes Ergebnis beschreiben kann.
Das geordnete Paar (2, 5) für zwei Würfel unterscheidet sich von (5, 2), weil sich der erste Würfel ändert.
gespeicherter Treffer
Ein gespeicherter Treffer ist eine separate Aufzeichnung eines erfolgreichen Kandidaten, die verfügbar bleibt, während sich die aktuellen Schleifenvariablen ändern.
Ein gespeicherter Treffer aus 3 und 4 behält diese Werte auch dann, wenn die Suche anschließend spätere Paare prüft.
Gleichstand
Ein Gleichstand liegt vor, wenn mehrere Elemente denselben besten Wert haben, sodass eine Positionssuche zwischen dem ersten und dem letzten wählen muss.
Beim Gleichstand zweier Punktzahlen von 12 bleibt unter einer strengen Größer-als-Prüfung die frühere Position erhalten.
Gleitkommaapproximation
Bei einer Gleitkommaapproximation werden viele Dezimalbrüche als benachbarte Binärwerte gespeichert, sodass wiederholte Additionen einen exakten Zielwert verfehlen können.
Durch Gleitkommaapproximation ist ein Abbruch bei exakter Gleichheit nach wiederholten Additionen von 0,1 unzuverlässig.
Grenzfall
Ein Grenzfall prüft einen Randbereich der vorgesehenen Arbeit einer Schleife, etwa null Elemente, ein Element oder ihren letzten eingeschlossenen Wert.
Der Grenzfall n gleich null zeigt den zusätzlichen Durchlauf, der durch die Prüfung i <= n entsteht.

I

Initialisierung
Die Initialisierung weist einer Variablen ihren Startwert zu, bevor eine Berechnung oder ein wiederholter Prozess sie verwendet.
Die Initialisierung setzt den Zähler auf null, bevor passende Werte gezählt wurden.
innere Schleife
Eine innere Schleife steht im Körper einer anderen Schleife und beginnt jedes Mal einen neuen Ablauf, wenn die Ausführung ihren Schleifenkopf erreicht.
Die innere Schleife beginnt erneut bei Spalte 1, wenn das Einmaleinsraster zur nächsten Zeile übergeht.
innerste Schleife
Die innerste Schleife ist die nächste umgebende Schleife, die eine Anweisung enthält. Auf diese Schleife wirkt break oder continue.
Die innerste Schleife geht zu ihrer nächsten Spalte über, wenn ihr Körper continue ausführt.

K

KeyboardInterrupt
KeyboardInterrupt ist die Unterbrechung, die Python normalerweise meldet, wenn ein Benutzer die Ausführung im Terminal mit Strg+C stoppt.
Das Stoppen einer feststeckenden Terminalschleife mit Strg+C erzeugt KeyboardInterrupt und einen Traceback.
Kurzschlussauswertung
Die Kurzschlussauswertung überspringt den späteren Teil eines booleschen Ausdrucks, sobald das Ergebnis durch den früheren Teil feststeht.
Die Kurzschlussauswertung von or vermeidet den Vergleich eines ersten numerischen Elements mit None.

L

laufende Summe
Eine laufende Summe ist die angesammelte Summe zu einem bestimmten Zeitpunkt der Verarbeitung, vor oder beim letzten Element.
Die Ausgabe der laufenden Summe innerhalb des Körpers zeigt, wie jedes Element die Zwischensumme verändert.
leerer Zahlenbereich
Ein leerer Zahlenbereich liefert keine Werte, weil sein Startwert in Richtung der Schrittweite nicht innerhalb seiner Grenze liegt.
Der leere Zahlenbereich range(5, 1) gibt einer for-Schleife keine Arbeit für den Körper und löst keinen Fehler aus.
lineare Suche
Eine lineare Suche prüft Elemente einzeln in ihrer Sequenzreihenfolge, bis sie den benötigten Treffer findet oder alle Elemente aufgebraucht sind.
Eine lineare Suche nach dem ersten geraden Wert in einer gemischten Liste stoppt, sobald sie einen erreicht, etwa 8.

M

Maximum
Ein Maximum ist der größte Wert in einem Datensatz; eine Schleife kann ihn finden, indem sie den bisher größten Wert bewahrt.
Das Maximum von -8, -3 und -6 ist -3, obwohl jeder Kandidat unter null liegt.
Merkvariable
Eine Merkvariable ist eine boolesche Variable, die für spätere Entscheidungen festhält, ob ein Ereignis eingetreten oder eine Bedingung erfüllt worden ist.
Die Merkvariable found bleibt nach einem Treffer True, damit das Programm nach der Suche Erfolg melden kann.
Mindestens-eins-Prüfung
Eine Mindestens-eins-Prüfung fragt, ob mindestens ein Element eine Bedingung erfüllt, und kann erfolgreich enden, sobald eines sie erfüllt.
Die Mindestens-eins-Prüfung setzt ihre Merkvariable bei der ersten Punktzahl über dem benötigten Minimum auf True.
Minimum
Ein Minimum ist der kleinste Wert in einem Datensatz; eine Schleife ersetzt ihren gespeicherten Wert, sobald ein kleineres Element erscheint.
Die Mindesttemperatur wird zu -7, wenn dieser Messwert niedriger als der gespeicherte beste Wert ist.

N

Nachvollziehen des Programmablaufs
Beim Nachvollziehen des Programmablaufs verfolgt man Code Anweisung für Anweisung und hält Änderungen und ausgeführte Wege fest, um Werte und Ausgaben vorherzusagen.
Das Nachvollziehen des Programmablaufs zeigt, dass ein Inkrement vor der Addition jeden in der Summe verwendeten Wert verschiebt.
None
None ist Pythons besonderer Wert für das Fehlen eines Werts. In einer Schleife zur Suche nach dem besten Wert markiert er, dass noch kein Element betrachtet wurde.
None bleibt der gespeicherte beste Wert, wenn die Schleife zur Suche nach dem Maximum eine leere Liste erhält.

P

pass-Anweisung
Eine pass-Anweisung ist eine Python-Anweisung, die keine Aktion ausführt und in einem Block stehen kann, in dem eine Anweisung erforderlich ist.
Pass füllt einen unfertigen if-Körper, aber die print-Anweisung nach diesem if wird trotzdem ausgeführt.
Produktakkumulator
Ein Produktakkumulator multipliziert ausgewählte Faktoren in ein gespeichertes Ergebnis und beginnt normalerweise bei eins, um den ersten Faktor zu erhalten.
Ein bei eins beginnender Produktakkumulator ergibt nach der Multiplikation von 2, 3 und 4 den Wert 24.

R

reguläre Beendigung
Bei der regulären Beendigung endet eine for-Schleife durch das Aufbrauchen ihrer Elemente oder eine while-Schleife durch eine falsche Bedingung, ohne break auszuführen.
Die reguläre Beendigung einer leeren for-Schleife erreicht trotzdem ihren else-Block.

S

Schleife
Eine Schleife wiederholt einen Anweisungsblock entsprechend einer Bedingung oder einer Sequenz von Elementen, die die Arbeit vorgibt.
Eine Countdown-Schleife gibt einen Wert aus und verringert ihn, bevor sie über eine Wiederholung entscheidet.
Schleife mit bestimmter Anzahl von Durchläufen
Eine Schleife mit bestimmter Anzahl von Durchläufen hat eine festgelegte Sequenz von Elementen oder eine Anzahl von Wiederholungen, auch wenn diese Anzahl erst zur Laufzeit berechnet wird.
Eine Schleife mit bestimmter Anzahl von Durchläufen wiederholt die Begrüßung n-mal, nachdem n vom Benutzer eingelesen wurde.
Schleife mit unbestimmter Anzahl von Durchläufen
Eine Schleife mit unbestimmter Anzahl von Durchläufen wiederholt sich nach einer Bedingung, deren Endpunkt nicht als feste Anzahl von Wiederholungen angegeben ist.
Eine Schleife mit unbestimmter Anzahl von Durchläufen sammelt Nachrichten, bis der Benutzer das gewählte Stoppwort eingibt.
Schleife zur Eingabevalidierung
Eine Schleife zur Eingabevalidierung wiederholt eine Aufforderung, solange die gegebene Antwort die Bedingungen für einen akzeptablen Wert nicht erfüllt.
Eine Schleife zur Eingabevalidierung fragt erneut, wenn eine eingegebene Menünummer außerhalb von 1 bis 4 liegt.
Schleifendurchlauf
Ein Schleifendurchlauf ist ein Durchgang durch einen Schleifenkörper, bei dem die Anweisungen auf dem ausgeführten Weg der Reihe nach ablaufen.
Jeder Durchlauf einer Countdown-Schleife gibt eine Zahl aus, bevor die verbleibende Anzahl aktualisiert wird.
Schleifenkörper
Ein Schleifenkörper ist der eingerückte Anweisungsblock, der für jedes Element oder jede erfolgreiche Bedingungsprüfung wiederholt wird.
In einer Countdown-Schleife enthält der Schleifenkörper sowohl die print-Anweisung als auch die Aktualisierung, die den Zählwert in Richtung null verändert.
Schleifenvariable
Eine Schleifenvariable enthält das aktuelle Element, das ihr eine for-Schleife zuweist, und kann von Anweisungen in deren Körper verwendet werden.
Die Schleifenvariable score enthält jeweils eine Punktzahl, während scores die vollständige Liste bezeichnet.
Schrittweite
Die Schrittweite eines Zahlenbereichs ist die von null verschiedene ganzzahlige Änderung zwischen aufeinanderfolgenden gelieferten Werten; standardmäßig ist sie positiv eins.
Eine Schrittweite von -2 lässt range(8, 0, -2) absteigende gerade Werte durchlaufen.
sentinelgesteuerte Schleife
Eine sentinelgesteuerte Schleife wiederholt die Verarbeitung von Eingaben, bis sie auf einen festgelegten Wert trifft, der das Ende signalisiert.
Eine sentinelgesteuerte Schleife kann eine unbekannte Anzahl positiver Messwerte erfassen.
Sentinelwert
Ein Sentinelwert ist ein besonderer Eingabewert, der das Ende der Daten signalisiert und von echten Datenelementen getrennt gehalten wird.
Der Sentinelwert -1 beendet das Erfassen von Punktzahlen, während null eine gültige Punktzahl bleibt.
Sequenz
Eine Sequenz ist eine geordnete Sammlung von Elementen, etwa die Zeichen einer Zeichenkette oder die Werte einer Liste.
Die Sequenz „a b“ liefert drei Zeichen, einschließlich des Leerzeichens zwischen den Buchstaben.
Startwert
Der Startwert eines Zahlenbereichs ist seine erste mögliche ganze Zahl; standardmäßig ist er null, wenn nur die Endgrenze angegeben wird.
Ein Startwert von 3 lässt range(3, 8) bei 3 statt beim Standardwert null beginnen.

T

Treffer
Ein Treffer ist ein Element, das eine Suchbedingung erfüllt, die Gleichheit oder eine andere Eigenschaft wie Teilbarkeit prüfen kann.
Wenn 18 die erste gelieferte Zahl ist, die durch 6 teilbar ist, wird der Treffer 18 gespeichert.
Trennzeichen
Ein Trennzeichen ist Text zwischen benachbarten Ausgabeelementen; bei einer nicht leeren Sequenz von n Elementen müssen n - 1 solche Zwischenräume gefüllt werden.
Die Ausgabe eines Trennzeichens vor jedem späteren Element vermeidet einen zusätzlichen Bindestrich nach dem letzten.
Typumwandlung
Eine Typumwandlung wandelt einen Wert in einen anderen Datentyp um, etwa numerischen Eingabetext mit int in eine ganze Zahl.
Die Typumwandlung ermöglicht der Schleife, die eingegebene Zeichenkette „0“ mit einem ganzzahligen Sentinelwert zu vergleichen.

U

Um-eins-Fehler
Ein Um-eins-Fehler ergibt einen Durchlauf zu viel oder zu wenig oder verschiebt einen beabsichtigten ersten oder letzten Wert um eins.
Ein Um-eins-Fehler lässt 10 aus, wenn eine Summe range(1, 10) verwendet.

V

verschachtelte Schleife
Eine verschachtelte Schleife ist eine Schleife im Körper einer anderen Schleife, sodass sich die innere Arbeit für jedes äußere Element wiederholen kann.
Eine verschachtelte Schleife gibt für jede Zeile des Einmaleinsrasters eine eigene Folge von Spalten aus.
verschachtelte Suche
Eine verschachtelte Suche prüft Kombinationen mit einer Schleife innerhalb einer anderen und kann eine Merkvariable für einen Treffer über beide Ebenen hinweg führen.
Die verschachtelte Suche verwendet zwei break-Anweisungen, um beide Schleifen bei ihrem ersten erfolgreichen Paar zu stoppen.
vorbereitendes Einlesen
Das vorbereitende Einlesen holt die erste Eingabe vor einer Schleife, damit ihre Anfangsbedingung einen Wert zum Prüfen hat.
Durch das vorbereitende Einlesen kann ein sofort eingegebener Stoppwert den datenverarbeitenden Körper vollständig überspringen.
vorzeitiger Schleifenabbruch
Ein vorzeitiger Schleifenabbruch verlässt eine Schleife vor ihrem regulären Ende, etwa wenn eine Suche nach einem Treffer break ausführt.
In einer Schleife, die nach einem Vielfachen einer Zahl sucht, vermeidet ein vorzeitiger Schleifenabbruch die Prüfung späterer Zahlen, sobald das erste Vielfache gefunden wurde.

W

while True-Schleife
Eine while True-Schleife hat einen immer wahren Schleifenkopf und verlässt sich auf eine Steueranweisung in ihrem Körper, um sie bei Bedarf zu beenden.
Eine while True-Schleife liest eine Zeile, prüft den Sentinelwert und gibt nur echte Daten wieder aus.
while-Schleife
Eine while-Schleife prüft vor jedem Durchlauf eine Bedingung und wiederholt ihren eingerückten Körper, solange die Bedingung wahr ist.
Eine while-Schleife kann eine Größe wiederholt verdoppeln, bis sie ein benötigtes Minimum erreicht.

Z

Zahlenbereich
Ein Zahlenbereich beschreibt ganze Zahlen mit gleichmäßigen Abständen durch einen Startwert, eine ausgeschlossene Endgrenze und eine von null verschiedene Schrittweite, ohne eine vollständige Liste zu erstellen.
Der Zahlenbereich range(2, 11, 2) liefert fünf gerade Werte von 2 bis einschließlich 10.
Zähler
Ein Zähler ist ein Akkumulator, der jedes Mal um eins steigt, wenn ein bestimmtes Ereignis eintritt oder ein Element akzeptiert wird.
Der Zähler steigt nur für Punktzahlen über dem gewählten Schwellenwert, nicht für jede Eingabe.
Zählschleife
Eine Zählschleife durchläuft aufeinanderfolgende Zahlenwerte mit einem Startwert, einer Prüfung der Grenze und einer Schrittweite.
Eine Zählschleife, die bei 10 beginnt und die Schrittweite -2 hat, durchläuft 10, 8, 6, 4 und 2, ob sie mit for oder while ausgedrückt wird.
Zaunpfahlfehler
Ein Zaunpfahlfehler verwechselt die Anzahl von Elementen mit der Anzahl von Begrenzungen oder Zwischenräumen, etwa Trennzeichen zwischen ausgegebenen Werten.
Ein Zaunpfahlfehler gibt sechs Kommas nach sechs Werten aus, obwohl nur fünf Kommas dazwischen nötig sind.
zeilenweiser Akkumulator
Ein zeilenweiser Akkumulator baut für einen äußeren Durchlauf ein Ergebnis auf und wird zurückgesetzt, bevor dessen innere Arbeit beginnt.
Der zeilenweise Akkumulator beginnt für Zeile 2 neu, sodass seine Summe Zeile 1 nicht enthält.
Zugehörigkeitsprüfung
Eine Zugehörigkeitsprüfung prüft mit in, ob ein Wert in einer Sequenz vorkommt, und liefert ein boolesches Ergebnis.
Die Zugehörigkeitsprüfung ch in "aeiou" entscheidet, ob ein Vokalzähler erhöht wird.

Über diese Einheit

Von StudeliFehler melden

Erstelle deine eigenen Lernmaterialien

Mach aus deinen Notizen, Folien und Dokumenten Lernleitfäden, Übungsfragen, Karteikarten und 6 weitere Tools.

Jetzt starten