In deze oefening gaan we dieper in op romeinse cijfers.
Het is geen gemakkelijke oefening!
Voeg nu een tweede functie toe:
- De logische functie is_romeins_cijfer controleert of de parameter een geldig Romeins cijfer voorstelt (de vier eerste voorwaarden herken je waarschijnlijk):
- Een Romeins cijfer moet uit de juiste letters opgebouwd zijn.
- De parameter mag kleine letters en hoofdletters door elkaar gebruiken.
- Voor de letters I, X, C en M geldt: je mag maximaal 3 keer dezelfde letter achter elkaar schrijven.
- De andere letters (V, L en D) mogen maar 1 keer voorkomen in een Romeins getal.
- Enkel de waarde die hoort bij de letters I, X en C kan worden afgetrokken. Dit gebeurt als de "lagere" letter (I, X en C) vóór een hogere letter staat, dan betekent dit: lagere "cijfer" aftrekken van het hogere "cijfer".
(Aftrekken mag dus alleen met I, X en C(niet met de andere letters V, L, D en M).
- Er kan slechts 1 letter afgetrokken worden, dus niet IIX voor ons cijfer 8 (correct is VIII).
- Aftrekken mag uitsluitend als de "hogere" waarde vijf of tien keer zo hoog is, dus niet IM voor 999 (correct is CMXCIX), en niet VC (95) maar XCV.
(zie ook https://www.joostdevree.nl/bouwkunde2/romeinse_cijfers.htm)
- De functie rom2dec uit vorige oefening heeft gemeenschappelijke code met deze functie. Voeg die functie toe. Voeg nu ook nog minstens één functie toe zodat je duplicated code in de twee functies vermijdt, bijvoorbeeld een functie die de waarde berekent van één letter.
Op de test/examen kan dit verplicht worden, Dodona kan dit maar beperkt controleren!
Voorbeelden
>>> rom2dec("MDXI")
1511
>>> rom2dec("MdXIv")
1514
>>> is_romeins_cijfer("MdXIv")
True
>>> is_romeins_cijfer("MdwXIv")
False
>>> is_romeins_cijfer("MIM")
False