Automatisierte Texte#
Wir automatisieren Texte und lernen dabei:
- mit strings und ihren Methoden umzugehen 
- Vergleichsoperatoren und deren Verknüpfung 
- neue Kontrollstrukturen, wie die if-else Bedingungen, kennen 
Automatisierte Wahlberichterstattung#
- Ergebnisse der Landtagswahlen für jeden Wahlkreis und jede Gemeinde in NRW 
- über 500 Artikel in unterschiedlichen Zuständen (Vorbericht, vorläufiges Ergebnis, amtliches Endergebnis) 
- redaktionell ist dies am Wahlabend nicht umsetzbar 

Los geht’s…#
titel = 'Wahlen in Leipzig'
print(titel)
# mit veränderbarem Stadtnamen
stadt = 'Görlitz'
titel = f'Wahlen in {stadt}'
print(titel)
stadt = 'Görlitz'
titel = f'Wahlen in {stadt}'
teaser = f'In {stadt} wurde heute gewählt. ...'
print(titel, teaser, sep='\n\n')
Wie können wir den Titel in Großbuchstaben ausgeben?
stadt = 'Görlitz'
titel = f'WAHLEN IN {stadt}'
teaser = f'In {stadt} wurde heute gewählt. ...'
print(titel, teaser, sep='\n\n')
stadt = 'Görlitz'
titel = f'Wahlen in {stadt}'
teaser = f'In {stadt} wurde heute gewählt. ...'
print(titel.upper(), teaser, sep='\n\n')
Was wenn mehrere Kandidat:innen antreten?#
kandidatin1 = 'Helmut Wiese'
prozent1 = 23.8
kandidatin2 = 'Gundula Lobrecht'
prozent2 = 17.4
text = '{} gewinnt mit {} Prozent der Stimmen.'
if prozent1 > prozent2:
    text = text.format(kandidatin1, prozent1)
else:
    text = text.format(kandidatin2, prozent2)
    
print(text)
Was passiert bei Gleichstand?#
kandidat1 = 'Helmut Wiese'
prozent1 = 29.5
kandidat2 = 'Gundula Lobrecht'
prozent2 = 29.5
text = '{} gewinnt mit {} Prozent der Stimmen.'
if prozent1 > prozent2:
    text = text.format(kandidat1, prozent1)
else:
    text = text.format(kandidat2, prozent2)
    
print(text)
kandidat1 = 'Helmut Wiese'
prozent1 = 29.5
kandidat2 = 'Gundula Lobrecht'
prozent2 = 29.5
text = '{} gewinnt mit {} Prozent der Stimmen.'
if prozent1 > prozent2:
    text = text.format(kandidat1, prozent1)
elif prozent1 < prozent2:
    text = text.format(kandidat2, prozent2)
else:
    text = 'Die Wahl ist unentschieden. {} und {} erhalten beide {} Prozent der Stimmen.'
    text = text.format(kandidat1, kandidat2, prozent1)
    
print(text)
stadt = 'Görlitz'
titel = 'Wahlen in {}'.format(stadt)
kandidat1 = 'Helmut Wiese'
prozent1 = 9.25
kandidat2 = 'Gundula Lobrecht'
prozent2 = 41.5
text = '{} gewinnt mit {} Prozent der Stimmen.'
if prozent1 > prozent2:
    text = text.format(kandidat1, prozent1)
elif prozent1 < prozent2:
    text = text.format(kandidat2, prozent2)
else:
    text = 'Die Wahl ist unentschieden. {} und {} erhalten beide {} Prozent der Stimmen.'
    text = text.format(kandidat1, kandidat2, prozent1)
    
print(titel.upper(), text, sep='\n\n')
Ein bisschen mehr Kontext…#
Wie groß ist der Vorsprung der führenden Kandidatin oder des führenden Kandidaten?
stadt = 'Görlitz'
titel = 'Wahlen in {}'.format(stadt)
kandidat1 = 'Helmut Wiese'
prozent1 = 59.5
kandidat2 = 'Gundula Lobrecht'
prozent2 = 49.5
text_gewinner = '{} gewinnt mit {} Prozent der Stimmen.'
text_vorsprung = 'Dies entspricht einem Vorsprung von {} Prozentpunkten zu {}.'
if prozent1 > prozent2:
    vorsprung = prozent1 - prozent2
    text_vorsprung = text_vorsprung.format(vorsprung, kandidat2)
    text_gewinner = text_gewinner.format(kandidat1, prozent1)   
elif prozent1 < prozent2:
    vorsprung = prozent2 - prozent1
    text_vorsprung = text_vorsprung.format(vorsprung, kandidat1)
    text_gewinner = text.format(kandidat2, prozent2)   
else:
    text_vorsprung = 'Die Wahl ist unentschieden. {} und {} erhalten beide {} Prozent der Stimmen.'
    text_gewinner = text.format(kandidat1, kandidat2, prozent1)
    
print(titel.upper(), text_gewinner + ' ' + text_vorsprung, sep='\n\n')
Neu strukturiert…#
stadt = 'Görlitz'
titel = 'Wahlen in {}'.format(stadt)
kandidat1 = 'Helmut Wiese'
prozent1 = 29.8
kandidat2 = 'Gundula Lobrecht'
prozent2 = 32.7
if prozent1 == prozent2:
    text = 'Die Wahl ist unentschieden. {} und {} erhalten beide {} Prozent der Stimmen.'
    text = text.format(kandidat1, kandidat2, prozent1)
else:
    text_gewinner = '{} gewinnt mit {} Prozent der Stimmen.'
    text_vorsprung = ' Dies entspricht einem Vorsprung von {} Prozentpunkten.' 
    gewinner = kandidat1
    gewinner_prozent = prozent1
    vorsprung = round(prozent1 - prozent2, 1)
    
    if prozent2 > prozent1:
        gewinner = kandidat2
        gewinner_prozent = prozent2
        vorsprung = round(prozent2 - prozent1, 1)
    text_gewinner = text_gewinner.format(gewinner, gewinner_prozent)
    text_vorsprung = text_vorsprung.format(vorsprung)
    text = text_gewinner + text_vorsprung
        
print(titel.upper(), text, sep='\n\n')
Ein bisschen mehr Kontext#
Wie kann der Vorsprung von dem:der Erstplatzierten zu dem:der Zweitplatzierten bewertet werden?
Ist er minimal, knapp oder erheblich?
# Und noch ein bisschen Kontext
stadt = 'Görlitz'
titel = 'Wahlen in {}'.format(stadt)
kandidat1 = 'Helmut Wiese'
prozent1 = 29.5
kandidat2 = 'Gundula Lobrecht'
prozent2 = 28.7
if prozent1 == prozent2:
    text = 'Die Wahl ist unentschieden. {} und {} erhalten beide {} Prozent der Stimmen.'
    text = text.format(kandidat1, kandidat2, prozent1)
else:
    text = '{} gewinnt mit {} Prozent der Stimmen.'
    vorsprung = ' Dies ist ein {} Vorsprung von {} Prozentpunkten.'
    gewinner = kandidat1
    prozent = prozent1
    differenz = prozent1 - prozent2
    
    if prozent2 > prozent1:
        gewinner = kandidat2
        prozent = prozent2
        differenz = prozent2 - prozent1
        
    text = text.format(gewinner, prozent)
    
    # bestimme das Ausmaß des Abstands zwischen Gewinner:in und Zweitplatzierter:m
    differenz = round(differenz, 1)
    
    if differenz >= 0 and differenz <= 1:
        ausmass = 'minimaler'
    elif differenz > 1 and differenz < 3:
        ausmass = 'knapper'
    elif differenz >= 3 and differenz < 5:
        ausmass = ''
    elif differenz >= 5:
        ausmass = 'erheblicher'
    vorsprung = vorsprung.format(ausmass, differenz)
    
article = text + vorsprung   
print(titel, article, sep='\n\n')
Wahlen in Görlitz
Helmut Wiese gewinnt mit 29.5 Prozent der Stimmen. Dies ist ein minimaler Vorsprung von 0.8 Prozentpunkten.
Ein bisschen mehr Kontext..#
Ein Satz zum:zur neuen Amtsinhaber:in der Stadt
# Und noch ein bisschen Kontext
stadt = 'Görlitz'
titel = 'Wahlen in {}'.format(stadt)
kandidat1 = 'Helmut Wiese'
prozent1 = 29.5
kandidat2 = 'Gundula Lobrecht'
prozent2 = 28.7
if prozent1 == prozent2:
    text = 'Die Wahl ist unentschieden. {} und {} erhalten beide {} Prozent der Stimmen.'
    text = text.format(kandidat1, kandidat2, prozent1)
else:
    text = '{} gewinnt mit {} Prozent der Stimmen.'
    vorsprung = ' Dies ist ein {} Vorsprung von {} Prozentpunkten.'
    gewinner = kandidat1
    prozent = prozent1
    differenz = prozent1 - prozent2
    
    if prozent2 > prozent1:
        gewinner = kandidat2
        prozent = prozent2
        differenz = prozent2 - prozent1
        
    text = text.format(gewinner, prozent)
    
    # bestimme das Ausmaß des Abstands zwischen Gewinner:in und Zweitplatzierter:m
    differenz = round(differenz, 1)
    
    if differenz >= 0 and differenz <= 1:
        ausmass = 'minimaler'
    elif differenz > 1 and differenz < 3:
        ausmass = 'knapper'
    elif differenz >= 3 and differenz < 5:
        ausmass = ''
    elif differenz >= 5:
        ausmass = 'erheblicher'
    vorsprung = vorsprung.format(ausmass, differenz)
    
    amtsinhaber = ' {} wird neuer Bürgermeister von {}.'
    amtsinhaber = amtsinhaber.format(gewinner, stadt)
    
article = text + vorsprung + amtsinhaber    
print(titel, article, sep='\n\n')
# Und noch korrekt gegendert
stadt = 'Görlitz'
titel = 'Wahlen in {}'.format(stadt)
kandidat1 = 'Helmut Wiese'
prozent1 = 29.5
kandidat2 = 'Gundula Lobrecht'
prozent2 = 38.7
if prozent1 == prozent2:
    text = 'Die Wahl ist unentschieden. {} und {} erhalten beide {} Prozent der Stimmen.'
    text = text.format(kandidat1, kandidat2, prozent1)
else:
    text = '{} gewinnt mit {} Prozent der Stimmen.'
    vorsprung = ' Dies ist ein {} Vorsprung von {} Prozentpunkten.'
    gewinner = kandidat1
    prozent = prozent1
    differenz = prozent1 - prozent2
    
    if prozent2 > prozent1:
        gewinner = kandidat2
        prozent = prozent2
        differenz = prozent2 - prozent1
        
    text = text.format(gewinner, prozent)
    
    # bestimme das Ausmaß des Abstands zwischen Gewinner:in und Zweitplatzierter:m
    differenz = round(differenz, 1)
    
    if differenz >= 0 and differenz <= 1:
        ausmass = 'minimaler'
    elif differenz > 1 and differenz < 3:
        ausmass = 'knapper'
    elif differenz >= 3 and differenz < 5:
        ausmass = ''
    elif differenz >= 5:
        ausmass = 'erheblicher'
    vorsprung = vorsprung.format(ausmass, differenz)
    
    amtsinhaber = ' {} wird neuer Bürgermeister von {}.'
    amtsinhaber = amtsinhaber.format(gewinner, stadt)
    if gewinner == kandidat2:
        amtsinhaber = amtsinhaber.replace('neuer Bürgermeister', 'neue Bürgermeisterin')
    
article = text + vorsprung + amtsinhaber    
print(titel, article, sep='\n\n')
Automatisierte Wahlberichterstattung mit Funktionen#
Funktionen helfen uns den Code übersichtlich zu halten und wiederkehrende Aufgaben effizient zu lösen.
# Erhalte Gewinner basierend auf den Prozent
def get_gewinner(kandidat1, prozent1, kandidat2, prozent2):
    if prozent1 > prozent2:
        return kandidat1, prozent1
    return kandidat2, prozent2
# Berechne die Differenz zweier Zahlen
def berechne_differenz(num1, num2):
    return round(abs(num1 - num2), 1)
# Bewerte den Vorsprung in Prozentpunkten
def get_ausmass(differenz):
    if differenz >= 0 and differenz <= 1:
        ausmass = 'minimaler'
    elif differenz > 1 and differenz < 3:
        ausmass = 'knapper'
    elif differenz >= 3 and differenz < 5:
        ausmass = ''
    elif differenz >= 5:
        ausmass = 'erheblicher'
    return ausmass
    
# Passe den Text dem Geschlecht an    
def gender(text):
    return text.replace('neuer Bürgermeister', 'neue Bürgermeisterin')
# Wahldaten
stadt = 'Görlitz'
titel = 'Wahlen in {}'.format(stadt)
kandidat1 = 'Helmut Wiese'
prozent1 = 32.5
kandidat2 = 'Gundula Lobrecht'
prozent2 = 29.5
# SKript
if prozent1 == prozent2:
    # Gleichstand
    text = 'Die Wahl ist unentschieden. {} und {} erhalten beide {} Prozent der Stimmen.'
    text = text.format(kandidat1, kandidat2, prozent1)
else:
    # Gewinner Text
    text = '{} gewinnt mit {} Prozent der Stimmen.'
    gewinner, prozent = get_gewinner(kandidat1, prozent1, kandidat2, prozent2)        
    text = text.format(gewinner, prozent)
    
    # Vorsprung Text
    vorsprung = ' Dies ist ein {} Vorsprung von {} Prozentpunkten.'
    differenz = berechne_differenz(prozent1, prozent2)
    ausmass = get_ausmass(differenz)
    vorsprung = vorsprung.format(ausmass, differenz)
    
    # Amtsinhaber:in Text
    amtsinhaber = ' {} wird neuer Bürgermeister von {}.'
    amtsinhaber = amtsinhaber.format(gewinner, stadt)
    if gewinner == kandidat2:
        amtsinhaber = gender(amtsinhaber)
    text = text + vorsprung + amtsinhaber 
    
print(titel.upper(), text, sep='\n\n')
WAHLEN IN GÖRLITZ
Helmut Wiese gewinnt mit 32.5 Prozent der Stimmen. Dies ist ein  Vorsprung von 3.0 Prozentpunkten. Helmut Wiese wird neuer Bürgermeister von Görlitz.
 
    
  
  
