? sp? resultater for idrett

I denne oppgaven skal vi fors?ke ? lese inn resultater av fotballkamper, basert p? historiske data fra tidligere utgaver. I mappen som f?lger med denne oppgaven vil dere finne en mappe resultater som inneholder alle kampresultatene fra de siste seks sesongene av Eliteserien, samt den f?rste halvdelen av innev?rende sesong. M?let v?rt er ? fors?ke ? sp? hvem som til slutt vinner basert p? denne dataen. Dere vil og f? litt kjennskap til rammeverket pytest, som brukes til ? organisere og teste pythonprogrammer.

Alle data er laget av Norges fotballforbund, og hentet fra www.fotball.no

Del 0 - Sette opp prosjektet

For ? starte oppgaven m? dere laste ned zip-filen fra gruppesiden og pakke den ut slik at filene er i sin egen prosjektmappe. Mappa skal inneholde mappene "resutater" og "tests", samt filen pyproject.toml. Pyprosject-filen definerer avhengighetene til python-prosjektet (i dette tilfellet kun pytest), hvilken python-versjon man m? ha for ? kj?re det. Jeg bruker python 3.11, s? den eller nyere skal brukes, hvis dere bruker en eldre versjon m? dere laste ned en nyere utgave. Du kan finne ut hvilken versjon av python du bruker med kommandoen

python --version

Dere kan n? installere alt dere trenger for prosjektet ved ? skrive kommandoen

pip install .

Mulig dere m? skrive sudo pip install . i linux.

N?r det er gjort kan dere starte p? oppgaven

Del 1 - Lag.py

Oppgave 1

Lag en klasse lag, konstrukt?ren skal kunne opprette et lag med et gitt navn, og opprette instansvariablene _poeng, _m?l_for, _m?l_mot, _ant_seiere og _ant_uavgjort

Vi trenger og en metode oppdater_etter_resultat() som tar antall poeng, m?l for og mot som argument, og oppdatere laget med de nye verdiene.

Kj?re tester med pytest

Dette har blitt gjennomg?tt p? gruppetimen.

obs Husk at du m? installere pytest. Naviger deg til mappen med fila "pyproject.toml" og kj?r kommandoen

pip install .

? bruke pytest er veldig enkelt. N?r man kj?rer kommandoen pytest samles alle metoder som starter med ordet test i prosjektmappen din. Hvis dere ser p? filene i test-mappa vil dere se at alle heter "test_*" Hvis dere bruker kommandoen:

pytest ./tests 

Vil pytest kj?re alle testene i mappen tests

Vi kan og dele opp testene i forskjellige deler. Dere vil se at alle testene har en linje @pytest.mark.oX over seg. Hvis dere bruker mark?ren "oX" vil pytest bare kj?re testene som er markert.

For den f?rste oppgaven kan dere kj?re kommandoen

pytest -m o1

Og tilsvarende for alle andre oppgaver.

Hvis dere gj?r endringer p? koden dere skrev tidligere i oppgaven, kan dere bruke

pytest ./tests

for ? sjekke at alle tidligere tester fortsatt best?r etter at dere har skrevet mer kode.

Oppgave 2

Siden vi skal bruke lag-klassen til ? lage en tabell til slutt trenger vi ? kunne finne ut hvordan lagene m?ler seg mot hverandre. Lag en metode hent_m?lforskjell(). M?lforskjellen er differansen mellom m?l scoret og m? imot. Deretter lag en metode er_over_p?_tabellen(). Et lag er over et annet lag dersom de har flere poeng, eller likt poeng, men har bedre m?lforskjell. Det er flere regler dersom m?lforskjellen er lik, men jeg tror ikke det er relevant i dette datasettet.

Test programmet med ? kj?re kommandoen

pytest -m o2

Oppgave 3

Til slutt skal vi lage en metode som regner ut seiersprosenten til et lag, alts? forholdet mellom antallet seiere mot antalle kamper spilt. Siden en fotballamp kan ende med seier, uavgjort og tap, regner vi uavgjort som en halv seier.

Test programmet med ? kj?re kommandoen

pytest -m o3

Oppgave 4

For ? komme med et litt mer detaljert m?l p? hvor bra et lag har prestert frem til n? i en sesong, kan men regne ut noe som kalles pytagorisk fordel. Dette m?let tar utganspunkt i hvor mange m?l et lag har scoret, og hvor mange m?l man har sluppet inn. Navnet stammer fra at det er ganske likt Pytagoras formel for rettvinklede trekanter. Formelen er for dette er $ \frac{f^2}{f^2 + m^2} $ Hvor f er m?l for, og m er m?l mot

Test programmet med ? kj?re kommandoen

pytest -m o4

Del 2 Tabell.py

Oppgave 5

Lag en klasse Tabell m? ha et ?rstall tabellen gjelder for, og en ordbok for lagene som deltar. Ordboken kan v?re tom n?r en tabell opprettes. Tabellen skal og ha oversikt over hvor mange kamper som har endt med hjemmeseier, borteseier eller uavgjort. Tabellen m? og ha metodene ant_hjemmeseiere, ant_borteseiere og ant_uavgjort for ? hente disse verdiene.

Test programmet med ? kj?re kommandoen

pytest -m o5

Oppgave 6

N? skal vi lage en metode les_resultater_fra_fil. Denne metoden skal v?re i stand til ? lese alle filene med resultater, bortsett fra den for innev?rende ?r (den kommer vi tilbake til senere).

Alle filene finner dere i resultat-mappa. Alle filene har samme navn og er strukturert likt. Alle filene er .csv-filer. Dere skal n? lese resultatene og oppdatere tabellen etterhvert som dere leser resultater.

Hint: Jeg vil sterkt anbefale ? dele denne metoden opp i flere hjelpemetoder. Hovedmetoden b?r bare delegere arbeidet til metoder som gj?r de n?dvendige opperasjonene. Test underveis at metodene fungerer som de skal f?r du g?r videre til neste steg.

Test programmet med ? kj?re kommandoen

pytest -m o6

Oppgave 7

N? som vi har alle dataen vi trenger, ?nsker vi ? kunne skrive ut tabellen. For ? gj?re dette skal vi f?rst lage en metode

Test programmet med ? kj?re kommandoen

pytest -m o7

Til slutt lag en metode som skriver ut den sorterte tabellen p? en oversiktlig m?te til terminalen.

Lykke til!

Send meg gjerne sp?rsm?l eller kommentarer p? epost jonaen@ifi.uio.no eller p? discourse!