From 62633fa9fb01e15466ed0e700793fcdafcc40fdc Mon Sep 17 00:00:00 2001 From: Trygve Date: Mon, 23 Oct 2023 21:45:15 +0200 Subject: [PATCH] Innlevering 3 og 4 --- inf120stat.py | 23 +++++++++++++++++++++++ smitte.py | 34 ++++++++++++++++++++++++++++++++++ stat_kalk.py | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+) create mode 100644 inf120stat.py create mode 100644 smitte.py create mode 100644 stat_kalk.py diff --git a/inf120stat.py b/inf120stat.py new file mode 100644 index 0000000..a580733 --- /dev/null +++ b/inf120stat.py @@ -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()) \ No newline at end of file diff --git a/smitte.py b/smitte.py new file mode 100644 index 0000000..05b65e9 --- /dev/null +++ b/smitte.py @@ -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() \ No newline at end of file diff --git a/stat_kalk.py b/stat_kalk.py new file mode 100644 index 0000000..ad3633c --- /dev/null +++ b/stat_kalk.py @@ -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() \ No newline at end of file