Fredagsfordypning uke 8

Frist for innlevering: Mandag 6. november, kl 23:59

Dette er en oppgave i to deler som g?r ut p? ? simulere fotball og sp? hvem som vinner Eliteserien i ?r (en oppgave som egner seg veldig godt til klasser og objekter). Dette er andre og siste del. Du m? ikke ha gjort f?rste del for ? gj?re denne delen.

Introduksjon

Programmet ditt skal etter hvert regne ut hvor stor sannsynlig det er at hvert lag havner p? hver plass p? tabellen. Programmet ditt trenger ikke v?re realistisk, men det m? involvere tilfeldige utfall av hver kamp, slik at det ikke blir de samme resultatene hver gang vi kj?rer programmet.

(PS: Du skal ikke beh?ve ? kunne noe om fotball for ? klare oppgavene. Hvis du opplever at vi bruker fotballbegreper som ikke gir mening, si fra p? Fredagsfordypning eller Discourse slik at vi kan forbedre oppgaveteksten.)

Filer du trenger i disse oppgavene:

Oppgave 1: Simuler en fotballkamp

Filnavn: kamp.py

Hvis du har gjort forrige innlevering til Fredagsfordypning, kopierer du bare din hittil beste spill()-metode inn i Kamp-klassen og g?r direkte videre til oppgave 2.

Hvis du ikke har gjort forrige innlevering til Fredagsfordypning, kan spill()-metoden implementeres slik:

Du m? ha med et element av tilfeldighet, slik at samme kamp kan f? forskjellig resultat dersom vi simulerer flere sesonger etter hverandre. Hvordan du gj?r dette, er opp til deg, men her er noen funksjoner importert fra random-pakken som kan v?re nyttige:

Denne pakken er en standard del av Python (ingen installasjon n?dvendig) og kan importeres med

import random

For ? f? et innblikk i hvor mange m?l det scores i en typisk fotballkamp, kan du se resultater fra ?rets sesong her. Du kan teste at spill()-metoden din virker ved ? bruke kamp_test.py (ikke bry deg om tallene som viser hvor realistisk simuleringen er, det eneste viktige i denne oppgaven er at du f?r forskjellige resultater n?r du kj?rer kamp_test.py flere ganger).

Oppgave 2: Les inn terminlisten

Filnavn: terminliste.py

(Dette er antakelig den mest tidkrevende oppgaven denne gangen.)

Kopier ?rets terminliste (med resultater) fra denne nettsiden og lagre det du kopierer i en tekstfil som du kaller rsssf2023.dat (du kan godt gj?re dette i VS Code) og denne filen skal ligge i samme mappe som Python-filene dine.

Skriv f?rst ferdig konstrukt?ren til klassen Terminliste slik at den leser filen linje for linje. Konstrukt?ren skal lage en ordbok som inneholder 30 elementer (ett for hver runde):

OBS: terminliste.py inneholder testkode som du kan bruke ved ? kj?re filen.

Oppgave 3: Spill alle kampene i en sesong

Filnavn: sesong.py

Sesong-klassen er i stand til ? ta Terminliste-objektet du laget i oppgave 2 og hente ut ordboken med rundene derfra. Men det er fortsatt en ting som mangler. Kampene som ikke er spilt, m? spilles (simuleres) p? den m?ten du definerte i oppgave 1. Dette m? du gj?re ved ? skrive ferdig metoden simuler() i Sesong som simulerer alle kampene som mangler resultat.

Her er grensesnittet til Kamp-objektene, som vil v?re til hjelp her (merk at du trenger noen nye metoder som ikke var med i innleveringsoppgaven fra uke 7, og at vi for enkelhets skyld har utelatt konstrukt?ren i tabellen under):

Metode Parameter:Type Returverdi Kommentar
hjemmelag - Lag Returnerer Lag-objektet som representerer hjemmelaget.
bortelag - Lag Returnerer Lag-objektet som representerer bortelaget.
spill - - Simulerer en kamp, slik at den f?r et resultat (se nedenfor).
ferdig - - True hvis kampen har et resultat, False hvis den ikke har et resultat.
m?l_hjemme - int (eller None) Returnerer antall m?l til hjemmelaget (None dersom kampen ikke er spilt enda).
m?l_borte - int (eller None) Returnerer antall m?l til bortelaget (None dersom kampen ikke er spilt enda).
__str__ - - Magisk metode som gj?r at kampen kan printes slik som i filen fra oppgave 2: print(en_kamp).

OBS: sesong.py inneholder testkode som du kan bruke ved ? kj?re filen.

Oppgave 4: Simuler 10 000 sesonger

Filnavn: fotballsimulator.py

I denne oppgaven f?r du ikke oppgitt et grensesnitt - her m? du isteden se p? koden i statistikk.py for ? finne ut hva du kan bruke og hvordan.

Lag en program som gj?r f?lgende:

Oppgave 5:

Filnavn: kamp.py

Hvis du har v?rt til stede p? Fredagsfordypning de siste to ukene, har du antakelig gjort dette allerede.

Hvis du p? en eller annen m?te vil ta hensyn til hvor gode lagene er, fungerer grensesnittet til Lag-objektene slik:

Metode Parameter:Type Returverdi Kommentar
__init__ navn:str
angrep:float
forsvar:float
- Konstrukt?r. Gir det nye objektet et navn og informasjon om hvor mange m?l de scorer (angrep) og slipper inn (forsvar) mot et gjennomsnittlig lag.
navn - str Henter navnet til laget.
angrep - float Henter hvor mange m?l de scorer mot et gjennomsnittlig lag (h?yere = bedre).
forsvar - float Henter hvor mange m?l de slipper inn mot et gjennomsnittlig lag (lavere = bedre).

Du kan bruke kamp_test.py til ? se hvor realistisk din metode er (men ikke bruk altfor mye tid p? ? gj?re den perfekt).

Krav til innlevering

For ? levere:

  1. Logg inn p? Devilry.
  2. Lever alle .py-filene
  3. Husk ? trykke lever/add delivery og sjekk deretter at innleveringen din er komplett. Du kan levere flere ganger, men alle filer m? v?re med i hver innlevering.