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:
- test_dato.py
- test_fotball,py
- teori.txt
- begreper.txt
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:
- Lag et nytt Dato-objekt som representerer 15. mars 2026.
- Hvis dagen er lik 15, skriv ut "L?nningsdag!"
- Ellers, hvis dagen er lik 1, skriv ut "Ny m?ned, nye muligheter"
- Skriv ut dato-objektet, endre til neste dag, og skriv ut dato-objektet igjen
- La brukeren selv skrive inn en tekststreng p? formatet "dd.mm.????" (d = dag, m = m?ned, ? = ?r) og endre dato-objektet til ? representere denne datoen. Skriv ut dato-objektet enda en gang etterp?
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:
- ddmm???? (str), en tekststreng p? formatet dd.mm.???? (d = dag, m = m?ned, ? = ?r) - for eksempel "01.01.2026"
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:
- Lag et nytt Sesong-objekt
- La objektet lese inn informasjon om alle lagene fra den vedlagte filen eliteserien_2026.txt
- Hent ut f?rste runde (nummer 1) fra Sesong-objeket (finnes ikke fra f?r, s? dette opprettes)
- Legg til f?lgende 8 kamper i Runde-objektet (det f?rste av de to lagene er hjemmelaget):
- HamKam - Viking
- Molde - Rosenborg
- Kristiansund - Brann
- KFUM Oslo - Start
- Sarpsborg 08 - Bod?/Glimt
- V?lerenga - Sandefjord
- Aalesund - Lillestr?m
- Troms? - Fredrikstad
- G? gjennom alle kampene i denne runden (Runde-objektet) med en for-l?kke
- For hver kamp (hvert Kamp-objekt), spill kampen og skriv ut kampen (med resultat) etterp?
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:
- sesong (Sesong): Et Sesong-objekt som runden tilh?rer
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:
- hjemme (Lag): Laget som har hjemmebane i kampen
- borte (Lag): Laget som har bortebane i kampen
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:
- navn (str): Lagets navn
- elo (int): Lagets elo-rating (h?yere tall = bedre lag). Ofte et tall mellom 1000 og 2000.
- m?l (float): Hvor mange m?l dette laget scorer i gjennomsnitt per kamp
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):
- Hva er innkapsling? Hvorfor er det nyttig?
- Hva er grensesnittet til en klasse? Hvordan skiller det seg fra implementasjonen av en klasse?
- 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.
- A. Opprettelse av nytt objekt
- B. Kall p? instansmetode
- C. Argumenter

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.
- A. variabeldeklarasjon
- B. utskriftsetning
- C. innlesing fra terminal
- D. beslutning med flere alternativer

Mulige riktige svar p? sp?rsm?lene i eksempelet:
- A. linje 1
- B. linje 3
- C. linje 1
- D. linje 2-5