In het periodiek systeem krijgt elk scheikundig element een symbolische naam toegekend die bestaat uit één, twee of drie letters. Als een bepaald woord kan geschreven worden als opeenvolging van die symbolische namen voor scheikundige elementen, dan zeggen we dat dit woord een chemisch woord is. Zo is bijvoorbeeld katalyse een chemisch woord. Het kan immers geschreven worden als K-At-Al-Y-Se, de opeenvolging van symbolische namen voor de elementen kalium, astaat, aluminium, yttrium en seleen. Het woord katalysator is daarentegen geen chemisch woord. Hieronder staan alvast enkele voorbeelden van chemische woorden weergegeven.
scheikundige term | chemisch woord |
---|---|
basisch | Ba-Si-Sc-H |
halogenen | H-Al-O-Ge-Ne-N |
katalyse | K-At-Al-Y-Se |
parenteraal | Pa-Re-N-Te-Ra-Al |
psychogene | P-S-Y-C-Ho-Ge-Ne |
sepsis | Se-P-Si-S |
sereus | Se-Re-U-S |
Gegeven is een tekstbestand periodiek_systeem.txt1, dat een lijst met informatie over de elementen uit het periodiek systeem bevat. Elke regel — behalve de eerste die als hoofding geldt — bevat de volgende informatie over een element: i) atoomnummer, ii) symbolische voorstelling, iii) Engelstalige naam, iv) Nederlandstalige naam, en v) atoommassa. De informatievelden worden van elkaar gescheiden door een tab. Je opdracht voor deze opgave bestaat er in om voor een geven woord te bepalen of het een chemisch woord is of niet. Hiervoor ga je als volgt te werk:
Schrijf een functie leesSymbolen waaraan de locatie van een tekstbestand moet doorgegegeven worden. De inhoud van dit tekstbestand moet opgemaakt zijn zoals het tekstbestand periodiek_systeem.txt2. De functie moet de lijst van symbolische namen teruggeven die voorkomen in de tweede kolom van het gegeven bestand3.
Schrijf een functie langstePrefix
waaraan twee parameters moeten doorgegeven worden. De eerste parameter woord is een string, en de
tweede parameter symbolen is
een lijst van strings. De functie moet de langste prefix van woord
teruggeven die ook een symbolische naam is die voorkomt in de lijst symbolen. Zo zijn de
symbolische namen B en Be beide prefixen van het woord
berg. De functie moet
echter de langste prefix teruggeven, dus gaat in dit geval de voorkeur
naar de string Be. Indien
geen enkele symbolische naam uit de lijst symbolen
een prefix is van het gegeven woord, dan moet de functie een lege string
als resultaat teruggeven. Bij het bepalen of een symbolische naam een
prefix is van het gegeven woord, moet geen rekening gehouden worden met
het verschil tussen hoofdletters en kleine letters. Behoud echter de
schrijfwijze van de symbolische namen bij het teruggeven van de prefix:
Be en niet BE
of be.
Terminologie: Een voorvoegsel bestaande uit
één of meer letters vooraan een woord noemen we een prefix
van dat woord. Zo is bijvoorbeeld chem
een prefix van het woord chemie.
Schrijf een functie chemischWoord
waaraan twee parameters moeten doorgegeven worden. De eerste parameter woord is een string, en de
tweede parameter symbolen is
een lijst van strings. Indien het woord een chemisch woord is, dan moet
de functie het woord als opeenvolging van symbolische namen voor
scheikundige elementen teruggeven. Hierbij moeten de symbolische namen
van elkaar gescheiden worden door een koppelteken (-).
Indien het woord geen chemisch woord is, dan moet de functie een lege
string teruggeven.
De te volgen procedure om te bepalen of een woord een chemisch woord is
of niet, en tegelijkertijd ook de schrijfwijze als opeenvolging van
symbolische namen te genereren, wordt in onderstaande tabel
geïllustreerd aan de hand van het woord katalyse.
Zolang het woord niet gereduceerd is tot de lege string, bepaal je de
langste prefix van het woord die ook een symbolische naam voor een
element is (uiteraard door gebruik te maken van de functie langstePrefix).
Indien er een prefix wordt gevonden die geen lege string is, dan
verwijder je deze prefix vooraan het woord en voeg je die achteraan toe
aan de opeenvolging van symbolische namen (rekening houdend met het
plaatsen van koppeltekens). Van zodra de langste prefix een lege string
oplevert, kan je besluiten dat het woord geen chemisch woord is en dus
een lege string laten teruggeven door de functie. Indien je bovenstaande
procedure echter kunt blijven herhalen tot het originele woord
gereduceerd is tot de lege string, dan mag je besluiten dat het woord
een chemisch woord is en heb je meteen ook de schrijfwijze als
opeenvolging van symbolische namen gevonden.
woord | langste prefix | chemisch woord |
---|---|---|
katalyse | K | |
atalyse | At | K |
alyse | Al | K-At |
yse | Y | K-At-Al |
se | Se | K-At-Al-Y |
K-At-Al-Y-Se |
Bij de onderstaande interactieve Python sessie gaan we ervan uit dat het tekstbestand periodiek_systeem.txt4 zich in de huidige directory bevindt.
>>> symbolen = leesSymbolen('periodiek_systeem.txt')
>>> langstePrefix('agentia', symbolen)
'Ag'
>>> langstePrefix('somatisch', symbolen)
'S'
>>> langstePrefix('dichtheid', symbolen)
''
>>> chemischWoord('katalyse', symbolen)
'K-At-Al-Y-Se'
>>> chemischWoord('basisch', symbolen)
'Ba-Si-Sc-H'
>>> chemischWoord('lesie', symbolen)
''