Bij bowling is het de bedoeling om met een bal op een baan van kunststof of hout de 10 kegels, ook wel pins genoemd, aan de andere kant van de baan om te gooien met een zogenaamde bowlingbal. De pins worden in een driehoek geplaats met 1 pin voorop, daarachter 2 dan 3 en de laatste lijn heeft 4 pins.

Spelverloop

Elke bowlingpartij bestaat uit tien beurten (frames) per speler. Men krijgt per frame 2 beurten om alle pins om te gooien. Elke pin is 1 punt waard, maar er zijn bonuspunten te verdienen als je een strike of een spare haalt.

Als bij de eerste worp alle pins om worden gegooid heeft die speler een strike gegooid en stopt de beurt direct.

Als alle pins in 2 worpen omvallen heeft men een spare gegooid. Ook als bij de eerste worp 0 pins omvallen en pas bij de tweede worp in één keer 10 pins, is het nog steeds een spare en geen strike.

Als een speler in twee worpen niet alle 10 de pins omkrijgt spreek je van een open frame.

Puntentelling

Als je een strike gooit, dan heb je 10 punten verdiend van de 10 pins die je omvert gegooid hebt en krijgt je nog eens 10 punten extra. Je krijgt dus in totaal 20 punten omdat je alle pins in één keer hebt omgegooit.

Als je een spare gooit, dan heb je ook 10 punten gehaald, en dan krijg je nog eens 5 punten extra. Je krijgt dus in totaal 15 punten omdat je alle pins in twee pogingen hebt omgegooit.

Gooi je een open frame (dus niet alles om na twee beurten, dan heb je alleen de punten gescoord van het aantal pins dat je hebt omgegooid. Dit is dan dus altijd minder dan 10. En je krijgt geen bonuspunten.

Opdracht

  1. Schrijf een functie `puntenspel` waaraan 1 parameter wordt doorgegeven:
    • een string met 20 getallen gescheiden een spatie.

    De 20 getallen komen overeen met de omvergeworpen pins van 10 frames want we werpen 2 keer per frame.

    Bereken het totaal van de 10 frames zonder rekening te houden met strikes of spares.
    Return een lijst met het totaal per frame en als laatste element het totaal van alle frames.
    Voorbeeld lijst:

    [<punten frame 1>, <punten frame 2>, … , <punten frame 10>, <totaal aantal punten>]
    Op de plaatsen van de <...> zet je telkens het overeenkomstig getal.

  2. Schrijf een nieuwe functie `puntenframes` waaraan 1 parameter wordt doorgegeven:
    • een string met een even aantal getallen gescheiden door een spatie, dus het aantal frames kan variëren.

    Bereken het totaal van het aantal frames en houdt rekening met strikes en spares.
    Een strike levert 20 punten op en een spare 15 punten.
    Gooide je een strike in een frame dan is het 2de getal van dat frame 0.
    Return de volgende zin:

    “Je hebt 10 frames gespeeld met volgend resultaat: <punten frame 1> + <punten frame 2> + … + <punten frame 10> = <totaal aantal punten>”
    Op de plaatsen van de <...> zet je telkens het overeenkomstig getal.

Voorbeeld

>>> puntenspel("3 5 6 4 3 0 6 1 7 2 8 2 10 0 9 0 0 3 0 10")
[8, 10, 3, 7, 9, 10, 10, 9, 3, 10, 79]

>>> puntenspel("2 4 0 10 7 0 10 0 2 3 8 1 7 3 9 1 5 5 4 4")
[6, 10,7, 10, 5, 9, 10, 10, 10, 8, 85]


>>> puntenframes("4 6 0 10 4 3 10 0")
"Je hebt 4 frames gespeeld met volgend resultaat: 15 + 20 + 7 + 20 = 62"

>>> puntenframes("9 1 5 3 8 0 0 5 10 0 6 4 0 0")
"Je hebt 7 frames gespeeld met volgend resultaat: 15 + 8 + 8 + 5 + 20 + 15 + 0 = 71"