Innlevering 3 og 4

This commit is contained in:
Trygve 2023-10-23 21:45:15 +02:00
parent 6da3bc27ad
commit 62633fa9fb
3 changed files with 108 additions and 0 deletions

23
inf120stat.py Normal file
View File

@ -0,0 +1,23 @@
from math import sqrt, isclose
def mean(l):
return sum(l)/len(l)
def std(l):
m = mean(l)
diffs = [(x-m)**2 for x in l]
return sqrt(sum(diffs)/len(diffs))
def test_mean():
l = [1.0, 2.0, 3.0, 4.0]
expected = 2.5
return isclose(mean(l), expected, abs_tol=0.001)
def test_std():
l = [1.0, 2.0, 3.0, 4.0]
expected = 1.11803
return isclose(std(l), expected, abs_tol=0.001)
if __name__ == '__main__':
print('mean:', test_mean())
print('std:', test_std())

34
smitte.py Normal file
View File

@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
"""Created on 23.10"""
__author__ = "Trygve B. Nomeland"
__email__ = "trygve.borte.nomeland@nmbu.no"
""""
SIR modell av en pandemi:
S (Susceptible) folk som ikke er eller har vært syke og som kan smittes
I (Infectious) folk som er syke og som kan smitte andre
R (Recoverd) folk har vært syke og har blitt friske igjen. Modellen antar at disse ikke kan bli syke igjen.
_y betyr verdi fra forrige steg
"""
def updateSIR(s_y, i_y, r_y, b, k):
return {'s': s_y - b*s_y*i_y, 'i': i_y + b*s_y*i_y-k*i_y, 'r': r_y + k*i_y}
# Generator som kjører simulasjonen frem til "stop" verdien
def genSIR(s_0, i_0, r_0, stop, b=1/3, k=1/10,):
SIR = {'s': s_0, 'i': i_0, 'r': r_0}
yield SIR
n = 0
while n < stop:
n += 1
SIR = updateSIR(SIR.get('s'), SIR.get('i'), SIR.get('r'), b, k)
yield SIR
def main():
f = open('pan.csv', 'w')
f.write('Day,s@day,i@day,r@day\n')
for n, S in enumerate(genSIR(1, 10/(5*10**6), 0, stop=120)):
f.write(f'{n},{S.get('s'):.3e},{S.get('i'):.3e},{S.get('r'):.3e}\n')
f.close()
if __name__ == '__main__':
main()

51
stat_kalk.py Normal file
View File

@ -0,0 +1,51 @@
import inf120stat as stat
def choose_action():
#returns number from 1 to 5
print("""
ESP meny:
1. Les inn verdier
2. Tøm verdi listen
3. Vis gjennomsnitt og standardavvik
4. List ut verdiene
5. Avslutt
Ditt valg:""")
i = int(input())
if i not in range(1,6): raise ValueError()
return i
def read_values(values):
while True:
try:
values.append(float(input('Ny verdi (Enter = slutt):')))
except ValueError:
print('Verdier kan kunn være gyldige flyttall!')
break
return values
def print_statistics(values):
return(f'Antall verdier: {len(values)}, gjennomsnitt: {stat.mean(values):.2f}, standardavvik: {stat.std(values):.2f}')
def main():
print('Starter Enkelt statistikk program (ESP)')
values = []
while True:
match choose_action():
case 1:
# Write numbers
read_values(values)
case 2:
values = []
case 3:
#mean, std
try:
print(print_statistics(values))
except ZeroDivisionError:
print('Tom liste!')
case 4:
print(values)
case 5:
exit('Hadebra :)')
if __name__ == '__main__':
main()