Flussdiagramme
Aufgabe: Flussdiagramme zum Programmcode
Zu folgendem Programmcode existieren drei Flussdiagramme. Doch es hat sich überall ein Fehler eingeschlichen.
- Notiere die problematischen Stellen und die nötige Korrektur.
- Was wird hier berechnet? Beschreibe möglichst kurz und präzise!
- Woran hat der/die Programmierer*in nicht gedacht? Was kann schiefgehen? Wie könnte man das Problem beheben?

Lösung: Flussdiagramme zum Programmcode
- Problematische Stellen:
- bei 2 wird zahl=0 zu spät (in der Schleife) auf gerufen
- bei 1 sind ja und nein vertauscht (bei while)
- bei 3 ist unklar wie es nach der Schleife weitergeht (verzweigung ohne Bedingung)
- Was berechnet wird:
Wir verschiebenprint(resultat)in die Schleife rein. Dann sehen wir wie das Resultat wächst:
print("Gib eine Zahl ein: ")
eingabe = int(input())
resultat = 0
zahl = 0
while zahl != eingabe:
resultat = resultat + zahl
print(resultat)
zahl = zahl + 1Es werden alle Zahlen bis zur, aber ohne eingegebener Zahl zusammengezählt!
- Was schiefgehen kann:
Jemand gibt eine negative Zahl ein. Weilzahlbei 0 startet wird die Bedingungzahl != eingabenie erfüllt sein. Wir landen in einer Endlosschleife!
Aufgabe: Flussdiagramm zeichnen
- Was macht das Programm?
- Zeichne zu folgendem Programmcode ein Flussdiagramm.

Lösung: Flussdiagramm zeichnen
- Es gibt die Wurzel der Zahl aus, falls eine ganzzahlige Wurzel exisitert (die Zahl eine Quadratzahl ist). Sonst wird nichts ausgegeben.
print("Gib eine Zahl ein: ")
a = int(input())
b = 1
while b < a:
if b * b == a:
print(b)
b = b + 1Fehler finden
Aufgabe: Fehler im Programmcode
Im folgenden Programmcode verstecken sich drei Syntax-Fehler (also Rechtschreibefehler oder Tippfehler). Die angezeigten Fehlermeldungen können helfen, die Fehler zu lokalisieren. Einer der drei Fehler wurde jedoch nicht erkannt, führt aber beim Programmstart zu einem Absturz.

Lösung
- Zeile 3
- Text ohne Anführungszeichen
print("Pythagoras") - Zeile 6
- Zuweisung mit Gleich und nicht Doppelpunkt:
a = int(input()) - Zeile 12
- nach dem if kommt ein Doppelpunkt!
Zusatzaufgabe
Nachdem die drei Syntax-Fehler der letzten Aufgabe behoben sind und das Programm ohne Fehlermeldung/Absturz ausgeführt wird, zeigt sich aber noch ein weiterer Fehler, der zu einer falschen Ausgabe führen kann. Findest du ihn?
Lösung: Zusatzaufgabe
Wenn man eine falsche Eingabe macht, wird zuunterst trotzdem die Antwort ausgegeben, was aber zu einem Fehler führt, da c gar nicht definiert ist.
Man müsste also korrekterweise das letzte print nur ausführen, wenn die Eingabe korrekt war und c berechnet ist!
import math
print("Pythagoras")
print("Gib die Länge der Seite a ein:")
a = int(input())
print ("Gib die Länge der Seite b ein:")
b = int(input())
if a <= 0 or b <= 0:
print ("Fehler: Die Seitenlänge darf nicht 0 oder kleiner sein!")
else:
c = math.sqrt(a*a + b*b)
print("Die Länge der Seite c lautet: " + str(c))Aufgaben zu Verzweigungen
Aufgabe: a
Der Benutzer gibt eine positive Zahl ein. Das Programm gibt Folgendes aus:
- «einstellig», wenn die Zahl kleiner als 10 ist,
- «unbekannt» sonst.
Lösung: a
print("Gib eine positive Zahl ein:")
zahl = int(input())
if zahl < 10:
print("einstellig")
else:
print("unbekannt")Aufgabe: b
Baue zwei zusätzliche Fallunterscheidungen ein:
- «einstellig», wenn die Zahl kleiner als 10 ist,
- «zweistellig», wenn die Zahl kleiner als 100 ist,
- «dreistellig», wenn die Zahl kleiner als 1000 ist,
- «unbekannt» sonst.
Lösung: b
print("Gib eine positive Zahl ein:")
zahl = int(input())
if zahl < 10:
print("einstellig")
elif zahl < 100:
print("zweistellig")
elif zahl < 1000:
print("dreistellig")
else:
print("unbekannt")Aufgabe: c
Der Benutzer soll eine Zahl zwischen 50 und 100 eingeben. Überprüfe, ob er sich korrekt verhalten hat und gibt sonst eine Fehlermeldung aus.
Lösung: c
print("Gib eine Zahl zwischen 50 und 100 ein:")
zahl = int(input())
if zahl < 50:
print("Zahl ist zu klein")
elif zahl > 100:
print("Zahl ist zu gross")Aufgabe: d
Der Benutzer soll zwei Zahlen eingeben. Das Programm rechnet die Summe der beiden Zahlen aus, aber nur, wenn diese beide positiv sind.
Lösung: d
print("Gib eine Zahl ein:")
zahl1 = int(input())
print("Gib eine zweite Zahl ein:")
zahl2 = int(input())
if zahl1 > 0 and zahl2 > 0:
summe = zahl1 + zahl2
print("Die Summer der beiden Zahlen lautet: " + str(summe))Aufgaben zu Schleifen
Aufgabe: a
Das Programm soll 10x denselben Satz ausgeben.
Lösung: a
for i in range(10):
print("Hallo Welt")Aufgabe: b
Gib alle Zahlen von 0 bis 99 aus. (Zusatzaufgabe: wie würde man die Zahlen von 1 - 100 ausgeben?)
Lösung: b
for zahl in range(100):
print(str(zahl))
# Zusatzaufgabe
for zahl in range(100):
print(str(zahl + 1))
# oder
for zahl in range(1,101):
print(str(zahl))Aufgabe: c
Der Benutzer soll die Anfangs- und Endzahl wählen können. Das Programm gibt alle von der Anfangs- (inklusive) bis zur Endzahl (exklusive) aus.
Lösung: c
print("Gib eine Zahl ein:")
zahl1 = int(input())
print("Gib eine grössere Zahl ein:")
zahl2 = int(input())
for zahl in range(zahl1, zahl2):
print(str(zahl))Kombinierte Aufgaben
Aufgabe: Passwort
Im untenstehenden Programm hat der Benutzer 3 Versuche, um ein korrektes Passwort einzugeben. (der Befehl break beendet die for-Schleife)
passwort = "geheim"
for versuch in range(3):
print("Passwort eingeben")
eingabe = input()
if eingabe == passwort:
print("Zugriff gewährt")
break
else:
print("Zugriff verweigert")Erweitere das Programm so, dass gezählt und ausgegeben wird, wie viele Versuche der Benutzer bis zur korrekten Eingabe des Passwortes braucht.
Lösung: Passwort
passwort = "geheim"
for versuch in range(3):
print("Passwort eingeben")
eingabe = input()
if eingabe == passwort:
print("Zugriff gewährt")
print("Du hast " + str(versuch + 1) + " gebraucht.")
break
else:
print("Zugriff verweigert")Aufgabe: Achterreihe
Gib nur die Zahlen von 1 bis 100 aus, die der Achterreihe angehören. Mit Hilfe des Operators % kannst du eine Division mit Rest durchführen: 16 % 8 ergibt 0, weil bei der Division von 16 durch 8 kein Rest übrig bleibt.
Lösung: Achterreihe
for zahl in range(1, 100):
if zahl % 8 == 0:
print(str(zahl))Aufgabe: Zahlen raten
Programmiere das Spiel «Zahlen raten». Der Benutzer soll so lange eine positive Zahl kleiner als 100 eingeben (erraten), bis die vorher festgelegte Zahl gefunden wurde. Das Programm gibt dabei je nach Eingabe Tipps in der Art «Die gesuchte Zahl ist grösser!». Dem Benutzer stehen höchten 7 Rateversuche zur Verfügung. ist das immer zu schaffen?
Lösung: Zahlen raten
print("Zahlen raten")
zahl = 42
for i in range(7):
print("Gib eine Zahl ein:")
eingabe = int(input())
if eingabe < zahl:
print("Die gesuchte Zahl ist grösser!")
elif eingabe > zahl:
print("Die gesuchte Zahl ist kleiner!")
else:
print("Gratuliere, du hast es geschafft!")Galgenmännchen
Wir haben schon mal probiert das Galgenmännchen-Spiel zu programmieren. Nun – mit Schleifen und Verzweigungen – können wir das tun:
wort = input("gib ein Wort ein, welches dann gesucht werden soll: ")
laenge = len(wort)
anzeige = laenge * "_"
print(anzeige)
versuche = 0
max_versuche = 5
while versuche < max_versuche:
buchstabe = input("welchen Buchstaben wählst du? ")
treffer = False
for i in range(laenge):
if wort[i] == buchstabe:
treffer = True
anzeige = anzeige[0:i] + buchstabe + anzeige[i + 1:laenge]
if not treffer:
versuche = versuche + 1
print("Falscher Versuche:", versuche)
else:
print("sehr gut!")
if anzeige == wort:
break
print(anzeige)
if versuche < max_versuche:
print("gewonnen")
else:
print("verloren!")Aufgabe: Galgenmännchen
- kopiere den obenstehenden Code ins Thonny und teste das Programm
- versuche zu verstehen, wie die Variablen
versucheundmax_versucheeingesetzt werden, resp. wie am Schluss entschieden werden kann, ob der Spieler gewonnen oder verloren hat - baue ein Unterprogramm
mach_strich(schritt)ein, so dass bei jedem Falsch geratenen Buchstaben von der Turtle ein Strich der Galgenmännchenfunktion gezeichnet wird. Das Unterprogramm muss irgendwie wissen, was schon gezeichnet wurde – dies könnte man mit einem Argument erledigen:
import turtle
def mach_strich(schritt):
if schritt == 0:
...
if schritt == 1:
...
...Knacknüsse
Aufgabe: Primzahl
Schreibe ein Programm, das für eine eingegebene Zahl prüft, ob es sich um eine Primzahl handelt. Eine Primzahl hat genau zwei Teiler: 1 und sich selbst.
Tipp:
Es gibt zwei spezielle Operatoren // und %, beide arbeiten mit der Ganzzahldivision. 14 // 3 ergibt 4 (4 ist also das Resultat der Ganzzahldivision), 14 % 3 ergibt 2, weil bei der Ganzzahldivision ein Rest von 2 übrig bleibt.
Lösung: Primzahl
print("Gib eine Zahl ein:")
zahl = int(input())
ist_primzahl = True
for teiler in range(2, zahl): # Lässt sich diese Schleife effizienter machen?
if zahl % teiler == 0:
print("Keine Primzahl")
ist_primzahl = False
break
if zahl < 2:
print("Keine Primzahl")
elif ist_primzahl:
print("Primzahl")Aufgabe: Fibonacci
Schreibe ein Programm, das die ersten 20 Fibonacci-Zahlen. Zwei Zahlen sind gegeben (z.B. 1 und 1). Die nachfolgende Fibonacci-Zahl berechnet sich aus der Summe der beiden vorhergehenden: 1, 1, 2, 3, 5, 8, 13, 21, …
Lösung: Fibonacci
zahl1 = 1
zahl2 = 1
print(str(zahl1))
for anzahl in range(20):
print(str(zahl2))
naechste_zahl = zahl1 + zahl2 # Es braucht eine zusätzliche Variable,
# denn ohne sie ist es nicht möglich, die
# Werte von zwei Variablen zu vertauschen.
zahl1 = zahl2
zahl2 = naechste_zahl