Extra

Deze pagina bevat uitvoerbare code.

Potjeslatijn

In deze opgave schrijf je functies die een Nederlands woord vertalen naar potjeslatijn: een geheimtaal waarin je de beginklanken van een woord achteraan zet. Dit probleem is gebaseerd op Google Pig Latin[1]:

Google Pig Latin

De regels

De klinkers zijn a, e, i, o en u. Een woord bestaat uit kleine letters.

Het woord

Vertaling

Voorbeeld

is leeg

de lege string

"" wordt ""

begint met een klinker

het woord, met "hee" erachter

"aap" wordt "aaphee"

begint met een of meer medeklinkers

het woord zonder die medeklinkers, dan de medeklinkers, dan "ee"

"straat" wordt "aatstree"

De y is een geval apart. Staat er aan het begin een y gevolgd door een klinker, dan telt de y als medeklinker: "yoghurt" wordt "oghurtyee". Staat er aan het begin een y gevolgd door een medeklinker, dan telt de y als klinker: "ypsilon" wordt "ypsilonhee".

Wat je gaat maken

Stap

Functie

Doet

1

piglet_latin

opwarmen: de regels, met hoogstens één beginmedeklinker

2

initial_consonants

de medeklinkers waarmee een woord begint, recursief

3

pig_latin

de echte uitdaging: alle regels, ook die voor de y

Geef elke functie een docstring.

Stap 1: piglet_latin(s)

Geeft de vertaling van s in potjeslatijn, maar verplaatst alleen de éérste letter als het woord met een medeklinker begint. De y telt hier altijd als medeklinker.

Aanroep

Resultaat

piglet_latin("aap")

"aaphee"

piglet_latin("noot")

"ootnee"

piglet_latin("straat")

"traatsee"

Dat laatste is nog niet goed: bij straat horen alle drie de beginmedeklinkers achteraan. Dat komt in stap 3.

# jouw oplossing
assert piglet_latin("") == ""
assert piglet_latin("aap") == "aaphee"
assert piglet_latin("noot") == "ootnee"
assert piglet_latin("straat") == "traatsee"

Stap 2: initial_consonants(s)

Geeft een string met de medeklinkers waarmee s begint. Begint s met een klinker, of is s leeg, dan geeft de functie de lege string terug. Gebruik recursie.

Aanroep

Resultaat

initial_consonants("straat")

"str"

initial_consonants("aap")

""

Hint

Is het eerste teken een medeklinker, dan hoort het erbij, samen met de medeklinkers waarmee de rest begint. Is het een klinker, dan ben je klaar.

# jouw oplossing
assert initial_consonants("straat") == "str"
assert initial_consonants("noot") == "n"
assert initial_consonants("aap") == ""
assert initial_consonants("") == ""

Stap 3: pig_latin(s)

Geeft de vertaling van s in potjeslatijn, volgens alle regels, ook die voor de y.

Aanroep

Resultaat

pig_latin("straat")

"aatstree"

pig_latin("ypsilon")

"ypsilonhee"

pig_latin("yoghurt")

"oghurtyee"

Hint

Gebruik initial_consonants uit stap 2. Weet je de beginmedeklinkers, dan zegt hun lengte waar de rest van het woord begint. Behandel de y gevolgd door een medeklinker vóórdat je initial_consonants aanroept.

# jouw oplossing
assert pig_latin("") == ""
assert pig_latin("aap") == "aaphee"
assert pig_latin("noot") == "ootnee"
assert pig_latin("straat") == "aatstree"
assert pig_latin("ypsilon") == "ypsilonhee"
assert pig_latin("yoghurt") == "oghurtyee"

Tot slot

Als je verder over dit probleem nadenkt, zul je merken dat niet alle gevallen worden afgehandeld: de randgevallen. Wat moet pig_latin("gym") teruggeven? Je mag zelf bepalen hoe je zulke woorden vertaalt.

Eelvee uccessee!