Oppgaver/materiale gruppetime
Oppgave 1
Skriv en klasse Person
.
- Personen har et navn og er enten syk eller frisk (men starter alltid som frisk). Personen skal kunne bli smittet, og blir da syk.
- Når personen blir smittet, blir han/hun samtidig immun, slik at hvis personen blir smittet igjen vil den ikke bli syk på nytt.
- Personen må også ha en metode for å kunne bli frisk
- Koden under skal fungere:
person = Person("Emilie")
person.blir_smittet()
assert person.er_syk()
person.blir_frisk()
person.blir_smittet()
assert not person.er_syk()
Oppgave 2
Vi husker fra tidligere gruppetime hvordan referanser fungerer i et eksempel som dette:
# 1
tall = [1, 2, 3]
# 2
nummere = tall
# 3
nummere.append(4)
print(tall)
... men hva skjer her?
# 1
person1 = Person("Emilie")
person2 = Person("Mari")
person3 = Person("Espen")
# 2
person3 = person2
# 3
person3.blir_smittet()
# 4
person2 = person1
print(person1.er_syk())
Oppgave 3
Hvis to personer møtes og en av dem er syk, er det en viss sannynlighet for at den andre blir smittet og blir syk. Skriv en metode moter_annen_person
i klassen Person. Metoden tar en annen person og en smittesannsynlighet (tall mellom 0 og 1) som argumenter. Hvis en av de to personene er syk, skal det trekkes et tilfeldig tall for å avgjøre om det skjer smitte. Hvis det skjer smitte, skal den andre også bli syk.
person1 = Person("Emilie")
person1.blir_smittet()
person2 = Person("Espen")
person1.moter_annen_person(person2, 0.5)
print(person2.er_syk())
Oppgave 4
Vi skal nå simulere X antall dager i en verden bestående av Y personer.
- Hver dag har først syke personer 10% sannsynlighet for å våkne opp som friske personer
- Deretter har friske personer 2 % sannsynlighet for å bli syke (ukjent smitte)
- Deretter møter alle personer hverandre (alle møter alle)
Skriv kode for å å simulere 100 slike dager med 100 personer. Alle personene starter som friske unntatt én person.
Tell opp på slutten av hver dag hvor mange syke personer det er og legg tallet til i en liste. Plott til slutt denne listen slik at vi kan se hvordan antallet endrer seg:
import matplotlib.pyplot as plt
plt.plot(antall_syke)
plt.show()
PS: Når alle møter alle, vil en person først kunne bli smittet og så møte en annen person samme dag og smitte videre. Det er greit.
Oppgave 5
Det er urealistisk at alle personene møter hverandre hver dag. Ved en pandemi er vi flinke til å holde oss til mindre grupper. Vi antar at samfunnet vårt består av en eller flere grupper, og at hver person kan være i en eller flere slike grupper. Hver dag møter personen alle andre personer i samme gruppe.
Utvid klassen person slik at personen også har en liste over grupper den er med i:
person = Person("Emilie", [1, 5, 3])
Vi ser for oss at det finnes 10 grupper (1, 2, 3, ..., 10). Gi hver person blant de 100 du simulerte én tilfeldig gruppe. Endre koden slik at hver person bare møter personer i samme gruppe. Smittesannsynnligheten er nå mye høyere (50%). Går den totale smitten ned?
Hva hvis hver person er medlem av 2 tilfeldige grupper? Utgjør det en stor forskjell? Prøv å øke antall grupper til f. eks 100 og se om det utgjør en forskjell.
PS: Implementer gjerne en metode for å sjekke om en person er i samme gruppe som en annen person.
Lek deg gjerne videre:
- Øk antall personer eller endre på andre parametere
- Hva skjer hvis alle er medlem av én gruppe, men en liten mengde personer er medlem av alle gruppene (superspredere)?
- Hva skjer hvis det er en liten mulighet for at man ikke blir immun når man blir smittet?