Progammierkurs Python¶
Sitzung 2 - Flows¶
Dictionaries / Hash Maps¶
Dictionaries speichern zu einem Key einen Value. Die Values können dabei beliebig sein - Keys müssen unveränderbar (immutable) sein.
foo = {
0: 'a',
1: 'b',
2: 'c',
3: 'd',
}
print(foo)
{0: 'a', 1: 'b', 2: 'c', 3: 'd'}
# zugriff auf ein *value* mithilfe eines *keys* in einem dictionary,
print(foo[0])
a
# hinzufügen von einem key/value pair zu einem vorhandenem dictionary
foo['zwanzig'] = 20
print(foo['zwanzig'])
20
# zugriff auf nicht existierenden key
foo['i do not exist']
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-4-a075d8932f32> in <module>
1 # zugriff auf nicht existierenden key
----> 2 foo['i do not exist']
KeyError: 'i do not exist'
Aufgabe
Schreibt ein Programm welches beim Input einer Zahl zwischen 0 und 10 die Zahl ausschreibt
Exceptions¶
Exceptions sind (un)erwartete Fehler die sich durch äußere Abähngigkeiten ergeben können.
Wenn das Programm auf eine Exception stößt stürzt das Programm ab - wir können allerdings eine Exception auffangen und sagen was passieren soll falls wir auf eine Exception stoßen.
42/0
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
<ipython-input-5-892840ca7299> in <module>
----> 1 42/0
ZeroDivisionError: division by zero
try:
42/0
except:
print('You can not divide through 0')
You can not divide through 0
foo = {
'a': 1
}
try:
print(foo['b'])
except KeyError:
# we can specify the exception we want to catch
print('"b" ist nicht im dictionary')
"b" ist nicht im dictionary
try:
42/0
except KeyError:
print('e')
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
<ipython-input-8-e403abe34edb> in <module>
1 try:
----> 2 42/0
3 except KeyError:
4 print('e')
ZeroDivisionError: division by zero
try:
42/0
except KeyError as e:
print('KeyError')
except ZeroDivisionError as e:
print(f'Teile nicht durch 0! {e}')
Teile nicht durch 0! division by zero
None
¶
None
ist ein sehr spezieller Typ der darauf hinweist das etwas nicht gesetzt worden ist.
Wenn wir eine Variable initialisieren aber wir erst an einem späteren Zeitpunkt wissen welchen Wert die Variable hat ist None
ein gutes Hilfsmittel.
Gerade bei Boolean Werten oder Strings ist None
sehr hilfreich.
Hat der User tatsächlich einen leeren String eingegeben oder haben wir nur vergessen den User zu Fragen nach seiner Eingabe?
Wurde der Boolean Wert tatsächlich gesetzt oder handelt es sich um den Default Wert?
ergebnis = None
# some calculations
ergebnis = 42
ergebnis = None
try:
ergebnis = 42/0
except ZeroDivisionError:
pass # pass means "do nothing"
if ergebnis is None:
print('We could not calculate your equation :(')
else:
print(f'Your result is {ergebnis}')
We could not calculate your equation :(
Control Flows¶
Mit Control Flows können wir den Fluss von unserem Programm steuern.
Einrückungen in Python werden durch Leerzeichen oder Tabs gemacht - in anderen Programmiersprachen benutzt man dafür Klammern.
if
¶
Das if
statement bindet die Ausführung von Code-Zeilen an eine Kondition (Condition).
foo = 42
if foo > 0:
print('Foo is bigger than 0')
else:
print('Foo is less or equal 0')
Foo is bigger than 0
# multiple if statements
foo = 42
if foo > 0:
print('Foo is bigger than 0')
if foo > 30:
print('Foo is bigger than 30')
else:
print('Foo is equal or less than 30')
Foo is bigger than 0
Foo is bigger than 30
# elif matcht nur eine condition
foo = 42
if foo > 0:
print('Foo is bigger than 0')
elif foo > 30:
print('Foo is bigger than 30')
else:
print('Foo is less or equal 0')
Foo is bigger than 0
# multiple coniditions
foo = False
bar = 42
if foo is False and bar > 40:
print('We hit something')
We hit something
Aufgabe
Schreibe ein Programm was nach einer Zahl fragt und anzeigt ob diese Zahl größer als 100 ist oder nicht.
while
¶
while
führt eine Einrückung so lange aus bis wir mittels break
die Einrückung verlassen oder das Programm abstürzt.
while True:
print('Hello! :)')
break
Hello! :)
i = 0
while True:
if i >= 10:
print('10 Erreicht :)')
break
i += 1
10 Erreicht :)
i = 0
while i<10:
i += 1
print(i)
10
Aufgabe
Schreib ein Programm welches den User eine zufällige Zahl erraten lässt indem das Programm den Computer nach einer eingegebenen Zahl sagt ob
die Zahl zu niedrig ist
die Zahl zu hoch ist
die Zahl korrekt ist
Beispiel:
# zufällige zahl = 42
guessed number = 20 => print("too low")
guessed number = 50 => print("too high")
guessed number = 42 => print("you won!")
Hinweis:
import random
random.randint(0, 100) # erzeugt eine pseudo zufällige Zahl zwischen 0 und 100