Oppgaver/materiale gruppetime

Oppgave 1

Skriv en klasse Person.

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.

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: