Onze genetische code wordt bewaard in het DNA. Een DNA-molecule bestaat uit twee ketens die als een dubbele helix met elkaar vervlochten zijn. Sterk vereenvoudigd komt het er op neer dat een DNA-molecule bestaat uit een opeenvolging van vier stikstofbasen: adenine (A), guanine (G), thymine (T) of cytosine (C). De volgorde van deze basen in het DNA vormt een code waarmee het lichaam eiwitten kan maken.
Een stuk DNA dat voor een bepaalde eigenschap codeert, noemen we een gen. Meestal gaat bestaat een gen uit een opeenvolging van duizenden stikstofbasen. Van een aantal ziektes en aandoeningen weten we precies welk gen daarvoor verantwoordelijk is. Het is dus mogelijk om het DNA van een patiënt uit te lezen en na te gaan of een bepaald gen al dan niet voorkomt. Precies dat is wat we in deze opgave gaan doen.
Schrijf een functie DNA(lijst1, lijst2)
. lijst1
is een opeenvolging van de strings 'A'
, 'C'
, 'G'
en 'T'
. lijst1
staat symbool voor het uitgelezen DNA. Ook lijst2
is een opeenvolging van de strings 'A'
, 'C'
, 'G'
en 'T'
. Deze lijst staat symbool voor een bepaald gen.
Als de precieze opeenvolging van lijst2
voorkomt in lijst1
, is de patiënt erfelijk belast met dit gen. Je programma geeft dan een tuple (True, begin)
terug, waarbij begin
de index is vanaf waar het gen (lijst2
) voorkomt in het DNA (lijst1
). Als de precieze opeenvolging van lijst2
niet voorkomt in lijst1
, geeft je functie False
terug.
Invoer:
> DNA(['C', 'A', 'C', 'T', 'T', 'C', 'A', 'A'], ['A', 'C'])
Uitvoer:
(True, 1)
Invoer:
> DNA(['G', 'T', 'C', 'T', 'C', 'T', 'T', 'C', 'G', 'T', 'C', 'T', 'A'], ['A', 'C', 'A', 'T', 'C'])
Uitvoer:
False