from lag import Lag from lagliste import lagliste from kamp import Kamp # dette er listen over lag som skal spille (representert ved Lag-objekter) lagliste = [] lagliste.append(Lag("Bod?/Glimt ", 2.7, 1.3)) lagliste.append(Lag("Brann ", 1.8, 1.1)) lagliste.append(Lag("HamKam ", 1.4, 2.1)) lagliste.append(Lag("Haugesund ", 1.1, 1.3)) lagliste.append(Lag("Molde ", 2.1, 1.4)) lagliste.append(Lag("Lillestr?m ", 1.7, 1.5)) lagliste.append(Lag("Odd ", 1.2, 1.4)) lagliste.append(Lag("Rosenborg ", 1.4, 1.6)) lagliste.append(Lag("Sandefjord ", 1.6, 1.9)) lagliste.append(Lag("Sarpsborg 08", 2.0, 1.7)) lagliste.append(Lag("Stab?k ", 1.0, 1.6)) lagliste.append(Lag("Str?msgodset", 1.1, 1.2)) lagliste.append(Lag("Troms? ", 1.6, 1.1)) lagliste.append(Lag("Viking ", 2.0, 1.6)) lagliste.append(Lag("V?lerenga ", 1.3, 1.8)) lagliste.append(Lag("Aalesund ", 0.8, 2.4)) antall_simuleringer = 10000 # Variabler som skal oppdateres i oppgave 9: sum_m?l = 0 hjemmeseire = 0 m?l_for = {} m?l_mot = {} for lag in lagliste: m?l_for[lag] = 0 m?l_mot[lag] = 0 runder = [] nrunder = (len(lagliste) - 1)*2 # runder per sesong nkamper = len(lagliste)//2 # kamper per runde # Round-robin-algoritme # https://en.wikipedia.org/wiki/Round-robin_tournament#Circle_method lagliste1 = lagliste[:nkamper] # deler laglisten i to lagliste2 = lagliste[nkamper:] # slik at ett lag fra hver del m?tes for i in range(nrunder): runder.append([]) for j in range(nkamper): if i % 2 == 0: # partallsrunde kamp = Kamp(lagliste1[j], lagliste2[j]) # laget fra lagliste1 har hjemmekamp else: # oddetallsrunde kamp = Kamp(lagliste2[j], lagliste1[j]) # laget fra lagliste1 har bortekamp runder[i].append(kamp) # legger til kampen i listen # siste lag fra lagliste1 legges sist i lagliste2 til_liste1 = lagliste1.pop(-1) lagliste2.append(til_liste1) # f?rste lag fra lagliste2 legges p? indeks 1 i lagliste1 til_liste2 = lagliste2.pop(0) lagliste1.insert(1, til_liste2) # Simulerer kampene et antall ganger for simulering in range(antall_simuleringer): if simulering == 0: print() print("Eksempel-sesong:") for runde in runder: if simulering == 0: print() for kamp in runde: # Spill kampen kamp.spill() # printer bare f?rste simulering if simulering == 0: print(kamp) # Teller opp resultater sum_m?l += kamp.m?l_hjemme() + kamp.m?l_borte() if kamp.m?l_hjemme() > kamp.m?l_borte(): hjemmeseire += 1 m?l_for[kamp.hjemmelag()] += kamp.m?l_hjemme() m?l_for[kamp.bortelag()] += kamp.m?l_borte() m?l_mot[kamp.hjemmelag()] += kamp.m?l_borte() m?l_mot[kamp.bortelag()] += kamp.m?l_hjemme() # Skriver ut statistikk fra simuleringene print() print("Antall silmuleringer:", antall_simuleringer) print() kamper_per_lag = len(runder)*antall_simuleringer kamper_totalt = len(lagliste)*kamper_per_lag/2 # (det er 2 lag i hver kamp) poeng = 100 for lag in lagliste: snitt_for = round(m?l_for[lag]/kamper_per_lag, 2) snitt_mot = round(m?l_mot[lag]/kamper_per_lag, 2) poeng -= ((snitt_for - lag.angrep())**2 + (snitt_mot - lag.forsvar())**2) print(lag.navn(), " ", snitt_for, " ", snitt_mot) hjemmeseier_prosent = round(100 * hjemmeseire / kamper_totalt, 2) print() print("Snitt m?l/kamp: ", round(sum_m?l / kamper_totalt, 2), "(3.11 i virkeligheten)") print("Poeng: ", poeng, "av maks 100 (h?yere = mer realistisk)") print("Prosent hjemmeseire:", hjemmeseier_prosent, "(50 i virkeligheten)") print()