Summe und Durchschnitt
Jetzt, wo du eine Liste durchgehen kannst, sehen wir uns an, wofür solche Schleifen am häufigsten benutzt werden. Das erste Muster addiert alle Elemente. Du kennst es aus der Lektion über Schleifen: eine Variable, die vor der Schleife bei 0 beginnt und in jedem Durchlauf wächst. So viel Milch in Litern hat die Kuh Bella in vier Tagen gegeben:
local milch = {12, 15, 11, 14}
local summe = 0
for _, liter in ipairs(milch) do
summe = summe + liter
end
print("Insgesamt: " .. summe .. " Liter")Das gibt Folgendes aus:
Insgesamt: 52 Litersumme beginnt bei 0, denn bevor du etwas addierst, ist die Summe null. In jedem Durchlauf addiert die Schleife ein Element: Nach dem ersten Durchlauf ist summe gleich 12, dann 27, 38 und schließlich 52. Das print steht nach der Schleife, wenn die Summe fertig ist. In der Schleife würde es jede Zwischensumme ausgeben.
Der Durchschnitt ist die Summe geteilt durch die Anzahl der Elemente, also #milch:
local milch = {12, 15, 11, 14}
local summe = 0
for _, liter in ipairs(milch) do
summe = summe + liter
end
local durchschnitt = summe / #milch
print("Durchschnitt: " .. durchschnitt)Das gibt Folgendes aus:
Durchschnitt: 13.0Denk an die Lektion über Variablen: / ergibt immer eine Dezimalzahl, auch wenn das Ergebnis ganz ist, deshalb ist 52 / 4 gleich 13.0. Und wenn das Ergebnis nicht ganz ist, kannst du viele Stellen bekommen. Für die Milch einer ganzen Woche, {12, 15, 11, 14, 13, 16, 9}, ist der Durchschnitt 90 / 7, was als 12.857142857143 ausgegeben wird. Um ihn für die Ausgabe zu runden, nimm string.format mit %.1f, einer Nachkommastelle:
print(string.format("Durchschnitt: %.1f Liter", 90 / 7))Das gibt Folgendes aus:
Durchschnitt: 12.9 LiterNimm für einen Durchschnitt nicht //: Es rundet auf eine ganze Zahl ab, und 90 // 7 ist nur 12.
Vorsicht bei einer leeren Liste. Ihre Summe ist 0 und ihre Länge ist 0, der Durchschnitt wäre also 0 / 0, und das ist überhaupt keine Zahl. Lua hält das Programm nicht an: Es berechnet einen besonderen Wert, nan (not a number, „keine Zahl“), und auf dieser Seite gibt print(0 / 0) den Wert -nan aus. Wenn eine Liste leer sein kann, prüfe #milch > 0, bevor du teilst.
Die Summe und der Durchschnitt führen oft zu weiteren Fragen, zum Beispiel welche Tage über dem Durchschnitt lagen. Dafür brauchst du zuerst den Durchschnitt, du gehst die Liste also ein zweites Mal durch, nachdem die erste Schleife fertig ist.
So schreibst du es:
Anweisungen
- 1
Addiere die Milch: Erzeuge eine lokale Variable
summemit dem Wert 0, gehemilchin einer Schleife durch und addiere jedes Element zusumme. Gib nach der SchleifeInsgesamt: 90 Literaus. - 2
Berechne den Durchschnitt aus
summeund#milchund gib ihn mitstring.formatmit einer Nachkommastelle aus:Durchschnitt: 12.9 Liter. - 3
Zähle die Tage, an denen Bella mehr Milch als im Durchschnitt gegeben hat. Gehe
milchnoch einmal durch, vergleiche jedes Element mit dem Durchschnitt (nicht mit dem gerundeten) und gib nach der SchleifeÜberdurchschnittlich: 4 Tageaus.