Hopp til innhald

Oppgåver og aktivitetar

Artsdatabase – modell

Du bruker truleg søkbare databasar mange gonger om dagen utan å tenkje så mykje over korleis dei er laga. Her skal vi byggje ein enkel database som kan brukast som bestemmingsnøkkel for fuglar. Når du jobbar med denne oppgåva, vil du få eit innblikk i korleis slike databasar kan byggjast opp.
Ei stokkand og Python-kodar frå artsdatabasen. Foto.
Opne bilete i eit nytt vindauge

Artsdatabase

Det finst millionar av artar på jorda. Alle har unike eigenskapar og kjenneteikn. I fleire tusen år har vi menneske jobba med å kartleggje artar, og jobben er langt frå ferdig. Etter at ein begynte å registrere innsamla data i databasar, har det blitt langt enklare å finne ut om ein har funne ein ny art, eller om han er registrert tidlegare.

I programmet vi skal skrive no, skal vi lage ein enkel artsdatabase der du lett kan søkje opp arten du ønskjer å artsbestemme.

Lagre data i filer

Viss vi vil lagre det som blir skrive i eit program, må vi få programmet til å skrive dette til ei fil på harddisken. Når vi lagar ein database, vil vi ikkje måtte leggje inn alle artar på nytt kvar gong vi køyrer programmet. Vi ønskjer heller ikkje å leggje inn programkoden på nytt kvar gong vi vil utvide databasen.

Det første vi skal lære, er derfor å få Python til å skrive direkte til ei fil på PC-en. Då må du opprette ei mappe og ei tekstfil slik det er beskrive nedanfor, før du går vidare.

  1. Opprett ei mappe på nivået rett under C:\ på PC-en din. Kall ho til dømes Python-filer eller Artar.

  2. Opprett ei tekstfil i Notisblokk (Notebook) med namnet Fuglar.txt, og lagre ho i mappa du har oppretta under C:\.

  3. Før du køyrer programmet nedanfor, må du endre "c:\Artar\Fuglar.txt" slik at det stemmer med mappa du har lagra fila di i. For å finne den nøyaktige plasseringa til fila, kan du høgreklikke på ho i filutforskaren og velje Eigenskapar.

  4. Legg programmet (Python-kodane) inn i eit Python-program, og lagre det. Du kan lagre Python-programmet i same mappe som tekstfila Fuglar.txt, men sidan koden i programmet uansett inneheld informasjon om plasseringa av tekstfila, er ikkje det viktig.

  5. Prøv å køyre koden nedanfor i eit Python-program.

python – Artsdatabase 1 – skriv til fil

1with open("c:\Artar\Fuglar.txt", "a") as f:
2    f.write("Fuglar!")
Skjermdump frå tekstfil som inneheld ordet "Fuglar!". Illustrasjon.

Opne tekstfila du laga. Viss du har gjort alt riktig, skal det no stå "Fuglar!" i fila.

Legg inn artar

Kjøtmeis og dompap sit i snøen. Foto.

Neste steg er å utvide programmet slik at vi kan leggje inn fugleartar som blir lagra i fila og er der neste gong vi ønskjer å leggje til ein fugl. Vi må òg bestemme kva kjenneteikn vi vil registrere. Det er desse kjenneteikna vi skal bruke når vi seinare søkjer opp fuglar i databasen.

I dette dømet held vi oss til fire kriterium (som nok er for lite i ein stor database): hovudfarge, brystfarge, nebbform og nebbfarge.

Du kan enkelt endre eller leggje til andre kjenneteikn seinare, til dømes fotfarge eller ryggfarge. Studer koden, og forsøk å forstå kva føremålet med dei ulike kommandoane er.

python – Artsdatabase 2 – bygg ein base

1ny = "j"
2while ny == "j":
3    with open("C:\Artar\Fuglar.txt", "a") as f:
4        namn = input("Artsnamn: ")
5        hovudfarge = input("Vel hovudfarge(skriv talet).\n1:Grå"
6          "\n2:Gul\n3:Kvit\n4:Svart\n5:Blå\n6:Brun"
7          "\n7:Grøn\n8:Raud\n")
8        if hovudfarge == "1":
9            hovudfarge = ("Grå")
10        elif hovudfarge == "2":
11            hovudfarge = ("Gul")
12        elif hovudfarge == "3":
13            hovudfarge = ("Kvit")
14        elif hovudfarge == "4":
15            hovudfarge = ("Svart")
16        elif hovudfarge == "5":
17            hovudfarge = ("Blå")
18        elif hovudfarge == "6":
19            hovudfarge = ("Brun")
20        elif hovudfarge == "7":
21            hovudfarge = ("Grøn")
22        elif hovudfarge == "8":
23            hovudfarge = ("Raud")
24 
25        brystfarge = input("Vel brystfarge.\n1:Raud\n2:Gul"
26          "\n3:Kvit\n4:Svart\n5:Grå\n6:Gul og svart\n7:Brun\n")
27        if brystfarge == "1":
28            brystfarge = ("Raud")
29        elif brystfarge == "2":
30            brystfarge = ("Gul")
31        elif brystfarge == "3":
32            brystfarge = ("Kvit")
33        elif brystfarge == "4":
34            brystfarge = ("Svart")
35        elif brystfarge == "5":
36            brystfarge = ("Grå")
37        elif brystfarge == "6":
38            brystfarge = ("Gul og svart")
39        elif brystfarge == "7":
40            brystfarge = ("Brun")
41       
42        nebbform = input("Vel nebbform.\n1:Spiss\n2:Butt\n3:Lang\n")
43        if nebbform == "1":
44            nebbform = ("Spiss")
45        elif nebbform == "2":
46            nebbform = ("Butt")
47        elif nebbform == "3":
48            nebbform = ("Lang")
49           
50        nebbfarge = input("Vel nebbfarge.\n1:Raud\n2:Gul"
51          "\n3:Oransje\n4:Grå\n5:Svart\n")
52        if nebbfarge == "1":
53            nebbfarge = ("Raud")
54        if nebbfarge == "2":
55            nebbfarge = ("Gul")
56        if nebbfarge == "3":
57            nebbfarge = ("Oransje")
58        if nebbfarge == "4":
59            nebbfarge = ("Grå")
60        if nebbfarge == "5":
61            nebbfarge = ("Svart")
62           
63        print(namn,"er lagt til i databasen")
64        f.write("{},{},{},{},{}\n".format(namn,hovudfarge,
65          brystfarge,nebbform,nebbfarge))
66        f.close()
67    ny = input("Vil du leggje til fleire artar? j/n: ")

Bygg opp databasen

Liten fugl med blå hette på hovudet og gult bryst. Foto.

Legg inn to fugleartar, og kontrollar at dei blir skrivne korrekt til fila. Bruk deretter litt tid på å leggje inn fleire fugleartar.

Du legg sikkert merke til at tekstfila ikkje er så lett å lese. Det står ikkje spesifikt kva eigenskap dei ulike detaljane høyrer til. Det er fordi tekstfila ikkje er meint å skulle lesast av menneske, men av vårt neste program. Jo mindre forklarande tekst vi legg inn der, jo enklare er det å lage eit program som hentar ut data frå fila.

Søk i basen

Tenk deg at du er ute på tur og har observert ein fugl som du ikkje veit namnet på. Du noterer kjenneteikna og prøver databasen din for å finne namnet. Det er sjølvsagt mogleg å leite i tekstfila etter ein art med dei same kjenneteikna, men viss databasen inneheld veldig mange artar, vil dette ta tid. Vi lagar heller eit program som leiter for oss. Studer koden, og forsøk å forstå kva føremålet med dei ulike kommandoane er.

Obs! Legg merke til at du vel tal som står for dei opplysningane som ligg i databasen. Fire tal som 7,7,3,2 kan i ein database bety "Grøn,Brun,Lang,Gul", som i denne basen gir arten stokkand som resultat. Det er òg mogleg å velje "Veit ikkje". Då vil programmet foreslå artar som kan likne.

Dersom du vil bruke Trinket Python-editor

Sidan Trinket Python-editoren ikkje har tilgang til disken på PC-en, må kodane i tekstfila "Fuglar" leggjast inn i ei eiga fane i editoren for at programmet skal finnedei. Bruk "+" for å leggje til ei ny fane i Trinket Python-editoren.

Skjermdump at redigeringsverktøy for Python-koder. Illustrasjon.
Opne bilete i eit nytt vindauge

python – Artsdatabase 3 – søk i basen

1resultat = []
2linjenummer = 0
3funn=[]
4sok = [0]
5hovudfarge = input("Velg hovudfarge(skriv talet).\n1:Grå"
6  "\n2:Gul\n3:Kvit\n4:Svart\n5:Blå\n6:Brun\n7:Grøn\n8:Raud"
7  "\n9:Veit ikkje\n")
8if hovudfarge == "1":
9    sok.append("Grå")
10elif hovudfarge == "2":
11    sok.append("Gul")
12elif hovudfarge == "3":
13    sok.append("Kvit")
14elif hovudfarge == "4":
15    sok.append("Svart")
16elif hovudfarge == "5":
17    sok.append("Blå")
18elif hovudfarge == "6":
19    sok.append("Brun")
20elif hovudfarge == "7":
21    sok.append("Grøn")
22elif hovudfarge == "8":
23    sok.append("Raud")
24elif hovudfarge == "9":
25    sok.append("Uvisst")
26   
27brystfarge = input("Vel brystfarge.\n1:Raud\n2:Gul\n3:Kvit"
28  "\n4:Svart\n5:Grå\n6:Gul og svart\n7:Brun\n8:Veit ikkje\n")
29if brystfarge == "1":
30    sok.append("Raud")
31elif brystfarge == "2":
32    sok.append("Gul")
33elif brystfarge == "3":
34    sok.append("Kvit")
35elif brystfarge == "4":
36    sok.append("Svart")
37elif brystfarge == "5":
38    sok.append("Grå")
39elif brystfarge == "6":
40    sok.append("Gul og svart")
41elif brystfarge == "7":
42    sok.append("Brun")
43elif brystfarge == "8":
44    sok.append("Uvisst")
45 
46 
47nebbform = input("Vel nebbform.\n1:Spiss\n2:Butt"
48  "\n3:Lang\n4:Veit ikkje\n")
49if nebbform == "1":
50    sok.append("Spiss")
51elif nebbform == "2":
52    sok.append("Butt")
53elif nebbform == "3":
54    sok.append("Lang")
55elif nebbform == "4":
56    sok.append("Uvisst")
57 
58nebbfarge = input("Vel nebbfarge.\n1:Raud\n2:Gul"
59  "\n3:Oransje\n4:Grå\n5:Svart\n6:Veit ikkje\n")
60if nebbfarge == "1":
61    sok.append("Raud")
62elif nebbfarge == "2":
63    sok.append("Gul")
64elif nebbfarge == "3":
65    sok.append("Oransje")
66elif nebbfarge == "4":
67    sok.append("Grå")
68elif nebbfarge == "5":
69    sok.append("Svart")
70elif nebbfarge == "6":
71    sok.append("Uvisst")
72 
73with open("c:\Artar\Fuglar.txt","r") as f:
74    for line in f:
75        linjenummer += 1
76        art = line.split(",")
77        strip = art[-1].rstrip("\n")  #Fjernar  
78               #linjeskiftkommandoen frå teksten
79        art[-1] = strip
80        score = 0
81        for i in range(len(sok)):
82            if art[i] == sok [i]:
83                score += 1
84        if score >= 3:      #Dersom fleire enn dette talet på
85           #kriterium stemmer, vil arten bli lagd til i funna
86            funn.append(art[0])
87 
88print("\nFuglane som passar til dine kriterium, er:")
89for i in range(len(funn)):    
90    print(funn[i])

Jobb med programmet, og test funksjonalitet

Lag programmet, og prøv å søkje opp artar ut frå fila du laga med det første programmet.

  • Finn du arten?
  • Får du fleire svar?
  • Kva kan du gjere dersom det blir for mange svar ut frå dei same kjenneteikna?
  • Kor mange artar og kjenneteikn bør registrerast i databasen før han blir funksjonell?
  • Fungerer søket viss du berre kjenner brystfargen og nebbforma?
  • Har det noko å seie om du til dømes skriv "tre" eller "3"?
  • Kva skjer viss nokon skriv mellomrom etter komma?
  • Byt søkjeprogram med ein medelev, og søk på ein art.

    • Får de treff?
    • Er kjenneteikna på artane klare nok?
  • Kan du leggje til eigenskapar for farge på føtene eller ryggfarge? Hugs å gjere endringar både i databasen og i koden for søket.

  • Kan du bruke programmet til å lage ein søkbar database for blomstrar, tre, fiskar eller anna?

CC BY-SASkrive av Eirik Farestveit Erstad og Kristin Bøhle.
Sist fagleg oppdatert 07.08.2023

Læringsressursar

Modellering og programmering