In deze oefening werken we met een transcript uit een aflevering van The Simpsons. Het stuk speelt zich af in Moe's Tavern, een bar in het stadje Springfield.

Elke tekstregel begint met de persoon die aan het woord is, gevolgd door een dubbelpunt en spatie en vervolgens komt de tekstregel. Een tekstregel eindigt met één regeleinde (\n).

moving average
Transcript Simpsons

Databestanden

Het transcript is opgedeeld in verschillende scenes. Elke scene is een bestand moes_tavern_part_x.txt (waarin x het nummer van de scene is, genummerd van 1 tot 24).

De bestanden zijn geëncodeerd via utf-8 encoding. Je kan ze openen via volgende instructie:
f = open('moes_tavern_part_x.txt', 'r', encoding='utf-8')

De bestanden zijn beschikbaar in het working directory van Dodona. Als je de oefening echter lokaal wilt maken (in PyCharm of in een Jupyter Notebook), dan moet je de bestanden downloaden en bewaren in dezelfde map als je .py of .ipynb bestand.

Je kan de bestanden van de eerste 5 scenes hier downloaden (het bestand part 0 is geen afzonderlijke scene, maar een korter bestand om de voorbeeldjes overzichtelijk te houden):

Opgave

  1. Schrijf een functie inlezen met één argument: het nummer van de scene (int). De functie leest het transcript van die scene in en retourneert een geneste lijst. Elk item van de hoofdlijst is opnieuw een lijst met twee elementen (strings): naam van het personage en de tekstregel. Lege lijnen in het transcript worden genegeerd.
  2. Schrijf een functie rolverdeling met één argument: het nummer van de scene (int). De functie leest het transcript van die scene in en retourneert een lijst van tuples. Elk tuple heeft twee elementen: de naam van het personage (string) en het aantal tekstregels van dit personage (int). De personages komen "in order of appearance".
  3. Schrijf een functie hoofdrol met één argument: het nummer van de scene (int). De functie leest het transcript van deze scene in en retourneert de naam van het personage met de meeste tekstregels. Je mag ervan uitgaan dat dit steeds één personage is, dus geen twee met hetzelfde aantal tekstregels.

Voorbeelden

>>> inlezen(0)
[['Homer_Simpson', 'Oh, no. I went to this bar the other night, and they...'],
    ['Moe_Szyslak', 'Wha...wha... Wait a minute. You went to another bar?'],
    ['Homer_Simpson', 'Hey Moe, you got any Fudd?'],
    ['Moe_Szyslak',
     'Fudd? I thought they took that off the market after all those hillbillies went blind.'],
    ['Homer_Simpson', 'Moe, I was a hundred miles outta town.']]
>>> rolverdeling(0)
[('Homer_Simpson', 3), ('Moe_Szyslak', 2)]
>>> hoofdrol(0)
'Homer_Simpson'