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