Grafschrift van John Laird McCaffery (1940-1995), die in Montreal (Canada) begraven ligt in het Mount Royal Cemetery:
De tekst werd gezamelijk opgesteld door zijn ex-vrouw en zijn minares. Lees de eerste letter van elke regel…
Een gedicht waarvan bepaalde — meestal de eerste — letters van iedere regel of strofe achter elkaar gelezen zelf ook een woord of zin vormen, wordt een acrostichon (ook: naamdicht of lettervers) genoemd. Gevraagd wordt:
Schrijf een functie selectie waaraan twee argumenten moeten doorgegeven worden: een string die een versregel van een gedicht bevat en een reeks getallen $$n_1, n_2, \ldots, n_m$$ als een lijst of een tuple, waarbij geldt dat $$n_i \in \mathbb{N}_0$$ ($$i = 1, 2, \ldots, m$$). De functie moet de string teruggeven die gevormd wordt door de karakters $$k_1k_2\ldots k_m$$. Hierbij stelt $$k_i$$ ($$i = 1, 2, \ldots, m$$) het karakter voor op positie $$n_i$$ in de gegeven versregel. Bij het bepalen van de positie van een karakter in de versregel wordt witruimte (spaties, tabs en regeleindes) genegeerd, en staat het eerste karakter dat geen witruimte is op positie 1. Indien de gegeven versregel minder dan $$n_i$$ (niet-witruimte) karakters bevat, dan wordt $$k_i$$ genegeerd.
Gebruik de functie selectie om een functie acrostichon te schrijven waaraan een bestandsnaam moet doorgegeven worden. Deze bestandsnaam verwijst naar een tekstbestand dat de versregels van een gedicht bevat. De functie heeft ook nog een tweede optionele parameter posities waaraan een reeks getallen $$n_1, n_2, \ldots, n_m$$ kan doorgegeven worden als een lijst of een tuple, waarbij geldt dat $$n_i \in \mathbb{N}_0$$ ($$i = 1, 2, \ldots, m$$). Indien deze reeks uit slechts één getal $$n_1$$ bestaat, dan mag de waarde $$n_1$$ ook als integer doorgegeven worden aan de parameter posities. De standaardwaarde van de parameter posities is 1. De functie moet de string teruggeven die gevormd wordt door van elke versregel van het gedicht de karakters op de aangegeven posities te selecteren (cf. functie selectie) en al deze karakters achter elkaar te zetten.
Om na te gaan of een gegeven object een bepaald gegevenstype heeft, kan je natuurlijk gebruikmaken van de ingebouwde functie type(o) die het gegevenstype van het object o teruggeeft. Het is echter beter om hiervoor de ingebouwde functie isinstance(o, t) te gebruiken. Deze functie geeft een Booleaanse waarde terug die aangeeft of het object o al dan niet behoort tot het type t.
>>> type(3) == int
True
>>> isinstance(3.14, int)
False
>>> isinstance(3.14, float)
True
>>> isinstance([1, 2, 3], list)
True
Bij onderstaande voorbeeldsessie gaan we ervan uit dat de tekstbestanden in_memoriam.txt1 en maude.txt2 zich in de huidige directory bevinden.
>>> selectie('Free your body', [1])
'F'
>>> selectie('Unfold your powerful wings', [5, 12])
'lo'
>>> selectie('Climb up the highest mountains', [15, 6, 11])
'euh'
>>> selectie('Kick your feet up in the air', [500, 250, 10, 2])
'ei'
>>> acrostichon('in_memoriam.txt')
'FUCKYOU'
>>> acrostichon('in_memoriam.txt', 1)
'FUCKYOU'
>>> acrostichon('in_memoriam.txt', posities=23)
'say'
>>> acrostichon('in_memoriam.txt', posities=[4, 7, 12])
'euyoyompikutmnverheye'
>>> acrostichon('maude.txt', posities=[1, 2])
'PeCuLiArAcRoStIc'