Eingaben & Zählerschleifen
In diesem Kapitel lassen wir Kara erst mal auf der Seite. Mathematische Algorithmen dienen dazu, kleine und grosse Probleme der Mathematik allgemeingültig zu lösen. Ein Beispiel ist die Berechnung des Mittelwerts (Durchschnitts) von mehreren Werten. Ganz allgemein verarbeitet ein Algorithmus eine Eingabe (input, im Beispiel: Einzelwerte) und produziert eine Ausgabe (output, im Beispiel: Mittelwert).
Benutzereingaben
Während du bereits weisst, wie du mit print(...) eine Ausgabe erzeugst, lernst du hier die Funktion input() kennen, um eine Eingabe des Benutzers zu erhalten.
name = input('Wie heisst du?')
print("Hallo", name)
Merke:
input() erlaubt eine Benutzer:innen-Eingabe und gibt diese als String (Text) zurück.
Optional kann ein Prompt (Anweisung) mitgegeben werden, die bei der Eingabe angezeigt wird.
Um Zahlen einzulesen, muss die Eingabe in den gewünschten Typ (int oder float) umgewandelt werden:
alter = int(input('Wie alt bist du?'))
höhe = float(input('Wie gross bist du (Eingabe in Metern)?'))
print("Du bist", alter*365, "Tage alt")
print("Du bist", höhe*100, "cm gross")
Was passiert, wenn sich die Eingabe nicht in den gewünschten Typ umwandeln lässt?
Aufgabe G1: Alter!
Lies das Alter in Jahren als Ganzzahl (`int`) ein und speichere es in der Variable years. Berechne das Alter in Tagen, Stunden und Sekunden und gib die Werte aus. Effekte wie Schaltjahre oder Schaltsekunden musst du bei der Berechnung nicht berücksichtigen.
years = int(input('Wie alt bist du?'))
years = int(input('Wie alt bist du?'))
days = years * 365
print("Du bist", days, "Tage alt")
hours = days * 24
print("Du bist", hours, "Stunden alt")
seconds = hours * 3600
print("Du bist", seconds, "Sekunden alt")
assert with_input("15") and all(str(x) in output() for x in [15*365, 15*365*24, 15*365*24*3600])
Aufgabe G2: Maximum
Lies zwei Zahlen a und b ein und gib die grössere der beiden aus. Wenn beide gleich gross sind, soll diese eine Zahl ausgegeben werden. Verwende den > Operator.
a = float(input("Zahl a"))
b = float(input("Zahl b"))
if a > b:
print(a)
else:
print(b)
assert with_input("3", "5") and "5" in output(), "Die grössere von zwei Zahlen muss ausgegeben werden"
assert with_input("67", "67") and "67" in output(), "Sind beide gleich gross, muss die eine Zahl ausgeben werden."
assert with_input("-14.3", "-67") and "-14.3" in output(), "Die Eingaben müssen in Zahlen umgewandelt werden!"
Aufgabe G3: Maximum von drei Zahlen
Lies drei Zahlen a, b und c ein und gib die grösste aus.
a = float(input("Zahl a"))
b = float(input("Zahl b"))
c = float(input("Zahl c"))
if a > b:
if a > c:
print(a)
else:
print(c)
else:
if b > c:
print(b)
else:
print(c)
assert with_input("3", "5", "-2") and "5" in output()
assert with_input("-14.3", "-67", "-3.8") and "-3.8" in output(), "Die Eingaben müssen in Zahlen umgewandelt werden!"
assert with_input("67", "67", "67") and "67" in output(), "Sind beide gleich gross, muss die eine Zahl ausgeben werden."
Aufgabe G4: Mittelwert von drei Zahlen
Lies drei Zahlen a, b und c ein und gib den Mittelwert (Durchschnitt) aus.
a = float(input("Zahl a"))
b = float(input("Zahl b"))
c = float(input("Zahl c"))
summe = a + b + c
mittelwert = summe / 3
print(mittelwert)
assert with_input("4", "5", "6") and "5" in output().strip()
assert with_input("3.7", "4.7", "3.6") and "4.0" in output().strip()
Zählerschleifen
Schleifen kennst du bereits von Kara. Wir können Schleifen auch sonst benützen, um Code zu wiederholen. Damit eine Schleife nicht ewig wiederholt, muss sichergestellt werden, dass die Schleifenbedingung irgendwann False wird.
Das klassische Muster einer Zählerschleife verwendet eine Zählervariable (oft i genannt), die jede Runde um einen Schritt verändert wird. Die Schleifenbedingung verwendet die Zählervariable und einen der Vergleichsoperatoren <, <=, >=, >, um die gewünschte Anzahl Wiederholungen zu erzeugen.
i = 0
while i < 5:
print(i)
i = i + 1
Aufgabe G5: Countdown
Gib die Zahlen von 10 ... 0 auf der Konsole aus! Verwende dafür den >= Operator!
i = 10
while i >= 0:
print(i)
i = i - 1
assert output_lines() == [str(x) for x in range(10, -1, -1)], f"Output should be 10 .. 0, was {output_lines()}"
Aufgabe G5a: Konfigurierbarer Countdown
Erweitere den Code der letzten Aufgabe: Lies eine Ganzzahl ein und speichere sie in der Variable start!
Gib den Countdown von start … 0 auf der Konsole aus!
i = int(input("Startwert?"))
while i >= 0:
print(i)
i = i - 1
assert with_input("5") and output_lines() == [str(x) for x in range(5, -1, -1)], f"Output should be 5 .. 0, was {output_lines()}"
Aufgabe G6: Reihensumme
Lies eine Ganzzahl n ein.
Berechne die Summe 1+2+...+n und gib sie aus! Für die Eingabe 4 soll beispielsweise 10 ausgegeben werden, da 1+2+3+4 = 10.
n = int(input("Was ist n?"))
summe = 0
while n > 0:
summe = summe + n
n = n - 1
print(summe)
assert with_input("4") and "10" in output()
assert with_input("20") and "210" in output()
Aufgabe G7: Mittelwert allgemein
Lies eine Ganzzahl anzahl ein.
Lies die gewünschte Anzahl an Werten ein und gib deren Mittelwert aus.
anzahl = int(input("Wieviele Werte?"))
summe = 0
i = 0
while i < anzahl:
zahl = float(input("Wert?"))
summe = summe + zahl
i = i + 1
mittelwert = summe / anzahl
print(mittelwert)
assert with_input("2", "5", "4") and "4.5" in output()
assert with_input("5", "1.5", "2.5", "3.5", "4.5", "5.5") and "3.5" in output()