Du er ikke logget inn. Så lenge du ikke er logget inn går du glipp av muligheten for å holde styr på din egen progresjon.

Filtrering:

0.00: Informasjon

Oppgavene på denne siden tilhører kurset INF1001, som gikk for siste gang høsten 2016. Ser du etter oppgavene til IN1000, kan du trykke her.

1.01: Velkommen til INF1001

Filnavn: velkommen.py

Kopier koden nedefor til en fil du kaller velkommen.py på din datamaskin.
Naviger deg til riktig mappe i terminalen og kjør programmet

print("Velkommen til INF1001")

Hint: For å navigere i mapper i terminalen, bruk kommandoen "cd". Kjør programmet med "python3 ".

1.02: Mitt program

Filnavn: mitt_program.py

Skriv et program som skriver "Dette er mitt program" i terminalen

print("Dette er mitt program")

1.03: Personinformasjon

Filnavn: person.py

  1. Skriv ditt navn, tlf og adresse til terminal på samme linje
  2. Skriv ditt navn, tlf og adresse til terminal på hver sin linje
# 1
print("Ola Nordmann 81549300 Gategaten 21")

# 2
print("Ola Nordmann\n81549300\nGategaten 21")
# eller
print("Ola Nordmann")
print("81549300")
print("Gategaten 21")

1.04: Tilordning og utskrift

Filnavn: hei_verden.py

a) Skriv et program som skriver "Hei Verden!" til terminalen.
b) Utvid programmet med en heltallsvariabel alder som har verdien 4.
c) Skriv ut "Alder: " og verdien av alder til terminalen.
d) Legg inn følgende kommentar i programmet: "Nå endrer vi verdien av variabelen alder :".
e) Endre verdien i variabelen alder til din egen alder. Skriv ut en ny linje til terminalen med en passende tekst og den nye verdien til alder.
f) kjør programmet ditt.

print("Hei Verden!")
alder = 4
print("Alder: ", alder)
# Nå endrer i verdien av variabelen alder: 
alder = 400
print("Min alder er:", alder)
python3 Hei_verden.py

1.05: Utskrift i pyramideform

Filnavn: stjerner.py

Lag et Python-program som skriver ut tre linjer med stjerner "*" slik at det ser ut som en pyramide på skjermen. Kjør programmet og gjør endringer inntil du ser at programmet fungerer slik det skal.

1.06: SumHeltall

Filnavn: sum_heltall.py

Lag to heltallsvariabler og kall dem a og b. Lagre verdiene 4 og 5 i variablene. Skriv ut summen av tallene.

a = 4
b = 5
print("Summen er:", a+b)

1.07: Areal av rektangel

Lag to variabler, en for bredde og en for høyde. Bestem selv verdiene. Skriv ut verdiene til terminalen. Lag en tredje variabel for arealet til rektangelet med verdi bredde ganger høyde. Skriv ut arealet til terminalen.

bredde = 10
hoyde = 20
print("Bredde:", bredde)
print("Høyde:", hoyde)

areal = bredde * hoyde
print("Areal:", areal)

1.08: Utskrift med formatering

  1. Les om formattering av utskrift i læreboka s. 54-57 eller i Python-dokumentasjonen (https://docs.python.org/3/tutorial/inputoutput.html).
  2. Skriv et program hvor du definerer to flyttallsvariabler: lengde og bredde. Gi disse variabelen verdiene 10.101 og 3.843.
  3. Skriv ut følgende setning ved å bruke formatering av utskrift og de to variablene:
Rektangelet er 10.1 cm langt og 3.8 cm bredt.

1.09: Utskrift av sirkelberegning

  1. Les om formattering av utskrift på side 54-57 i læreboken (Python for Everyone) eller i Python-dokumentasjonen (https://docs.python.org/3/tutorial/inputoutput.html).
  2. Skriv et program som inneholder en variabel radius som er et flyttall.
  3. Beregn så diameter, areal og omkrets av sirkelen i tre nye variabler.
  4. Skriv ut disse verdiene, men vis kun 2 desimaler. Sørg også for at tallene blir plassert like langt til høyre. Se under for eksempel på utskrift:
Diameter:    12.00
Areal:      113.10
Omkrets:     37.70

10.01: Lite person-system

Lag et program som leser inn kommandoer fra terminalen.
Vi skal ha følgende kommando-muligheter:

  1. Ny person: En funksjon hvor vi leser inn navnet og alderen til en person og lagrer dette i en liste. Skal kun sette inn personen hvis personen ikke allerede er lagret i listen.
  2. Alle: Skriver ut personene (med navn og alder) som vi har lest inn fra terminalen.
  3. Slett: Sletter alle personene vi har lest inn.
class Person:
    def __init__(self, navn, alder):
        self._navn = navn
        self._alder = alder

    def hent_alder(self):
        return self._alder

    def hent_navn(self):
        return self._navn


class Admin:
    def __init__(self):
        self._personer = []

    def sett_inn(self):
        navn = input("Oppgi navn: ")
        alder = input("Oppgi alder: ")
        finnes = False
        for p in self._personer:
            if p.hent_navn() == navn:
                finnes = True
                print(navn, "finnes fra før i listen!")
        if not finnes:
            self._personer.append(Person(navn, alder))

    def print_alle(self):
        if len(self._personer) == 0 : 
            print("Ingen personer i listen")
            return

        print("***")
        print("Alle personer:")
        for p in self._personer :
            print(p.hent_navn(), "-", p.hent_alder(), "år")
        print("***")

    def slett(self):
        self._personer = []
        print("Alle personer slettet.")

    def kommandolokke(self):
        while True :
            print("Oppgi kommando nr:")
            print("1. Sett inn ny person")
            print("2. Vis alle personer")
            print("3. Slett alle personer")
            print("4. Avslutt")

            inp = input("Valg: ")
            if inp == "1" :
                self.sett_inn()
            elif inp == "2":
                self.print_alle()
            elif inp == "3":
                self.slett()
            elif inp == "4":
                return
            else:
                print("Ugyldig valg")

a = Admin()
a.kommandoløkke()

10.02: Personer og biler

Vi skal lage et program for å holde styr på hvilke biler en person eier og hvilke biler en person har lånt av andre personer.

En forenklet person er representert slik (her må du legge til de andre variablene og de funksjonene du mener at du trenger):

class Person: 
    def __init__(self, navn):
        self._mine_biler = []
        self._lånte_biler = []
        self._navn = navn
    # Flere variable og nytte funksjoner?

a) Lag klassen Bil som inneholder farge og merke på bilen.

b) Lag en metode for at en person skal kunne låne en bil (du velger selv hvilken) fra en annen person. Hint: Her er det viktig at bilen ikke finnes hos både den første personen og den andre personen samtidig.

10.03: Motsatt rekkefølge

Lag et program som leser inn en fil og skriver innholdet til fil i motsatt rekkefølge slik at første ordet kommer sist i filen.

10.04: Universitet og student

Gitt følgende forenklede UML-diagram

Skriv et program som svarer til diagrammet.

  • System skal inneholde en dictionary med alle Universiteter, der universitetene er identifisert ved sitt navn.
  • System skal inneholde en funksjon som skriver ut navnet på alle universiteter som er tilknyttet.
  • Universitet skal inneholde en dictionary der alle studenter skal være identifisert ved sine navn.
  • Universitetklassen skal inneholde en funksjon for å skrive ut informasjon om alle sine studenter.
  • Studentklassen skal inneholde data om navn, fødselsnummer og studieprogram.

Skriv til slutt kode som oppretter et System. Legg til UiO og UiB i systemet, og lag noen studenter tilknyttet hvert universitet.

Utfordring: Skriv en funksjon i Universitet som skriver ut informasjon om studenter tilknyttet ett bestemt program. Eksempel på kall:

system.hent_universitet("UiO").print_program_stud("Informatikk")

10.05: Stigende eller synkende rekkefølge

Filnavn: rekkefolge.py

a) Lag et program som leser inn tre tall fra brukeren.

b) Sjekk om tallene er sortert i stigende rekkefølge, synkende rekkefølge eller ingen rekkefølge. Avhengig av dette skal programmet printe "Stigende", "Synkende" eller "Ingen".

Eksempel på kjøring av programmet:

> python3 rekkefolge.py
Skriv inn tre tall: 
> 1
> 2
> 3
Stigende

> python3 rekkefolge.py
Skriv inn tre tall: 
> 3
> 2
> 4
Ingen 
tall = []
for i in range(3):
    tall.append(int(input("Skriv inn et heltall: ")))

if tall[1] > tall[0] and tall[2] > tall[1]:
    print("Stigende")
elif tall[0] > tall[1] and tall[1] > tall[2]:
    print("Synkende")
else:
    print("Ingen")

10.06: Finne største tall og reversere liste.

Filnavn: listelek.py

a) Lag en liste og sett inn 5 tall ved hjelp av brukerinput.

b) Lage en funksjon storste_tall som tar i mot en liste og som finner det største tallet i listen. Vi antar at alle tallene er positive. Kall funksjonen med listen fra oppgave a) som parameter, ta vare på returverdien i en variabel, og skriv ut denne verdien til terminalen. Forsøk å gjøre dette uten å bruke funksjonen max.

c) Lag en funksjon reverser_liste som tar i mot en liste og som flytter alle elementene over i en annen liste, men i motsatt rekkefølge. Funksjonen skal returnere den nye listen. Print ut elementene i den nye listen til terminalen. Forsøk å gjøre dette uten å bruke funksjonen reversed.

d) Endre programmet ditt så du leser inn fra en fil med fem heltall i stedet for fra brukeren. Du kan kalle filen "listelek.txt".

Løsningsforslag for a, b og c.

def storste_tall(liste):
    storste = 0
    for i in liste:
        if i > storste:
            storste = i
    return storste

def reverser_liste(liste):
    reversert = []
    for i in range(len(liste) - 1, -1, -1):
        reversert.append(liste[i])
    return reversert

liste = []
for _ in range(5):
    liste.append(int(input("Skriv inn et heltall: ")))

print(storste_tall(liste))
print(reverser_liste(liste))

10.07: Telle vokaler.

Filnavn: vokaler.py

a) Lag et program som leser inn et ord fra brukeren.

b) Lag en liste vokaler som inneholder alle vokalene vokalene.

c) Bruk deretter for-løkker til å gå gjennom ordet du leste inn fra brukeren og som teller hvor mange vokaler det er i ordet. Skriv ut resultatet til terminalen.

Hint: Her må du bruke to for-løkker. Prøv å få programmet til å fungere for store og små bokstaver.

Eksempel på kjøring:

> python3 vokaler.py
Skriv inn et ord: Informatikk
Antall vokaler er 4.
vokaler = ["a", "e", "i", "o", "u", "y", "æ", "ø", "å"]

ordet = input("Skriv inn et ord: ")

antall = 0
for c in ordet.lower():
    for v in vokaler:
        if c == v:
            antall += 1
            break

print("Antall vokaler er", antall)

10.08: Prinsessa og erten.

Filnavn: prinsessa_og_erten.py

a) Lag et program som leser inn filen "princessandthepea.txt" til en liste. Det er kun ett ord per linje.

b) Lag en funksjon antall_fire_tegn som sjekker lengden på hvert ord og returnerer hvor mange av ordene som har lengde 4.

c) Lag en funksjon forste_bokstav som tar i mot et ord og en bokstav og sjekker om ordet started med bokstaven. Hvis det gjør det skal ordet skrives ut i terminalen. Bruk denne metoden til å finne ut hvor mange ord som begynner på "a" i filen.

Merk at vi har brukt variabelnavnet "ordet" istedenfor "ord", da "ord" er en innebygd funksjon i Python.

def antall_fire_tegn(ordliste):
    antall = 0
    for ordet in ordliste:
        if len(ordet) == 4:
            antall += 1
    return antall

def forste_bokstav(ordet, bokstav):
    if ordet[0] == bokstav:
        print(ordet)
        return True
    return False

fil = open("princessandthepea.txt", "r")
ordene = []

for linje in fil:
    ordene.append(linje.rstrip())


print("Antall ord på fire tegn:", antall_fire_tegn(ordene))

antall = 0
for ordet in ordene:
    if forste_bokstav(ordet, "a"):
        antall += 1

print("Antall ord som starter på a", antall)

10.09: Ordreløkke.

Filnavn: min_ordrelokke.py

a) Lag en funksjon print_sum som leser inn to tall fra brukeren og printer summen av dem til terminalen.

b) Lag en funksjon print_hei som leser inn et navn fra brukeren og printer "Hei, " til terminalen.

c) Skriv kode som gjør at programmet ditt leser inn tall fra brukeren helt til brukeren taster 0. For hver gang brukeren har skrevet inn et tall skal brukeren taste enter. Hint: bruk input i en while-løkke!

d) Sjekk nå hvilket tall brukeren taster inn. Hvis tallet er 1 skal programmet kalle funksjonen print_sum og hvis tallet er 2 skal programmet kalle funksjonen print_hei. Dersom det er et annet tall skal programmet gi en egenlaget feilmelding.

e) Lag en funksjon print_meny som printer menyen til brukeren. Kall denne funksjonen før hver gang brukeren skal taste inn et tall.

Eksempelkjøring av programmet (brukeren har valgt menyvalg 1 og deretter 0):

> python3 min_ordrelokke.py
*******MENY*******
0. Avslutt
1. Print summen av to tall
2. Print velkomsthilsen
Tast valg: 1
Skriv inn et tall: 2
Skriv inn et tall til: 4
Summen av tallene er 6
*******MENY******* 
0. Avslutt
1. Print summen av to tall
2. Print velkomst hilsen
Tast valg: 0
def print_sum():
    tall1 = int(input("Skriv inn et tall: "))
    tall2 = int(input("Skriv inn et tall til: "))
    print("Summen av tallene er:", tall1+tall2)

def print_hei():
    navn = input("Skriv inn navnet ditt: ")
    print("Hei,", navn)

def print_meny():
    print("*******MENY*******")
    print("0. Avslutt")
    print("1. Print summen av to tall")
    print("2. Print velkomsthilsen")

while True:
    print_meny()
    tall = int(input("Tast valg: "))

    if tall == 0:
        break
    elif tall == 1:
        print_sum()
    elif tall == 2:
        print_hei()

10.10: Sende brev

Fil: brev.py

a) Lag en klasse Brev med en konstruktør som tar inn avsender og mottaker. Konstruktøren skal lage tre instansvariabler: avsender, mottaker og en tom liste.

b) Lag en metode i klassen som heter skriv_linje som tar i mot en tekststreng og lagrer den i listen vi laget som en instansvariabel.

c) Lag metoden les_brev som printer ut brevets innhold, samt hilsen. Brevet skal være på formen gitt nedenfor.

d) Opprett et Brev-objekt. Legg til mottaker, avsender og minst to linjer tekst i objektet ved hjelp av skriv_linje-metoden. Kall deretter på les_brev-metoden som printer ut resultatet til terminalen.

Formen på brevet som skal leveres:
Hei, !

første linje i brevet
andre linje i brevet
....

Hilsen fra

Eksempel på hvordan kjøring av programmet kan se ut:

Hei, Espen Askeladd!

Hvordan har du det?
Jeg har det bare bra!

Hilsen fra
Per Askeladd
class Brev:
    def __init__(self, avsender, mottaker):
        self._avsender = avsender
        self._mottaker = mottaker
        self._linjer = []

    def skriv_linje(self, linje):
        self._linjer.append(linje)

    def les_brev(self):
        print("Hei,", self._mottaker)
        print()
        for linje in self._linjer:
            print(linje)
        print()
        print("Hilsen fra,")
        print(self._avsender)

brevet = Brev("Per Askeladd", "Espen Askeladd")
brevet.skriv_linje("Hvordan har du det?")
brevet.skriv_linje("Jeg har det bare bra!")
brevet.les_brev()