''' Skop? ''' #Oppgave 1 def minus(): a = 3 b = 2 return a, b def summer(): a, b = minus() print("sum: ", a + b) summer() ''' Hvorfor fungerer ikke programmet ovenfor? Endre programmet slik at det fungerer. Dere skal ikke bruke globale variabler. ''' #Oppgave 2 def legg_til_bokstav(ordliste, bokstav): for indeks in range(len(ordliste)): #ordliste[indeks] = ordliste[indeks] + bokstav #konkatenere ordliste[indeks] += bokstav return ordliste def hovedprogram(): ordliste = ["Je", "de", "se"] ordliste = legg_til_bokstav(ordliste, "g") print(ordliste) hovedprogram() ''' Hvorfor endres ikke ordene i programmet ovenfor? Endre programmet slik at ordene endres. Dere skal ikke bruke globale variabler. ''' #Oppgave 3 def hovedprogram(): grense = -5 grenseteller = 0 while grenseteller >= grense: print("Har vi n?dd grensen?", grenseteller == grense) grenseteller -= 1 hovedprogram() ''' Hvorfor slutter programmet ovenfor aldri ? kj?re? Endre programmet slik at det stopper (terminerer) n?r grensa (grense) er n?dd. Dere skal ikke bruke globale variabler. ''' #Oppgave 4 def bygg_samling(antall_rader, antall_kolonner): samling = [] #for radnr in range(antall_rader): bruker ikke radnr til noe while antall_rader > 0: rad = [] for kolonnenr in range(antall_kolonner): rad.append(kolonnenr) samling.append(rad) antall_rader -= 1 return samling def finn_antall(noestet_samling, tall): #default verdi 0 antall = 0 #for hver rad for rad in noestet_samling: #rad er en liste, vi m? g? gjennom den for ? sammenligne elementene med tall for kolonnenr in rad: #gj?r bare noe om tallet er i samlingen if kolonnenr == tall: antall += 1 return antall def hovedprogram(): samling = bygg_samling(7, 5) tall = 2 antall = finn_antall(samling, tall) print(antall) hovedprogram() ''' Hva slags samling er det programmet ovenfor bygger, og hvordan ser samlingen ut? Hva er oppgaven til while-l?kka og hva er oppgaven til for-l?kka? Utvid programmet med en funksjon, finn_antall, som tar inn den bygde samlingen og et tall. Funksjonen skal returnere antall ganger det oppgitte tallet finnes i samlingen. Hovedprogrammet skal skrive ut dette antallet. ''' #Oppgave 5 def hent_navn(personbok, personid): #tar inn ordbok og n?kkel #sjekker om n?kkel er i ordbok if personid in personbok: #returnerer verdien til n?kkelen return personbok[personid] #n?kkel ikke i ordbok return None def hovedprogram(): #ordbok med personid og navn personbok = { "01020300000": "Hj?rdis Olsen", "02030400000": "Martin Halvorsen", "03040500000": "Kristin Andersen" } personid = "02030400000" #bruker funksjon til ? finnne riktig navn til id navn = hent_navn(personbok, personid) startbokstav = "M" #sjekker om navnet starter p? M if navn[0] == startbokstav: print("Fant person ved navn", navn + ".") print("Navnet starter p?", startbokstav + ".") #sjekker om funksjonen fant et navn elif navn: print("Fant person ved navn", navn + ".") #hvis ingen hadde personid = "02030400000" else: print("Fant ingen person med id", personid + ".") hovedprogram() ''' Hva skrives ut i programmet ovenfor? Hva skrives ut hvis personid ikke finnes i personbok? Endre programmet, slik at det ikke lenger inkluderer n?stede beslutninger. Programmet skal likevel gj?re det samme etter endringen som f?r endringen. ''' ''' Oppgave 6 Skriv en funksjon, tell_grader(fag, bsc, msc), som tar inn tre argumenter av datatypen string og sjekker om en bachelorgrad (bsc) og/eller en mastergrad (msc) er innen et bestemt fag. Dersom fag har samme verdi som bsc og msc, skal funksjonen returnere 2. Dersom fag har samme verdi som enten bsc eller msc, skal funksjonen returnere 1. Dersom fag hverken er lik bsc eller msc, skal funksjonen returnere 0. For eksempel skal kallet tell_grader("informatikk", "informatikk", "informatikk") returnere 2, mens kallet tell_grader("historie", "informatikk", "informatikk") skal returnere 0. Test funksjonen med flere eksempler p? fag, bsc og msc i et hovedprogram som er definert som hovedprogram(). ''' def tell_grader(fag, bsc, msc): #if fag == bsc == msc return 2 if fag == bsc and fag == msc: return 2 #if fag == bsc or fag == msc return 1 elif fag == bsc or fag == msc: return 1 #else: return 0 else: return 0 def hovedprogram(): assert tell_grader("informatikk", "informatikk", "informatikk") == 2 assert tell_grader("historie", "informatikk", "informatikk") == 0 hovedprogram() ''' Oppgave 7 Skriv en funksjon, forkort_lagliste(lagliste), som tar som argument en liste av strenger som er lagnavn og returnerer en ny liste hvor ingen lagnavn finnes flere ganger i lista. Med andre ord, dersom samme streng opptrer flere ganger i lista som funksjonen mottar som argument, skal denne bare opptre ¨Śn gang i lista som blir returnert. For eksempel skal kallet forkort_lagliste(["Brann", "Molde", "Brann"]) returnere en liste ["Brann", "Molde"]. Test funksjonen med flere eksempler p? lagliste i et hovedprogram som er definert som hovedprogram(). ''' def forkort_lagliste(lagliste): #skal fjerne duplikater fra liste ny_lagliste = [] #g?r gjennom listen for lag in lagliste: #sjekker om laget allerede er lagt til i liste if lag not in ny_lagliste: ny_lagliste.append(lag) return ny_lagliste def hovedprogram(): assert forkort_lagliste(["Brann", "Molde", "Brann"]) == ["Brann", "Molde"] hovedprogram() ''' Oppgave 8 Programmet nedenfor leser inn fra tekstfil hvor mye henholdsvis Peter og P?l har hatt i ferieutgifter. Koden kj?rer og gir riktig svar, men det er en del un?dvendige gjentakelser. Du skal skrive en modifisert versjon av programmet, slik at det skriver ut det samme som det opprinnelige, men med f?rre gjentakelser i koden. ''' def ferieutgifter(filnavn): tot = 0 navn = filnavn.strip(".txt") for line in open(filnavn): utgift = int(line) tot += utgift #print(f"{navn} har brukt: ", tot) def hovedprogram(): ferieutgifter("Peter.txt") ferieutgifter("Paul.txt") # fn_peter = "Peter.txt" # tot_peter = 0 # for line in open(fn_peter): # utgift_peter = int(line) # tot_peter += utgift_peter # print("Peter har brukt: ", tot_peter) # fn_paul = "Paul.txt" # tot_paul = 0 # for line in open(fn_paul): # utgift_paul = int(line) # tot_paul += utgift_paul # print("Paul har brukt: ", tot_paul) hovedprogram() ''' Oppgave 9 Skriv en funksjon, fjern_vokaler(setning, vokalliste), som tar inn en setning (datatype string) og en liste med vokaler (hvor hvert element i lista er en string av lengde 1). Funksjonen skal returnere en kopi av setning, hvor alle vokaler fra vokalliste er fjernet. Du kan anta at b?de setning og vokalliste kun inneholder sm? bokstaver. For eksempel skal kallet fjern_vokaler("ha det fint", ["a", "e", "i", "o", "u"]) returnere teksten "h dt fnt". Test funksjonen med flere eksempler p? setning og vokalliste i et hovedprogram som er definert som hovedprogram(). ''' def fjern_vokaler(setning, vokalliste): #fjerne bokstaver(vokaler) fra en tekststreng ny_setning = "" for tegn in setning: if tegn not in vokalliste: ny_setning += tegn return ny_setning def hovedprogram(): assert fjern_vokaler("ha det fint", ["a", "e", "i", "o", "u"]) == "h dt fnt" hovedprogram() ''' Oppgave 10 Skriv en funksjon, er_sortert(talliste), som tar en liste med tall som argument og som returnerer en boolsk verdi. Funksjonen skal sjekke om alle tallene i lista er i stigende rekkef?lge (sorterte). Dersom alle verdiene er i stigende rekkef?lge, skal funksjonen returnere True, ellers skal funksjonen returnere False. Anta at alle tallene i lista er ulike. Funksjonen trenger alts? ikke ta hensyn til eventuelle like verdier. For eksempel skal er_sortert([2, 4, 6, 8, 10]) returnere True og er_sortert([7, 3, 1, 9]) returnere False. Test funksjonen med flere tallister i et hovedprogram som er definert som hovedprogram(). ''' def er_sortert(talliste): #if sortert, return true #else return false #iterate gjennom liste forrige_tall = 0 for tall in talliste: if tall < forrige_tall: return False forrige_tall = tall return True def er_sortert(talliste): #sammenligne med den sorterte versjonen av seg selv return talliste == sorted(talliste) def hovedprogram(): assert er_sortert([2, 4, 6, 8, 10]) == True assert er_sortert([7, 3, 1, 9]) == False hovedprogram()