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]:

Google Pig Latin

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' terug

  • Als 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!