Obligatorisk oppgave 6

IN1000, v?ren 2026

Innleveringsfrist: onsdag 18. mars, kl. 23:59

Du kan ogs? f? godkjent obligen ved ? jobbe med den p? gruppetimene - se mer info om dette p? emnesidene.

Nettskjema for egenmelding ved behov for utsatt frist (max 3 dager) finner du her.

Filer som skal leveres:

Oppgave 1

Filnavn: test_dato.py

Du skal lage noen egne Dato-objekter som du trenger til et Python-program (og disse vil du lage i oblig 7), men for ? gj?re prosessen lettere for deg selv velger du ? fokusere p? grensesnittet f?rst, slik at du vet hva du skal lage f?r du begynner ? tenke p? hvordan du skal lage det.

I den vedlagte filen oblig7.py har du laget noen prototyper som gj?r at du kan bruke alle bruke Dato-objekter som forklart under (koden kj?rer, men det er mye som ikke er laget ferdig). Du vil ikke trenge ? lese eller forst? koden i oblig7.py for ? l?se oppgavene - det er der bare for at du skal kunne kj?re din egen kode uten feilmeldinger. Selv om de ikke virker som de skal enda, skal vi likevel skrive programmet som bruker disse objektene som om de var ferdige og fungerte som de skal. Denne ?velsen er nemlig gull verdt n?r vi senere fikser p? hvordan objektene skal fungere. (Det samme gjelder i oppgave 2.)

Importer objekt-typene du trenger og gj?r skriv et program som skal teste objektene p? f?lgende m?te:

V?r klar over at prototypene gj?r minst mulig, s? n?r du har l?st oppgaven riktig vil programmet bare skrive ut f?lgende (minneadressene til objektene vil ikke v?re de samme som i figuren):

V?r klar over at m?let med oppgaven er ? kunne bruke objektene riktig, ikke ? f? riktig utskrift. Det er koden du skriver som blir vurdert, ikke utskriften den produserer (som bare er der for ? hjelpe deg ? bruke objektene riktig).

Grensesnittene til alle typene som brukes finner du her (og du m? sette deg inn i disse for ? l?se oppgaven, men det er ikke slik at all informasjonen m? brukes - noe av dette er f?rst nyttig i oblig 7):

Objekter av typen Dato opprettes med Dato(ddmm????) hvor argumentet er:

Objekter av typen Dato har f?lgende metoder:

Metode Parametre Returverdi Kommentar
hent_?r - int Henter ut ?ret fra datoen
dag_er_lik int bool True hvis dagen i datoen er lik tallet, False hvis ikke
neste_dag - - ?ker verdien av dagen i datoen med 1
endre_til str - Endrer datoen til en ny dato

Objekter av typen Dato st?tter f?lgende operasjoner:

Operasjon Kommentar
print(dato) Skriver ut datoen p? formatet dd.mm.????

Oppgave 2

Filnavn: test_fotball.py

Du vil lage en fotballsimulator som simulerer fotballkamper og sp?r resultater i Python. Du skal lage noen egne objekter til dette programmet (og disse vil du lage i oblig 7), men for ? gj?re prosessen lettere for deg selv velger du ? fokusere p? grensesnittet f?rst, slik at du vet hva du skal lage f?r du begynner ? tenke p? hvordan du skal lage det.

I den vedlagte filen oblig7.py har vi laget noen veldig enkle prototyper som gj?r at du kan bruke alle objekt-typene under (koden kj?rer, men det er mye som ikke er laget ferdig). Du skal likevel ?ve deg p? ? bruke disse objektene riktig allerede n? (som om de var ferdiglaget).

Importer objekt-typene du trenger og gj?r skriv et program som skal teste objektene p? f?lgende m?te:

V?r klar over at prototypene gj?r minst mulig, s? n?r du har l?st oppgaven riktig vil programmet bare skrive ut noe som ligner f?lgende (minneadressene til objektene vil ikke v?re de samme som i figuren):

V?r klar over at m?let med oppgaven er ? kunne bruke objektene riktig, ikke ? f? riktig utskrift. Det er koden du skriver som blir vurdert, ikke utskriften den produserer (som bare er der for ? hjelpe deg ? bruke objektene riktig).

Grensesnittene til alle typene som brukes finner du her (og du m? sette deg inn i disse for ? l?se oppgaven, men det er ikke slik at all informasjonen m? brukes - noe er f?rst nyttig i oblig 7). Objektene opprettes uten argumenter (for eksempel Sesong() for Sesong) med mindre annet er spesifisert. Det er ikke sikkert du vil trenge ? bruke alle typene objekter i oblig 6.

Sesong

Objekter av typen Sesong har f?lgende metoder:

Metode Parametre Returverdi Kommentar
les_lag_fra_fil str - Leser inn informasjon om lagene i serien fra filen med dette filnavnet
runde int Runde Lager et nytt Runde-objekt som f?r dette rundenummeret hvis det ikke finnes et slikt objekt fra f?r. Returnerer Runde-objektet med dette rundenummeret.

Runde

Objekter av typen Runde opprettes med Runde(sesong) hvor argumentet er:

Objekter av typen Runde har f?lgende metoder:

Metode Parametre Returverdi Kommentar
legg_til str, str - Lager og legger til en nytt Kamp-objekt som h?rer til et Runde-objekt. F?rste parameter er hjemmelagets navn, andre parameter er bortelagets navn (disse navnene m? finnes i filen som er lest inn til Sesong-objektet Runden tilh?rer)

Objekter av typen Runde st?tter f?lgende operasjoner:

Operasjon Kommentar
for .. in .. G?r gjennom Runde-objektet med en for-l?kke og returnerer ett og ett Kamp-objekt

Kamp

Objekter av typen Kamp opprettes med Kamp(hjemme, borte) hvor argumentene er:

Objekter av typen Kamp har f?lgende instansvariabler:

Instansvarabel Type Kommentar
hjemme Lag (se ovenfor)
borte Lag (se ovenfor)
hm?l int / None Antall m?l hjemmelaget scoret (eller None dersom kampen ikke er spilt)
bm?l int / None Antall m?l bortelaget scoret (eller None dersom kampen ikke er spilt)

Objekter av typen Kamp har f?lgende metoder:

Metode Parametre Returverdi Kommentar
simuler - - Simulerer kampen slik at den f?r et resultat (hjemmelaget og bortelaget f?r et antall m?l hver)

Objekter av typen Kamp st?tter f?lgende operasjoner:

Operasjon Kommentar
print(kamp) Skriver ut: hjemmelagets navn - bortelagets navn, og hvis kampen er spilt: hjemmelagets m?l - bortelagets m?l. Eksempler: "Bod?/Glimt - Manchester City 3 - 1" (spilt kamp) "Atlético Madrid - Bod?/Glimt" (ikke spilt kamp)

Lag

Objekter av typen Lag opprettes med Lag(navn, elo, m?l) hvor argumentene er:

Objekter av typen Lag har f?lgende instansvariabler:

Instansvarabel Type Kommentar
navn str (se ovenfor)
elo int (se ovenfor)
m?l float (se ovenfor)

Objekter av typen Lag st?tter i tillegg f?lgende operasjoner:

Operasjon Kommentar
print(lag) Skriver ut lagets navn.

Oppgave 3

Filnavn: teori.txt

Gi korte svar p? sp?rsm?lene under (hentet fra forelesning 7):

  1. Hva er innkapsling? Hvorfor er det nyttig?
  2. Hva er grensesnittet til en klasse? Hvordan skiller det seg fra implementasjonen av en klasse?
  3. Hva er en instansmetode (ofte kalt bare metode)? Hvordan skiller metoder seg fra prosedyrene/funksjonene vi har jobbet med hittil?

Oppgave 4

Filnavn: begreper.txt

Se illustrasjonseksempelet nederst i oppgaven om du er i tvil om hvordan oppgaven skal besvares.

For hvert av begrepene i listen under, oppgi et linjenummer i programmet der du finner et eksempel p? begrepet. Hvert begrep er gjennomg?tt i uke 7. Hvis eksempelet g?r over flere linjer, oppgir du start- og sluttlinje.

Illustrasjonseksempel

For hvert av begrepene i listen under, oppgi et linjenummer i programmet der du finner et eksempel p? begrepet. Hvis eksempelet g?r over flere linjer, oppgir du start- og sluttlinje.

Mulige riktige svar p? sp?rsm?lene i eksempelet: