In der ersten Hälfte dieses Kurses hast du gelernt, wie du mit Python Grafiken erstellen und Rechnungen lösen kannst. In der zweiten Hälfte wenden wir uns nun komplexeren Programmen zu. Mit den Funktionen im letzten Block, haben wir bereits erste Schritte in diese Richtung unternommen.
Als Erstes möchten wir unseren Programmen Input übergeben können. Kopiere folgende Zeile in eine Python-Shell.
my_var = input("Eingabe: ")
Wenn du sie ausführst verlangt Python von dir eine Eingabe
und speichert diese dann in die Variable my_var
.
Teste verschiedene Eingaben, Text, Integer, Floats, und schau dir
danach jeweils my_var
an.
An den ''
siehst du, dass die Eingabe immer als String
gespeichert wird.
Erstelle eine Kopie deines "Hallo Welt"-Skripts. Passe dein neues Skript so an, dass es den Benutzer zuerst nach seinem Namen fragt und ihn dann begrüsst.
name = input("Wie heisst du? ") print("Hallo", name)
Meist möchtest du wohl nicht Text sondern Zahlen einlesen.
Das klappt, indem du mit input
einen String einliest
und diesen anschliessend in eine Zahl umwandelst
my_var = input("Kommazahl: ") f = float(my_var) # oder in einem Schritt my_var = int(input("Ganzzahl: "))
Erstelle ein Programm, das zwei Zahlen einliest und ihre Summe und Differenz ausgibt.
a = float(input(" a = ")) b = float(input(" b = ")) print("a+b =", a+b) print("a-b =", a-b)
Test dein Programm mit verschiedenen Inputs, auch mit Buchstaben. Wenn Python deine Eingabe nicht wie gewünscht umwandeln kann, stürzt dein Programm mit einem Fehler ab.
ValueError: could not convert string to float
Das sollte nicht so sein. Du kannst nie davon ausgehen, dass der Benutzer sich so verhält wie er sollte. Du solltest dein Code so absichern, dass es bei einer unerwarteten Eingabe nicht einfach abstürzt. Dafür kannst du einen try-except-Block verwenden.
import sys try: my_var = float(input("Eingabe: ")) except ValueError: sys.exit() print(my_var)
Du siehst die Struktur eines try-except-Blockes.
Der Block beginnt mit try:
und endet mit except ErrorType:
.
Dazwischen ist der Block mit den Code-Zeilen, die einen Error
vom Typ ErrorType verursachen könnten.
In unserem Fall könnte bei der Umwandlung von String zu Float
ein ValueError ausgelöst werden.
Nach der except-Zeile folgt ein Block mit den Anweisung für den
Fall, dass der Fehler auftritt.
Wir verwenden hier die exit()
Funktion aus dem sys-Modul
um das Programm einfach zu beenden.
Wie bei den Funktionen sind die Code-Blöcke auch hier eingerückt.
Im Beispiel wird print(my_var)
deshalb nur
ausgeführt, wenn kein ValueError aufgetreten ist.
Ich empfehle dir immer vier Leerschläge fürs Einrücken zu verwenden.
Hinweis: Welchen ErrorType du abfangen musst, bestimmst du am Einfachsten in dem du den Fehler absichtlich provozierst und dann die Fehlermeldung anschaust.
Passe dein Programm aus der letzten Aufgabe so an, dass der Input abgesichert ist. Gib im Falle eines Fehlers eine nützliche Fehlermeldung aus. Ergänze die Ausgabe ausserdem um Produkt und Quotient. (Achtung: Kümmere dich um die neue Fehler-Quelle.)
import sys try: a = float(input(" a = ")) b = float(input(" b = ")) except ValueError: print("Fehler: Keine Zahl eingegeben.") sys.exit() print("a+b =", a+b) print("a-b =", a-b) print("a*b =", a*b) try: print("a/b =", a/b) except ZeroDivisionError: print("Fehler: Division durch 0")
Im letzten Abschnitt hast du gesehen, wie der Programmablauf durch Fehler gesteuert werden kann. Doch oft ist es nützlich den Programmablauf ganz allgemein von Bedingungen abhängig zu machen. Dafür gibt es if. Dieser Befehl erzeugt einen Code-Block, der nur ausgeführt wird, wenn eine Bedingungen erfüllt ist. Im folgenden Beispiel fragen wir den Nutzer auch nach der gewünschten Operation und rechnen dann nur das entsprechende Resultat aus.
import sys try: a = float(input(" a = ")) b = float(input(" b = ")) except ValueError: print("Fehler: Keine Zahl eingegeben.") sys.exit() op = input("Operator (+, -): ") if op == "+": print("a+b =", a+b) if op == "-": print("a-b =", a-b)
Die Addition wird also nur ausgeführt, wenn der Benutzer +
eingegeben hat.
In diesem Fall ist der Wert von op gleich + und
damit die Bedingung op == "+"
wahr.
Die Bedingung op == "-"
ist dann natürlich falsch und die
Subtraktion wird deshalb nicht ausgeführt.
Wahr und falsch werden in Python durch die Werte True
und False
ausgedrückt.
Du kannst diese Werte auch Variablen zuordnen
a = True b = op == "+"
oder auch direkt mit if verwenden
if True: print("Wahr")
Letzteres ist aber wohl nur in Spezialfällen sinnvoll.
In unserem Beispiel oben testen wir zwei Mal ob eine Bedingung zutrifft. Falls nicht, überspringen wir den Code-Block und setzen das Programm einfach danach fort. Mit else können wir aber auch einen Code-Block definieren der Ausgeführt wird wenn die Bedingung falsch ist. Schliesslich erlaubt elif (else if) eine weitere Bedingung zu testen.
import sys try: a = float(input(" a = ")) except ValueError: sys.exit() if (a > 0): print('positiv') elif (a == 0): print('null') else: print('negativ') print("Tschüss und bis zum nächsten Mal")
Für if und elif kannst du alle Ausdrücke
verwenden die sich zu True oder False vereinfachen lassen.
Vergleichsoperatoren sind uns bereits bei der
where
-Funktion für Arrays begegnet.
Wie du oben gesehen hast, kannst du nicht nur Zahlen sondern auch Strings
oder allgemein Objekte vergleichen.
Ausserdem kannst du mehrere Dinge gleichzeitig testen, indem du die
einzelnen Tests mit and
oder or
verknüpfst.
if (a == 1) and (b == 2):
Passe dein "Hallo"-Programm so an, dass es nach Namen und Geschlecht (m,M,f,F) fragt und dann je nach Eingabe passen grüsst.
name = input("Wie heisst du?\n") sex = input("Was ist dein Geschlecht (m,f)?\n") if (sex == "m") or (sex == "M"): print("Lieber", name) elif (sex == "f") or (sex == "F"): print("Liebe", name) else: print("Hallo", name)
In den letzten Beispielen haben wir immer wieder mit Strings gearbeitet. Wie alles in Python sind auch Strings Objekte. Stringobjekte haben sehr viele nützliche Methoden und verhalten sich ähnlich wie Listen.
s = "hallo welt" print(s.title()) print(s[0:5].upper())
Schau dir die Hilfe zu Strings an (pydoc3 "STRINGMETHODS"
oder help("STRINGMETHODS")
).
Verwende dein neues Wissen dann,
um die Geschlechtskontrolle im Programm der letzten Aufgabe anzupassen.
Das Programm soll jedes Wort das mit einem m (oder M) beginnt als
Männlich interpretieren (und analog für f und F).
name = input("Wie heisst du?\n") sex = input("Was ist dein Geschlecht?\n") if sex[0].lower() == "m": print("Lieber", name) elif sex[0].lower() == "f": print("Liebe", name) else: print("Hallo", name)
Schreibe ein Programm, dass zwei Vektoren mit 3 Komponenten einliest und dann folgende Grössen berechnet.
Verwende dabei die Funktionen aus dem letzten Block und definiere wo nötig weitere Funktionen.
Definiere die folgenden Variablen: a = -1, b = 2, c = 0, d = "2", foo="foo". Kontrolliere nun welche der folgenden Bedingungen als True ausgewertet wird, indem du jeweils einen if-Block schreibst.
Implementiere folgende Quiz-Frage in einem Programm.
Wann war der erste Mensch auf dem Mond?
Eine mögliche Programmstruktur ist:
(Lösung der Quiz-Frage: 20. Juli 1969)
Überlege dir andere Quiz-Fragen und implementiere sie.