Krysning og arv – programmering i Python
Når nye individ blir til, blir dei danna ved hjelp av informasjonen som finst i arvestoffet. Ein del planter kan formeire seg ukjønna og føre heile arvestoffet sitt direkte til neste generasjon. Avkomma ("barna") blir då heilt like denne eine forelderen.
Dei fleste dyr og planter bruker kjønna formeiring. Då blir eit tilfeldig utval av gen frå mor blanda med eit tilfeldig utval av gen frå far. På den måten blir ikkje barna heilt like verken mor eller far, men ei blanding av dei. Fordelen med kjønna formeiring er at det vil vere ein mykje større genetisk variasjon enn ved ukjønna formeiring (kloning/vegetativ formeiring/einkjønna formeiring).
Genetisk variasjon er viktig for at ein art skal overleve. Då er det større sjanse for at nokre av individa vil ha eigenskapar som gjer at dei toler og kan overleve ei utfordring som arten blir utsett for (sjukdom, miljøendring, konkurranse mot andre artar osb.).
Når vi no skal lage nokre program for å illustrere korleis kjønna formeiring fungerer, må ei hugse på følgjande:
- Dominerande gen bestemmer eigenskapen (fenotypen) til avkommet.
- Avkommet får alltid like mykje arvestoff frå begge foreldra. Når eit barn liknar mest på den eine forelderen, kjem det berre av at gen frå den eine forelderen er dominante for trekk som er tydelege i utsjånad.
- Avkommet arvar gen for ALLE eigenskapar både frå far og mor (med eit lite unntak på kjønns-kromosoma). Om det er eigenskapen til far eller mor barnet får, kjem igjen an på kven sitt gen som er dominant, og kven sitt gen som er recessivt (vikande) i dette genparet.
- I somme tilfelle vil begge gena for ein eigenskap vere dominante, og avkommet vil få ein blandingseigenskap som ikkje er lik nokon av foreldra, men ein variant midt imellom.
- Det er òg mogleg at barnet får eigenskapar som er heilt ulike foreldra sine. Det kan komme av at foreldra er berarar av eit recessivt gen, og at barnet får dette genet frå begge foreldra.
Det første programmet vi skal lage, er eit enkelt program som finn kva genkombinasjoner (genotypar) eit barn kan få for ein bestemd eigenskap. Vi bruker hårfarge som døme. Mørkt hår er dominerande og blir markert med ein stor bokstav (H). Kva bokstav vi bruker, er ikkje vesentleg, men det kan vere lurt å velje ein som seier noko om eigenskapen vi ønskjer å sjå på; derfor H for hår. Blondt hår er recessivt og får derfor nemninga h.
Ver klar over at vi gjer ei forenkling her, for i verkelegheita er det mange genpar som er med på å bestemme hårfargen.
Synlege eigenskapar – fenotypar
Programmet over gir oss akkurat den same informasjonen som eit krysnings-skjema gir oss. Viss vi er meir interessert i kva fenotypar (synlege eigenskapar) barna kan få, kan vi gjere om programmet litt.
Merknader til programmet over
- Vi opprettar begge tilfella og set startverdiane til 0, så går vi gjennom kvar krysning og ser på fenotypen.
- Sidan ein recessiv eigenskap berre kjem til uttrykk dersom begge gena for eigenskapen er recessiv, treng vi berre å kontrollere om ei krysning består av to recessive gen eller ikkje.
Enklare og meir kompakt kode
Det kan verke litt unødvendig tungvint når du må leggje inn gena til foreldra eitt og eitt. Dette kan vi gjere meir brukarvenleg ved at vi lèt programmet "forstå" at genotypen du skriv inn, består av to gen.Vi kan òg gjere koden vår meir kompakt, så vi slepp å ha så mange if/else-setningar som er meir eller mindre heilt like.
I programmet over har vi brukt indeksar for å hente ut eller putte objekt inn på ein samla stad (genotypane til foreldra i eitt ord og moglege krysningar i ei liste). Når Python indekserer objekt i eit ord (bokstavane) eller objekta i ei liste, får det første objektet i ordet/lista indeks 0.
Merk òg at vi må bruke range(len(Krysningar)) for å få Python til å forstå at det er indeks-verdien vi er ute etter, slik at vi kan gå gjennom lista frå start til slutt og sjå om kvar enkelt er "hh" eller ikkje.
Det er viktig å hugse på at det vi finn, er eit sannsyn for kva eigenskapar barna vil få. Kvart nytt barn foreldra får, har akkurat det same sannsynet for dei ulike fenotypane. Med andre ord: Om dei fem første barna skulle få mørkt hår, endrar ikkje det sannsynet for at nummer seks får mørkt eller blondt hår. Men med svært mange barn i ein søskenflokk vil fenotypen fordele seg ganske likt det sannsynskalkulatoren vår seier.
Dette kan vi illustrere ved å lage eit program som kan "produsere" mange barn for desse foreldra:
Bruk døma over og prøv å gjere om på dei slik at dei gjer det same for ein annan eigenskap.
Ei utfordring kan vere å lage programma for ein eigenskap der det er fleire enn to gen-typar, til dømes er blodtype A og B dominante, mens 0 er recessiv.