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?