Hopp til innhold
Øvelse

Krysning og arv – programmering i Python

Når planter og dyr formerer seg kjønnet, vil avkommet få like mye arv fra far og mor, men det betyr ikke at barnet/avkommet ligner like mye på begge foreldrene. Her skal vi ved hjelp av programmering i Python teste ulike krysninger.

Formering – kjønnet og ukjønnet

Når nye individer blir til, dannes de ved hjelp av informasjonen som finnes i arvestoffet. En del planter kan formere seg ukjønnet og føre hele sitt arvestoff direkte til neste generasjon. Avkommet ("barna") blir da helt like denne ene forelderen.

De fleste dyr og planter bruker kjønnet formering. Da blir et tilfeldig utvalg av gener fra mor blandet med et tilfeldig utvalg av gener fra far. På den måten blir ikke barna helt like verken mor eller far, men en blanding av dem. Fordelen med kjønnet formering er at det vil være en mye større genetisk variasjon enn ved ukjønnet formering (kloning/vegetativ formering/enkjønnet formering).

Genetisk variasjon er viktig for at en art skal overleve. Da er det større sjanse for at noen av individene vil ha egenskaper som gjør at de tåler og kan overleve en utfordring som arten utsettes for (sykdom, miljøendring, konkurranse mot andre arter osv.).

Programmering – grunnleggende om arv

Når vi nå skal lage noen programmer for å illustrere hvordan kjønnet formering fungerer, må en huske på følgende:

  • Dominerende gener bestemmer egenskapen () til avkommet.
  • Avkommet får alltid like mye arvestoff fra begge foreldrene. Når et barn ligner mest på den ene forelderen, kommer det bare av at gener fra den ene forelderen er dominante for trekk som er tydelige i utseende.
  • Avkommet arver gener for ALLE egenskaper både fra far og mor (med et lite unntak på kjønns-kromosomene). Om det er fars eller mors egenskap barnet får, kommer igjen an på hvem sitt gen som er dominant, og hvem sitt gen som er recessivt (vikende) i dette genparet.
  • I noen tilfeller vil begge genene for en egenskap være dominante, og avkommet vil få en blandingsegenskap som ikke er lik noen av foreldrene, men en variant midt imellom.
  • Det er også mulig at barnet får egenskaper som er helt ulike foreldrenes. Det kan komme av at foreldrene er bærere av et recessivt gen, og at barnet får dette genet fra begge foreldrene.

Hårfarge

Det første programmet vi skal lage, er et enkelt program som finner hvilke genkombinasjoner () et barn kan få for en bestemt egenskap. Vi bruker hårfarge som eksempel. Mørkt hår er dominerende og markeres med en stor bokstav (H). Hvilken bokstav vi bruker, er ikke vesentlig, men det kan være lurt å velge en som sier noe om egenskapen vi ønsker å se på; derfor H for hår. Blondt hår er recessivt og får derfor betegnelsen h.

Vær klar over at vi gjør en forenkling her, for i virkeligheten er det mange genpar som er med på å bestemme hårfargen.

Synlige egenskaper – fenotyper

Programmet over gir oss akkurat den samme informasjonen et krysnings-skjema gir oss. Hvis vi er mer interessert i hvilke fenotyper (synlige egenskaper) barna kan få, kan vi gjøre om programmet litt.

Merknader til programmet over

  • Vi oppretter begge tilfellene og setter startverdiene til 0, så går vi gjennom hver krysning og ser på fenotypen.
  • Siden en recessiv egenskap bare kommer til uttrykk dersom begge genene for egenskapen er recessiv, trenger vi bare å kontrollere hvorvidt en krysning består av to recessive gener eller ikke.

Enklere og mer kompakt kode

Det kan virke litt unødvendig tungvint når du må legge inn genene til foreldrene ett og ett. Dette kan vi gjøre mer brukervennlig ved at vi lar programmet "forstå" at genotypen du skriver inn, består av to gener. Vi kan også gjøre koden vår mer kompakt, så vi slipper å ha så mange if/else-setninger som er mer eller mindre helt like.

Indeks

I programmet over har vi brukt indekser for å hente ut eller putte objekter inn på et samlet sted (genotypene til foreldrene i ett ord og mulige krysninger i en liste). Når Python indekserer objekter i et ord (bokstavene) eller objektene i en liste, får det første objektet i ordet/lista indeks 0.

Merk også at vi må bruke range(len(Krysninger)) for å få Python til å forstå at det er indeks-verdien vi er ute etter, slik at vi kan gå gjennom lista fra start til slutt og se om hver enkelt er "hh" eller ikke.

Sannsynligheten er lik for hvert barn

Det er viktig å huske på at det vi finner, er en sannsynlighet for hvilke egenskaper barna vil få. Hvert nytt barn foreldrene får, har akkurat den samme sannsynligheten for de ulike fenotypene. Med andre ord: Om de fem første barna skulle få mørkt hår, endrer ikke det sannsynligheten for at nummer seks får mørkt eller blondt hår. Men med svært mange barn i en søskenflokk, vil fenotypen fordele seg ganske likt det sannsynlighetskalkulatoren vår sier.

Dette kan vi illustrere ved å lage et program som kan "produsere" mange barn for disse foreldrene:

Prøv selv – endre kodene og kryss andre egenskaper

Bruk eksemplene over og prøv å gjøre om på dem slik at de gjør det samme for en annen egenskap.

En utfordring kan være å lage programmene for en egenskap hvor det er flere enn to gen-typer, for eksempel er blodtype A og B dominante, mens 0 er recessiv.

Skrevet av Eirik Farestveit Erstad og Kristin Bøhle.
Sist faglig oppdatert 15.08.2023