Extra#
Potjeslatijn#
In deze opgave ga je twee functies schrijven die een vertaling kunnen maken van Nederlands naar potjeslatijn. Dit probleem is gebaseerd op Google Pig Latin[1]:
Zorg ervoor dat je de functies de juiste namen geeft en zorgvuldig test. Neem in elke functie een docstring op, die moet aangeven wat de functie berekent (teruggeeft) en wat de argumenten zijn en wat ze betekenen.
Opwarmen#
Schrijf de functie piglet_latin(s)
die een string s
als argument accepteert. s
is een enkel woord dat bestaat uit kleine letters.
piglet_latin
moet dan de vertaling van s
in potjes-Latijn teruggeven volgens de volgende drie regels:
Als het argument helemaal geen letters heeft (de lege string) moet de functie een lege string teruggeven
Als het argument begint met een klinker wordt in Pig Latin gewoon de string
'hee'
toegevoegd aan het eind. De'y'
telt in ons geval als medeklinker en niet als klinker.Voorbeeld:
piglet_latin('aap')
geeft'aaphee'
terugAls het argument begint met een medeklinker, is het resultaat van potjes-Latijn identiek aan het argument, behalve dat de oorspronkelijke medeklinker van het argument aan het eind van het woord staat in plaats van aan het begin en het wordt gevolgd door de string
'ee'
.Voorbeeld:
piglet_latin('noot')
geeft'ootnee'
terug
Vergeet niet om tests te schrijven met assert
! Dit is nog niet de complete versie van potjes-Latijn, omdat woorden die beginnen met meerdere medeklinkers nog niet goed verwerkt worden, Zo geeft piglet_latin('straat')
bijvoorbeeld 'traatsee'
terug.
De echte uitdaging#
Schrijf een functie pig_latin(s)
die de bovenstaande regels volgt en ook meer dan één eerste medeklinker correct behandelt in de vertaling naar potjes-Latijn. Dat wil zeggen dat pig_latin
alle eerste medeklinkers naar het einde van het woord verplaatst alvorens 'ee'
toe te voegen. (Het kan handig zijn om hier een hulpfunctie voor te gebruiken, zie de hint hieronder).
Ook moet pig_latin
een eerste 'y'
als medeklinker of als klinker behandelen, afhankelijk van de vraag of de y
gevolgd wordt door een klinker, respectievelijk een medeklinker. Bijvoorbeeld, 'yoghurt'
heeft een initiële y
die als medeklinker fungeert. Het woord 'ypsilon'
heeft echter een y
in het begin die als klinker telt. Hier zijn enkele aanvullende voorbeelden:
In [1]: pig_latin('straat')
Out[1]: 'aatstree'
In [2]: pig_latin('ypsilon')
Out[2]: 'ypsilonhee'
In [3]: pig_latin('yoghurt')
Out[3]: 'oghurtyee'
Tests? Die mag je zelf schrijven!
Hoe recursie te gebruiken
Eén manier om recursie te gebruiken bij het uitwerken van deze functie is om een hulpfunctie
def initial_consonants(s):
...
te schrijven die een string teruggeeft met alle medeklinkers aan het begin van de string s
. Als s
dus start met een klinker moet de lege string ''
worden teruggegeven.
Als je verder over dit probleem gaat nadenken zul je merken dat niet alle mogelijke gevallen worden afgehandeld (de zogenaamde edge cases, of randgevallen). Je mag zelf bepalen hoe je deze situaties uitwerkt, ze zullen in ieder geval niet door ons worden getest …
Eelvee uccessee!