0%

Arbeit mit Schleifen wiederholen · Übung

Baue ein Ergebnis schrittweise auf

Die letzten beiden Übungen haben die Werte eines Zahlenbereichs in einer Liste gesammelt. Manchmal brauchst du eine einzelne Antwort, die von allen Werten abhängt, etwa den Gesamtpreis mehrerer Artikel.

Dafür brauchst du eine Variable, die von einem Durchlauf zum nächsten erhalten bleibt.

Außen beginnen, innen ändern, danach verwenden

Angenommen, du möchtest die Summe einer Preisliste:

Try it

Drei Zeilen, drei Aufgaben:

  1. total = 0 läuft vor der Schleife. Es erstellt die Variable und gibt ihr einen Ausgangswert.

  2. total = total + price läuft innerhalb der Schleife, einmal pro Wert. Es nimmt die aktuelle Summe und ersetzt sie durch eine größere.

  3. print(total) läuft nach der Schleife, wenn alle Werte addiert wurden.

Dieses Muster hat einen Namen. Die Variable heißt Akkumulator, und wir sprechen vom Akkumulatormuster. Die Schleife hält ein Ergebnis fest, zu dem jeder Wert beiträgt.

Verfolge total durch die Durchläufe: Es beginnt bei 0, hält dann 4, danach 13 und schließlich 28. Den Anstieg Durchlauf für Durchlauf zu beobachten macht das Muster viel leichter nachvollziehbar als nur darüber zu lesen. Die Übung am Ende dieser Lektion eignet sich dafür mit der Schaltfläche Step.

Diese Darstellung in vier Feldern hält den Akkumulator vor der Schleife und nach jeder Addition fest. BEFORE LOOP bedeutet „vor der Schleife“, PASS bezeichnet einen Durchlauf:

Vier Felder verfolgen total von null über die Additionen 0 plus 4, 4 plus 9 und 13 plus 15 bis zum Ergebnis 28.

Warum der Ausgangswert wichtig ist

Wenn total = 0 an der falschen Stelle steht, setzt die Schleife den Wert in jedem Durchlauf zurück:

Try it

Die Antwort ist 15, der letzte Preis, weil die Summe vor jeder Addition verworfen wurde. Enthält ein Akkumulator am Ende nur den letzten Wert, prüfe, ob du ihn versehentlich innerhalb der Schleife eingerichtet hast.

Wenn du die Zeile ganz weglässt, entsteht im ersten Durchlauf ein NameError, denn total + price braucht ein bereits vorhandenes total.

Was gibt dieser Code aus?

values = [2, 5, 3]

total = 0
for value in values:
    total = total + value
    print(total)

Wo gehört der Ausgangswert eines Akkumulators hin?

Wenn die lange Form klar ist

Python hat eine kürzere Schreibweise für die Aktualisierung:

total += price

Für diese Zahlen bedeutet sie dasselbe wie total = total + price: Nimm die aktuelle Summe, addiere den aktuellen Preis und speichere den neuen Wert wieder in total. Die längere Form eignet sich gut, um das Muster nachzuvollziehen. Die kürzere ist praktisch, sobald du erklären kannst, was sie ersetzt.

Baue jetzt deine eigene Summe auf. Ein Akkumulator reicht für die erste Begegnung. Er hat bereits genug zu behalten.

Aufgabe

Die Liste donations ist bereits vorgegeben. Addiere mit einer Schleife jede Spende zu total und behalte die Berichtszeile nach der Schleife bei.

Erwartete Ausgabe:

Total: 142

Richte total vor der Schleife ein. Du kannst die Aktualisierung als total = total + donation schreiben oder, sobald dir das klar ist, als total += donation.

Beobachte, wie der Akkumulator wächst

Wenn dein Programm läuft, klicke in der Werkzeugleiste des Editors auf Step und gehe mit Next hindurch. Beobachte den Variablenbereich.

Sieh zu, wie total von 0 auf 12, dann auf 57 und schließlich auf 142 steigt. Die hilfreiche Frage in jedem Durchlauf lautet: „Was enthielt total vor dieser Spende, und was enthält es jetzt?“