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:

01.11 Sjekke input

Filnavn: favorittfarge.py

a) Skriv et program som ber brukeren om å skrive inn favorittfargen sin i terminalen og lagre svaret i en variabel farge.

b) Utvid programmet slik at hvis brukeren svarer "gul", "oransje" eller "grønn", skal programmet skrive ut navnet på en frukt som har den fargen.

Visualisering av kodeflyt: PythonTutor

farge = input("Hva er din favorittfarge? ")

if farge == "gul":
   print("Gul, som en banan!") 
elif farge == "oransje":
   print("Oransje, som en appelsin!") 
elif farge == "grønn":
   print("Grønn, som et eple!") 

NB: Merk her at vi ikke må ha en else-setning. Hvis fargen er ukjent, så skjer det ingenting.

01.13 Flere beslutninger

I denne oppgaven skal du finne ut hvorvidt tekststrengen "IN1000" skrives ut til terminalen eller ikke. Oppgavene består av kodesnutter, og du må se på if-setningene for å finne ut hva som kommer til å skje.

Prøv å løse oppgavene uten å kjøre kodesnuttene først!

Skrives "IN1000" ut til terminalen?

a)

a = 6

if 6 == a:
    print("IN1000")

b)

a = 5
b = 6

if a > b:
    print("IN1000")

c)

a = 5 + 2
b = 6

if a <= b:
    print("IN1000")

d)

a = 6
b = a

if a >= b:
    print("IN1000")

e)

a = 6 + 1

if a == a:
    print("ingenting")
else:
    print("IN1000")

a) Ja

b) Nei, fordi 5 er ikke større enn 6

c) Nei, fordi 5 + 2 ikke er mindre enn eller lik 6

d) Ja

e) Nei, fordi a == a alltid er sant, og derfor blir else-setningen aldri kjørt.

01.16 Enda flere beslutninger

I denne oppgaven skal du finne ut hvorvidt tekststrengen "IN1000" skrives ut til terminalen eller ikke. Oppgavene består av kodesnutter, og du må se på if-setningene for å finne ut hva som kommer til å skje.

Prøv å løse oppgavene uten å kjøre kodesnuttene først!

Skrives "IN1000" ut til terminalen?

a)

a = 6
b = 5

if a + b > 11:
    print("IN1000")

b)

if 1 == 1 and 2 > 3:
    print("IN1000")

c)

if 1 < 2 or 2 < 1:
    print("IN1000")

d)

if 3 < 2:
    print("IN1000")
elif 4 + 2 == 6:
    print("IN1000")
else:
    print("ingenting")

e)

a = "b"
b = 3

if 1 == 2:
    if "a" == a:
        print("IN1000")
    else:
        print("ingenting")
else:
    if 1 > 2 or 1 < 2:
        if b >= 3:
            print("IN1000")
        else:
            print("ingenting")
    else:
        print("ingenting")

a) Nei, fordi 6 + 5 er ikke større enn 11.

b) Nei, fordi 2 er ikke større enn 3 og begge sider av et and-uttrykk må være sanne for at hele uttrykket er sant.

c) Ja, fordi 1 er mindre enn 2 og or-uttrykk krever bare et sant uttrykk for at hele uttrykket er sant.

d) Ja, fordi 3 er ikke mindre enn 2, men 4 + 2 er lik 6.

e) Ja, fordi 1 er ikke lik 2, uttrykket "1 > 2 or 1 < 2" er sant (se deloppgave c) og b er større eller lik 3.

02.06: Differansen mellom to heltall

Filnavn: differanse.py

Lag en prosedyre som ber om og leser inn to heltall. Prosedyren skal deretter regne ut differansen mellom de to tallene og skrive ut svaret. Kjør programmet for å sjekke at alt fungerer som det skal.

Her er et eksempel på hvordan en kjøring av programmet kan se ut:

Oppgi verdien til x: 
> 25
Oppgi verdien til y: 
> 19
Differansen mellom x og y er 6.

Du behøver ikke tenke på at det første tallet kan være mindre enn det andre. Det er ikke nødvendig å regne ut absoluttverdien av differansen (men prøv gjerne å finne ut hvordan det gjøres, dersom du ønsker en ekstra utfordring).

def differanse():
    inp = input("Oppgi verdien til x:\n> ")
    x = int(inp)

    inp = input("Oppgi verdien til y:\n> ")
    y = int(inp)

    print("Differansen mellom x og y er", x - y)

differanse()    # Husk å kalle prosedyren!

02.08: Kroppstemperatur

Filnavn: kroppstemperatur.py

Hos friske mennesker varierer kroppstemperaturen vanligvis mellom 36.5 og 37.5 grader. Lag et program som avgjør om en persons kroppstemperatur ligger henholdsvis under, innenfor eller over normal kroppstemperatur og skriver ut en passende melding. Programmet skal lese kroppstemperaturen fra terminal.

Hint

Her må du lese inn et flyttall fra terminalen! Bruke den riktige funksjonen for å konvertere en streng til et flyttall.


inp = input("Oppgi kroppstemperatur:\n> ")
temp = float(inp)

if temp < 36.5 : 
    print("Du har lavere kroppstemperatur enn normalen")
elif temp > 37.5 :
    print("Du har høyere kroppstemperatur enn normalen")
else:
    print("Du har normal kroppstemperatur")

02.10: Forenkle sannhetsverdier

Du skal nå forenkle noen sannhetsverdier.
For eksempel kan sannhetsverdien not True forenkles til False.

Skriv uttrykk som er kortere, og logisk sett ekvivalente:

Prøv å løse oppgavene uten å kjøre kodesnuttene først!

a)

b == True

b)

b == False

c)

not b == True

d)

not b == False

e)

True and False

f)

b or True

g)

b and False

a) b

b) not b

c) not b

d) b (not og False nuller hverandre ut)

e) False

f) True (det er bare sannhetsverdien av b som spiller en rolle)

g) False (noe og False er alltid False)

02.14 Kodeflyt igjen

Dette er en penn- og papiroppgave

Forklar i hvilken rekkefølge de forskjellige linjene utføres når vi kjører programmet, ved å skrive tall foran linjene i programmet.
Hvis en linje kjøres flere ganger (for eksempel ved flere kall på samme funksjon) kan du skrive flere tall ved siden av setningen.

def kvadrat():
    tall = input("Tall: ")
    tall = int(tall)

    print(tall, "*", tall, "=", tall * tall)

a = True 
b = False

if a:
    kvadrat()

if b:
    kvadrat()

print("En gang til:")
kvadrat()

Visualisering med Python Tutor

5,12| def kvadrat():
6,13|     tall = input("Tall: ")
7,14|     tall = int(tall)
    |     
8,15|     print(tall, "*", tall, "=", tall * tall)
    | 
   1| a = True 
   2| b = False
    | 
   3| if a:
   4|     kvadrat()
    | 
   9| if b:
    |     kvadrat()
    | 
  10| print("En gang til:")
  11| kvadrat()

NB: Merk at programmet egentlig leser inn def kvadrat() først slik at når prosedyren er kalt, vet programmet hvilket linje å hoppe tilbake til. Derfor ville det også vært riktig å skrive '1' ved den første linjen. Det viktigste med oppgaven er å vise at du har forstått hvordan og hvor koden flyter inn i prosedyren.

02.15: Feil i små program

Finn fire feil i programmet under.

Prøv å løse oppgavene uten å kjøre kodesnutt først (og så kan du prøve å kjøre/fikse koden)

1 | tall = input(Tast inn et siffer: )
2 | dobbelt = 2 * tall
3 | print("Det dobbelte er" dobbel)
  1. Linje 1: Vi mangler anførselstegn rundt tekststrengen vi gir input.
  2. Linje 2: Vi har ikke gjort om tekststrengen vi får av input til et tall og får tekststrengen to ganger.
  3. Linje 3: Vi har glemt komma etter tekststrengen vi gir til print.
  4. Linje 3: Vi har skrevet dobbel istedenfor dobbelt.

02.21: Kodeflyt med prosedyrer

Dette er en penn- og papiroppgave

Forklar i hvilken rekkefølge de forskjellige linjene utføres når vi kjører programmet, ved å skrive tall foran linjene i programmet.
Hvis en linje kjøres flere ganger (f.eks. ved flere kall på samme prosedyre) kan du skrive flere tall ved siden av linjen.

def prosedyre_a():
    navn = input("Navn: ")
    print("Hei,", navn)

def prosedyre_b():
    alder = int(input("Alder: "))
    print("Om ti år er din alder", alder)

def start():
    a = 5
    b = 5

    if a > b:
        b = 10
    elif b > a:
        prosedyre_a()
    else:
        prosedyre_b()

    print(a + b)

start()
prosedyre_a()

PythonTutor

14|def prosedyre_a():
15|    navn = input("Navn: ")
16|    print("Hei,", navn)
  |
 9|def prosedyre_b():
10|    alder = int(input("Alder: "))
11|    print("Om ti år er din alder", alder)
  |
 2|def start():
 3|    a = 5
 4|    b = 5
  |    
 5|    if a > b:
  |        b = 10
 6|    elif b > a:
  |        prosedyre_a()
 7|    else:
 8|        prosedyre_b()
  |    
12|    print(a + b)
  |
 1|start()
13|prosedyre_a()

NB: Merk at programmet egentlig leser inn definisjonene av prosedyrene først slik at når en prosedyre er kalt, vet programmet hvilket linje å hoppe tilbake til. Derfor ville det også vært riktig å skrive '1' ved def prosedyre_a():, '2' ved def prosedyre_b():, og '3' ved def start():. Det viktigste med oppgaven er å vise at du har forstått hvordan og hvor koden flyter inn i prosedyren.

02.24: Feil som ikke gir feilmelding

Hva er feilen i følgende programkode som skal summere to tall?

x = 0
y = 0

x = int(input("Tast inn et heltall: "))
x = int(input("Tast inn et heltall til: "))

print("Summen av tallene er:", x+y)

Vi lagrer til variabelen x begge ganger vi leser inn fra brukeren og vi leser aldri inn en verdi til variabelen y! Derfor blir verdien til x det andre tallet og verdien til y blir 0. Dette kalles en logisk feil, og vil ikke gi noen feilmelding.

03.04 Fakta om land

I denne øvelsen skal vi lagre flere fakta om land. For hvert land lagrer vi navnet på hovedstaden, språket og antall innbyggere. Du kan velge dine egne land, men noen eksempler er gitt her:

  • Norge, Oslo, norsk, 5391369
  • Nederland, Amsterdam, nederlandsk, 17282163
  • Spania, Madrid, spansk, 46733038

a) Lag tre ordbøker. Navnene på landene bør være nøklene i alle ordbøker. I den første ordboken er hovedstadene verdiene. I den andre ordboken er språk verdiene. Og i den tredje ordboken er antall innbyggere verdiene.

b) Be brukeren om et land, og skriv ut fakta om landet som finnes i de tre ordbøkene. Skriv ut en advarsel hvis landet ikke vises i ordbøkene

c) Utfordring: Tenk på en annen mulig måte at dataene i denne øvelsen kan lagres på, og prøv å implementere denne løsningen også. Flere svar kan være riktige.

Hint

  Du kan nøste samlinger, dvs. sette en samling i en annen.


a)

hovedstad = {"Norge": "Oslo", 
             "Nederland": "Amsterdam", 
             "Spania": "Madrid"}
spraak = {"Norge": "norsk", 
          "Nederland": "nederlandsk", 
          "Spania": "spansk"}
innbyggere = {"Norge": 5391369, 
              "Nederland": 17282163, 
              "Spania": 46733038}

b)

land = input("Gi navnet på et land: ")

# Anta at alle land i ordboken 'hovedstad' også er i de andre ordbøker
if land in hovedstad:
    print("Hovedstaden til", land, "er", hovedstad[land])
    print("I", land, "snakker folk", spraak[land])
    print(land, "har", innbyggere[land],  "innbyggere")
else:
    print("Jeg kjenner ikke dette landet!")

c) Flere svar kan være riktige.

Man kan ha en nøstet ordbok der den ytre ordboken representerer landene:

fakta = {"Norge": {
            "hovedstad": "Oslo",
            "spraak": "Norsk",
            "innbyggere": 5391369},
        "Nederland": {
            "hovedstad": "Amsterdam",
            "spraak": "Nederlandsk",
            "innbyggere": 17282163},
        "Spania": {
            "hovedstad": "Madrid",
            "spraak": "Spansk",
            "innbyggere": 46733038},
        }

land = input("Gi navnet på et land: ")

if land in fakta:
    print("Hovedstaden til", land, "er", fakta[land]["hovedstad"])
    print("I", land, "snakker folk", fakta[land]["spraak"])
    print(land, "har", fakta[land]["innbyggere"],  "innbyggere")
else:
    print("Jeg kjenner ikke dette landet!")

03.07: Enkel telefonbok

Filnavn: telefonbok.py

I denne oppgaven skal du lage en enkel telefonbok, der bruker kan skrive inn navnet til en person for å hente ut telefonnummeret.

a) Opprett en ordbok kalt telefonbok.

b) Fyll ordboken med følgende nøkkel-verdi par der navnet er nøkkelen og telefonnummeret er verdien:

Navn: "Arne"     Telefonnummeret: 22334455 
Navn: "Lisa"     Telefonnummeret: 95959595 
Navn: "Jonas"    Telefonnummeret: 97959795 
Navn: "Peder"    Telefonnummeret: 12345678 

c) La brukeren skrive inn et navn og skriv ut telefonnummeret som hører til dette navnet om det finnes i ordboken.

d) Hvis brukeren skriver inn et navn som ikke eksisterer i ordboken, be om telefonnummeret til denne personen og legg det til i ordbøken.

a - b)

telefonbok = {"Arne": 22334455, 
              "Lisa": 95959595, 
              "Jonas": 97959795, 
              "Peder": 12345678}

c - d)

navn = input("Skriv inn et navn: ")
if navn in telefonbok:  # b
    nummer = telefonbok[navn]
    print("Telefonnummeret til", navn, "er", nummer)
else:    # c
    nummer = input("Hva er telefonnummeret til " + navn + "?")
    nummer = int(nummer)
    telefonbok[navn] = nummer

03.11 Hva slags samling?

Hvilken type samling bør du bruke for å representere følgende objekter? Velg en samling (liste, mengde, ordbøk) og typen elementer inne (string, heltall, flyttall). Forklar ditt valg. Flere svar kan være riktige.

a) Ordene i en setning
b) De latinske navnene på alle forskjellige spiselige soppene i Norge
c) Navnene på alle klassekameratene dine, i alfabetisk rekkefølge
d) Hvilket måltid du skal spise for hver dag i uken
e) Telle hvor mange fugler du ser av hver art i hagen din
f) Alle primtall under 1000

a) Ordene i en setning

  • en liste med stringer fordi rekkefølgen er viktig og et ord kan forekomme flere ganger i en setning

b) De latinske navnene på alle forskjellige spiselige soppene i Norge

  • en mengde med stringer fordi vi ikke vil ha duplikater og rekkefølgen er ikke viktig

c) Navnene på alle klassekameratene dine, i alfabetisk rekkefølge

  • en liste med stringer fordi rekkefølgen er viktig og et navn kan vises flere ganger

d) Hvilket måltid du skal spise for hver dag i uken

  • en ordbok med hverdager som nøkkel (string eller heltall) og måltid som verdi (string) fordi vi har en nøkkel:par relasjon
  • en liste med strenger der posisjon 0 er mandag, 1 er tirsdag osv. fordi det er en ordnet liste med måltider så kan vi anta at den første dagen i uken tilsvarer det første elementet i listen

e) Teller hvor mange fugler du ser av hver art i hagen din

  • en ordbok med fuglearter som nøkler og antall som verdi fordi vi har en nøkkel:par relasjon

f) Alle primtall under 1000

  • en mengde med heltall fordi rekkefølgen ikke er viktig og vi vil ikke tillate duplikater.

03.13: Ordbok med flaggfarger

Filnavn: flaggfarger.py

Denne ordboken har navn på land som nøklene og fargene på flagget til landene som verdiene. Kopier den til pythonfilen flaggfarger.py

flaggOrdbok = {"norge" : ["rødt", "hvitt", "blått"], 
               "sverige" : ["blått", "gult"],
               "danmark" : ["rødt", "hvitt"],
               "finland" : ["hvitt", "blått"],
               "japan" : ["rødt", "hvitt"],
               "gabon" : ["grønt", "gult", "blått"],
               "storbritannia" : ["rødt", "blått", "hvitt"],
               "chile" : ["blått", "hvitt", "rødt"]}

OBS! Merk at vi kan skrive ordbøker og lister over flere linjer, så lenge vi passer på komma og avsluttende "]" eller "}", som i flaggOrdbok over.

a) Skriv ut hele flaggOrdbok.

b) Legg til et nytt land og flagget sine farger i ordboken.

c) Skriv en prosedyre som ber om et land som input, og skriver ut fargene på landets flagg.

Bonus: prosedyren bør være ufølsom for store og små bokstaver (e.g., brukeren kan skrive "norge", "Norge", "NORGE", etc)

d) Utvid prosedyren fra c) slik at den tar også inn en farge som input og skriver ut en melding som sier om fargen forekommer i landets flagg.

Gitt at flaggOrdbok er definert i filen:

a)

print(flaggOrdbok)

b)

flaggOrdbok["kanada"] = ["rødt", "hvitt"]

c)

def flaggFargeProsedyreC():
    land = input("Skriv inn navnet til et land: ")
    land = land.lower() # .lower() gjør om til små bokstaver. 

    if land in flaggOrdbok:
        print(flaggOrdbok[land])
    else:
        print("Landet", land, "er ikke registrert i ordboken.")

d)

def flaggFargeProsedyreD():
    land = input("Skriv inn navnet til et land: ")
    land = land.lower() # .lower() gjør om til små bokstaver. 

    if land in flaggOrdbok:
        farge = input("Skriv inn et farge: ")
        farge = farge.lower() 

        if farge in flaggOrdbok[land]:
            print(farge, "forekommer i flaggen av", land)
        else:
            print(farge, "forekommer ikke i flaggen av", land)
    else:
        print("Landet", land, "er ikke registrert i ordboken.")

Husk å kalle prosedyrene for å kjøre dem!

flaggFargeProsedyre3()
flaggFargeProsedyre4()

04.03: Minst og størst

a) Opprett en liste som inneholder følgende heltallsverdier:

6, -4, 7, -2, 8, -3, 9, -11.

b) Bruk en for-løkke til å iterere over alle verdiene i listen og finn den minste verdien. Skriv ut den minste verdien. Gjør dette uten å bruke Python sin innebygde min()-funksjon.

c) Bruk en ny for-løkke tilsvarende oppgave b, men finn og skriv ut den største verdien. Gjør dette uten å bruke Python sin innebygde max()-funksjon.

Hint

Opprett en til variabel for å holde styr på den minste/største verdien.


a)

tall = [6, -4, 7, -2, 8, -3, 9, -11]

b)

minst = tall[0]
for element in tall:
    if element < minst:
        minst = element

print(minst)

c) Her kan vi enten gjøre det likt som i oppgave b), men endre '<' til '>' (og helst variabelnavnet minst til stoerst) eller så kan vi bruke range():

stoerst = tall[0]

# Vi trenger ikke se på tall[0] igjen, så vi teller fra tall[1]
for i in range(1, len(tall)):
    if tall[i] > stoerst:
        stoerst = tall[i]

print(stoerst)

NB: Denne løsningen kan du også bruke for å løse oppgave b).

04.11: Kvadratet av alle tallene i en liste

a) Opprett en liste med tallene 1, 2, 3, 4 og 5.

b) Finn kvadratet av hvert tall, og sett det inn på dets tidligere plass i listen.

NB: Kvadratet av 2 finner du ved å gange 2 * 2 = 4.

a)

liste = [1, 2, 3, 4, 5]

b)

teller = 0
while teller < len(liste) :
    liste[teller] = liste[teller] * liste[teller]
    teller+=1
print(liste)

eller

for i in range(len(liste)):
    liste[i] = liste[i] ** 2
print(liste)

04.13: Tall-liste med løkker

a) Lag et program med en while-løkke som ber bruker om å taste inn fem tall og lagrer disse som heltall i en liste kalt tall. Pass på at du lagrer den riktige datatypen.

b) Utvid programmet slik at det regner ut summen av tallene ved hjelp av en annen løkke. Skriv så ut resultatet.

c) Skriv ut alle verdiene i listen som er mindre enn 10.

d) Skriv ut en beskjed om verdien 5 finnes i listen ved hjelp av en while-løkke.

e) Flytt koden fra b), c) og d) til hver sin prosedyre, som alle tar inn tall-listen som parameter. Kall hver prosedyre til slutt.

BONUS: Skriv om oppgaven med for-løkker istedenfor while-løkker.

a)

tall = []
teller = 0
while teller < 5:
    inp_str = input("Oppgi et tall: ")
    inp_tall = int(inp_str)
    tall.append(inp_tall)
    teller += 1

ELLER:

tall = []
teller = 0
while teller < 5:
    inp = int(input("Oppgi et tall: "))
    tall.append(inp)
    teller += 1

b)

teller = 0
total = 0
while teller < len(tall): 
    total += tall[teller]
    teller += 1
print("Sum av tallene i listen:", total)

c)

teller = 0
print("Tall under 10:")
while teller < len(tall):
    if tall[teller] < 10:
        print(tall[teller])
    teller += 1

d)

finnes_fem = False
teller = 0
while teller < len(tall):
    if tall[teller] == 5:
        finnes_fem = True
    teller += 1

if finnes_fem:
    print("Fem finnes i listen")
else:
    print("Fem finnes ikke i listen")

e)

def oppgave_b(tall)
    teller = 0
    total  = 0
    while teller < len(tall): 
        total += tall[teller]
        teller += 1
    print("Sum av tallene i listen:", total)

def oppgave_c(tall)
    teller = 0
    print("Tall under 10:")
    while teller < len(tall):
        if tall[teller] < 10:
            print(tall[teller])
        teller += 1

def oppgave_d(tall)
    finnes_fem = False
    teller = 0
    while teller < len(tall):
        if tall[teller] == 5:
            finnes_fem = True
        teller += 1

    if finnes_fem:
        print("Fem finnes i listen")
    else:
        print("Fem finnes ikke i listen")

tall = []
teller = 0
while teller < 5:
    inp_str = input("Oppgi et tall: ")
    inp_tall = int(inp_str)
    tall.append(inp_tall)
    teller += 1

oppgave_b(tall)
oppgave_c(tall)
oppgave_d(tall)

Bonus

For-løkke med indekser
    def oppgave_b(tall):
        total = 0
        for i in range(len(tall)):
            total += tall[i]
        print("Sum av tallene i listen:", total)

    def oppgave_c(tall):
        print("Tall under 10:")
        for i in range(len(tall)):
            if tall[i] < 10:
                print(tall[i])

    def oppgave_d(tall):
        fem_finnes = False
        for i in range(len(tall)):
            if tall[i] == 5:
                fem_finnes = True

    if fem_finnes:
        print("Fem finnes i listen")
    else:
        print("Fem finnes ikke i listen")

    alle_tall = []
    for i in range(5):
        inp_str = input("Oppgi et tall: ")
        inp_tall = int(inp_str)
        alle_tall.append(inp_tall)

    oppgave_b(tall)
    oppgave_c(tall)
    oppgave_d(tall)
For-hvert-løkke
    def oppgave_b(tall):
        total = 0
        for t in tall:
            total += t
        print("Sum av tallene i listen:", total)

    def oppgave_c(tall):
        print("Tall under 10:")
        for t in tall:
            if t < 10:
                print(t)

    def oppgave_d(tall):
        fem_finnes = False
        for t in tall:
            if t == 5:
                fem_finnes = True

        if fem_finnes:
            print("Fem finnes i listen")
        else:
            print("Fem finnes ikke i listen")

    alle_tall = []
    for i in range(5):
        inp_str = input("Oppgi et tall: ")
        inp_tall = int(inp_str)
        alle_tall.append(inp_tall)

    oppgave_b(tall)
    oppgave_c(tall)
    oppgave_d(tall)

04.14: Ordbok med grønnsaksbeholdning

Du driver en grønnsaksforretning og skal lage et system for å holde styr på beholdningen og pris.

a) Lag en tom ordbok beholdning.

b) Lag en løkke som kjører så lenge brukeren ønsker å fortsette å gi input.

Hint

1. Finn ut hva slags løkke som kjører så lenge en kondisjon gjelder.
2. Velg en inputstreng som skal fortelle programmet at løkken skal avslutte.


c) Inne i løkken skal programmet be brukeren om å oppgi en grønnsak. Deretter skal brukeren oppgi en pris. Sjekk at brukeren oppgir et heltall! Hvis de oppgir gyldige verdier skal du legge til det brukeren har oppgitt i ordboken din, slik at grønnsaksstrengen blir en nøkkel og antallet blir den tilhørende verdien.

Hint

Bruk en strengmetode for å sjekke om brukeren oppgir et tall. (Dokumentasjon om strengmetoder)


d) Når brukeren er ferdig med å oppgi grønnsaker skal du bruke en for-løkke for å skrive ut beholdningen din. Skriv ut alle grønnsakene med tilhørende antall.

Her er et eksempel av hvordan det kan se ut under kjøringen:

Ønsker du å fortsette (ja/nei)?
> ja
Skriv inn en grønnsak: 
> gulrot
Hvor mye koster 'gulrot'?
> 15
Onsker du å fortsette (ja/nei)?
> nei

Beholdning:
gulrot : 15 NOK


d) Når brukeren er ferdig med å oppgi grønnsaker skal du bruke en for-løkke for å skrive ut beholdningen din. Skriv ut alle grønnsakene med tilhørende pris.

a)

beholdning = {}

b) - c)

fortsett = input("Ønsker du å fortsette (ja/nei)\n> ")
while fortsett == "ja":
    groennsak = input("Skriv inn en grønnsak:\n> ")
    pris = input("Hvor mye koster " + "'" + groennsak + "'?\n> ")
    if pris.isdigit():
        beholdning[groennsak] = int(pris)
        fortsett = input("Ønsker du å fortsette (ja/nei)\n> ")
    else:
        print("Ugyldig input: prisen må være et tall!")

d)

print("\nBeholdning:")
for gs in beholdning:
    print(gs, ":", beholdning[gs], "NOK")

Hele programmet:

beholdning = {}

fortsett = input("Ønsker du å fortsette (ja/nei)\n> ")
while fortsett == "ja":
    groennsak = input("Skriv inn en grønnsak:\n> ")
    pris = input("Hvor mye koster " + "'" + groennsak + "'?\n> ")
    if pris.isdigit():
        beholdning[groennsak] = int(pris)
        fortsett = input("Ønsker du å fortsette (ja/nei)\n> ")
    else:
        print("Ugyldig input: prisen må være et tall!")

print("\nBeholdning:")
for gs in beholdning:
    print(gs, ":", beholdning[gs], "NOK")

04.15: Binærtall

Skriv et program som leser inn et tall og skriver ut de binære siffrene i tallet. For å gjøre dette kan du ta tallet og skrive ut resultatet du får av operasjonen tall % 2, så kan du erstatte tallet med tall // 2. Altså heltallsdivisjonen av tallet delt på to.Fortsett til tallet er 0.

Hvis brukeren gir tallet 27 vil altså svaret bli:

1
1
0
1
1
i = int(input("Tast inn et tall: "))

while i != 0:
    print(i%2)
    i = i//2

05.07 Maks ord per linje

I denne oppgave skal du lage et program som tar inn en tekst og skriver den ut til en fil. I utdatafilen er det et maksimalt antall ord som er tillatt per linje.

a) Lag en prosedyre format_text() som tar inn en string tekst, en string filnavn og et heltall maks_ord.
- tekst er det som skrives til fil
- filnavn er navnet på utdatafilen
- maks_ord er maksimalt antall ord per linje

Prosedyren skal...
- ... dele stringen tekst i ord
- ... skrive hvert ord til filen
- ... passe på at ikke flere ord enn maks_ord skrives på hver linje

Du kan bruke en tellervariabel for å holde oversikt over hvor mange ord du har skrevet til filen. Hver gang maks_ord er nådd for linjen, skriv en linjeskrift-karater ("\n") til filen.

b) Test programmet med følgende verdier og sjekk at filen "test.out" opprettes og inneholder det som forventes:

  • Teksten: "I denne oppgave skal du lage et program som tar inn en tekst og skriver den ut til en fil. I utdatafilen er det maksimalt antall ord som er tillatt per linje."
  • Filnavn: "test.out"
  • Maks antall ord per linje: 5

Forventet resultat:

I denne oppgave skal du 
lage et program som tar
inn en tekst og skriver
den ut til en fil.
I utdatafilen er det maksimalt
antall ord som er tillatt 
per linje.

Husk å åpne og lukke filen!

def format_text(tekst, filnavn, maks_ord):
    ordene = tekst.split()
    fil = open(filnavn, "w")
    teller = 0

    for min_ord in ordene:
        teller += 1
        fil.write(min_ord)
        fil.write(" ")    # inkluder mellomrom mellom ordene.

        # kan også bruke "if teller % maks_ord == 0"
        if teller == maks_ord:
            teller = 0
            fil.write("\n")

    fil.close()

tekst = "I denne oppgave skal du lage et program som tar inn en tekst og skriver den ut til en fil. I utdatafilen er det maksimalt antall ord som er tillatt per linje."

format_text(tekst, "test.out", 5)