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)
Wahlen in Leipzig
# mit veränderbarem Stadtnamen
stadt = 'Görlitz'
titel = f'Wahlen in {stadt}'
print(titel)
Wahlen in Görlitz
stadt = 'Görlitz'
titel = f'Wahlen in {stadt}'
teaser = f'In {stadt} wurde heute gewählt. ...'
print(titel, teaser, sep='\n\n')
Wahlen in Görlitz
In Görlitz wurde heute gewählt. ...
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')
WAHLEN IN Görlitz
In Görlitz wurde heute gewählt. ...
stadt = 'Görlitz'
titel = f'Wahlen in {stadt}'
teaser = f'In {stadt} wurde heute gewählt. ...'
print(titel.upper(), teaser, sep='\n\n')
WAHLEN IN GÖRLITZ
In Görlitz wurde heute gewählt. ...
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)
Helmut Wiese gewinnt mit 23.8 Prozent der Stimmen.
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)
Gundula Lobrecht gewinnt mit 29.5 Prozent der Stimmen.
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)
Die Wahl ist unentschieden. Helmut Wiese und Gundula Lobrecht erhalten beide 29.5 Prozent der Stimmen.
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')
WAHLEN IN GÖRLITZ
Gundula Lobrecht gewinnt mit 41.5 Prozent der Stimmen.
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')
WAHLEN IN GÖRLITZ
Helmut Wiese gewinnt mit 59.5 Prozent der Stimmen. Dies entspricht einem Vorsprung von 10.0 Prozentpunkten zu Gundula Lobrecht.
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')
WAHLEN IN GÖRLITZ
Gundula Lobrecht gewinnt mit 32.7 Prozent der Stimmen. Dies entspricht einem Vorsprung von 2.9 Prozentpunkten.
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')
Wahlen in Görlitz
Helmut Wiese gewinnt mit 29.5 Prozent der Stimmen. Dies ist ein minimaler Vorsprung von 0.8 Prozentpunkten. Helmut Wiese wird neuer Bürgermeister von Görlitz.
# 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')
Wahlen in Görlitz
Gundula Lobrecht gewinnt mit 38.7 Prozent der Stimmen. Dies ist ein erheblicher Vorsprung von 9.2 Prozentpunkten. Gundula Lobrecht wird neue Bürgermeisterin von Görlitz.
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.