Woche 06#

Exkurs: Regex#

super Website: https://regex101.com/

Wie geht das in Python? z.B. re.split(), https://docs.python.org/3/library/re.html#re.split

import re
#  !pip install regex
Nachricht = """Hallo, wir treffen uns nicht erst um 13.10 Uhr, sondern schon um  um 10:15 Uhr in der Caeteria!
mfg JB"""
Nachricht.split("Uhr")
['Hallo, wir treffen uns nicht erst um 13.10 ',
 ', sondern schon um  um 10:15 ',
 ' in der Caeteria!\nmfg JB']
re.split( r"(\d\d.\d\d) Uhr", Nachricht )
['Hallo, wir treffen uns nicht erst um ',
 '13.10',
 ', sondern schon um  um ',
 '10:15',
 ' in der Caeteria!\nmfg JB']

Rekursion#

def fak(x):
    if x < 0:
        print(f"Error: fak({x}) undefiniert, weil x < 0")
        return False
    elif x == 0:
        return 1
    else:
        return x * fak(x-1)
fak(-10)
Error: fak(-10) undefiniert, weil x < 0
False
baum = [ 1, [2, 3, [4,5,5], 7], 8 ]
baum
[1, [2, 3, [4, 5, 5], 7], 8]
baum = [ 1, 2, 3 ]
summe = 0

for x in baum:
    summe = summe + x

summe
6
def summe( x ):
    zwischensumme = 0
    for i in x:
        if isinstance( i, int):
            zwischensumme = zwischensumme + i 
        elif isinstance( i, list):
            zwischensumme = zwischensumme + summe( i )
        else:
            print( f"ERROR: Kann nichts anfangen mit {type(i)=}")

    return zwischensumme
summe( [ 1, [ 2, 3]] )
6
x = 3
type(x)
int
x = [ 3, 4 ]
type(x)
list
isinstance( x, list)
True
isinstance(x, int)
False

Intro: Fakultät#

Def: https://de.wikipedia.org/wiki/Fakultät_(Mathematik)

insbesondere fak(0) == 1

Mikroaufgabe: Fakultät in einer Schleife berechnen … Übung!

def fak(n):
    if n == 0 or n == 1: ## Laut Def Ergebis = 1
        return 1
    else:
        return n * fak(n-1)
fak(4)
24

Wert einer Liste#

l = [ 1, 3, "Hallo", 20 ]
wert = 0

for x in l:
    if isinstance(x, (int, float)):
        wert = wert + x
    elif isinstance(x, str):
        wert = wert + len(x)
    else:
        print( f"unbekannter Wert-Typ (x), {type(x)} ")
wert
29
def wel(l):  # wert einer liste

    wert = 0
    for x in l:
        if isinstance(x, (int, float)):
            wert = wert + x
        elif isinstance(x, str):
            wert = wert + len(x)
        elif isinstance(x, list):
            # Rekursion!
            wert = wert + wel( x )
        else:
            print( f"unbekannter Wert-Typ {x}, {type(x)} ")
    return wert
wel(l)
29
l2 = [ 1, 2, "Hallo", [10,11], 100 ]
wel( l2 )
129

ausführlich: https://www.jbusse.de/jvdp-jb/e_r1c.html

Vorübung: isinstance()

x = 3.14159
isinstance(x, int)
False
isinstance(x, (int, float))
True
isinstance(x, str)
False

CSV einlesen#

mit pandas:

import pandas as pd
df = pd.read_csv('geburtstage.csv') 
df.head()
FamName Vornamen Jahr Monat Tag Stundensatz
0 Musterfrau Erika 2001 5 29 400.99
1 Knuth Donald 1919 1 10 12.31
df.to_dict(orient='dict') # default
{'FamName': {0: 'Musterfrau', 1: 'Knuth'},
 'Vornamen': {0: 'Erika', 1: 'Donald'},
 'Jahr': {0: 2001, 1: 1919},
 'Monat': {0: 5, 1: 1},
 'Tag': {0: 29, 1: 10},
 'Stundensatz': {0: 400.99, 1: 12.31}}
df.to_dict(orient='list')
{'FamName': ['Musterfrau', 'Knuth'],
 'Vornamen': ['Erika', 'Donald'],
 'Jahr': [2001, 1919],
 'Monat': [5, 1],
 'Tag': [29, 10],
 'Stundensatz': [400.99, 12.31]}
df.to_dict(orient='index')
{0: {'FamName': 'Musterfrau',
  'Vornamen': 'Erika',
  'Jahr': 2001,
  'Monat': 5,
  'Tag': 29,
  'Stundensatz': 400.99},
 1: {'FamName': 'Knuth',
  'Vornamen': 'Donald',
  'Jahr': 1919,
  'Monat': 1,
  'Tag': 10,
  'Stundensatz': 12.31}}