Fredagsfordypning uke 7

Frist for innlevering: Mandag 9. oktober, 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 f?rste del og den leveres f?r den siste obligatoriske oppgaven. Andre og siste del leveres etter den obligatioriske oppgaven.

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.)

Oppgave 1: Lag

Filnavn: lag.py

Lag en klasse Lag i filen lag.py. Klassen Lag skal inneholde informasjon om lag i Eliteserien. Det er 16 lag i serien, s? vi vil etter hvert trenge flere forskjellige Lag-objekter med hver sine data.

Hvilke instansvariabler du bruker og hva metodene inneholder er opp til deg. Men alle Lag-objektene m? oppf?re seg som beskrevet i grensesnittet under, slik at de kan brukes slik vi ?nsker senere:

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).

(PS: Legg merke til at self ikke er tatt med blant parametrene, fordi alle metoder inkluderer denne parameteren per definisjon.)

Oppgave 2: Test av Lag-klassen

Filnavn: test.py

Lag et program som tester at alle metodene dine virker som de skal:

from lag import Lag

Hvis du trenger inspirasjon til lagenes navn og hvor mange m?l de typisk scorer og slipper inn, kan du ta en titt p? ?rets resultater her, men ikke bruk tid p? ? gj?re det veldig realistisk forel?pig.

Oppgave 3: Kamp

Filnavn: kamp.py

Neste steg er ? lage en klasse som skal simulere én fotballkamp mellom to Lag-objekter. Som i oppgave 1 er grensesnittet gitt:

Metode Parameter:Type Returverdi Kommentar
__init__ hjemmelag:Lag
bortelag:Lag
- Konstrukt?r. Forteller det nye Kamp-objektet hvilke Lag som spiller kampen.
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).
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)

S? til det store sp?rsm?let: Hvordan skal du lage spill-metoden?

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.

Oppgave 4: Test av Kamp-klassen

Filnavn: test.py

Utvid test-programmet til ? teste Kamp-klassen ogs?:

Oppgave 5 (frivillig): Mer realistiske kamper

Filnavn: kamp.py og test.py

I denne oppgaven vil du b?de endre p? klassen Kamp og teste endringene du gj?r etterp?. At denne oppgaven er frivillig betyr at innleveringen egentlig er stor nok uten denne oppgaven, men om du har lyst og tid, s? vil du f? tilbakemelding p? denne ogs?.

Vel er det mange tilfeldigheter i fotball, men alt er ikke helt tilfeldig - vi skal n? utvide spill-metoden til ? bli mer realistisk ved ? ta hensyn til f?lgende:

Hva skjer videre?

I ukene som kommer skal vi pr?ve ? finne ut hvem som kommer til ? vinne Eliteserien i ?r. For ? f? til det vil vi etter hvert lage mange Sesong-objekter som simulerer en hel sesong med fotballkamper og regne ut hvor ofte hvert lag vinner n?r vi simulerer 10 000 sesonger.

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.