''' NB: Oblig 5 har obligatoriske programmeringsoppgaver!!!!!!! ''' '''Hva er en prosedyre?''' def hello_world(): print("Hello World") hello_world() # prosedyre som printer ulike ting hver gang def skriv_ut(tekst): #tekst = "Hello World" print(tekst) skriv_ut("Hello World") #funksjon som dobler ett tall, *2 def dobbel(tall): x = tall*2 return x c = dobbel(3) print(dobbel(4)) e = dobbel(5) print(c) #lage en ordbok ved hjelp av en funksjon til ? skrive hele den lille gangetabellen def gangetabell(start, stopp): ordbok = {} for tall in range(start, stopp+1): nokkel = str(tall) assert isinstance(nokkel, str) liste = [] for indeks in range(1, 11): x = indeks*tall liste.append(x) ordbok[nokkel] = liste return ordbok lillegangetabell = gangetabell(1,10) assert isinstance(lillegangetabell, dict) print(lillegangetabell) ''' Oppgave 1 Skriv en funksjon som tar i mot to tall og returnerer det st?rste av de to tallene. Lagre tallet funksjonen returnerer i en variabel. Skriv ut variabelen. Hva hadde st?tt i terminalen hvis du i a) hadde glemt return og s? printet variabelen? Begrunn resultatet. ''' def stoerst(tall1, tall2): #tall1 = #tall2 = if tall1 > tall2: return tall1 else: #trenger ikke else, tenk kodeflyt return tall2 tallet = stoerst(15, 7) print(tallet) ''' Oppgave 2 Diskuter f?lgende sp?rsm?l: Hva skiller prosedyrer med parametre fra funksjoner med parametre? Kan det fortsatt v?re en funksjon hvis den ikke har parametre? Begrunn svaret i b). Hvorfor eller hvorfor ikke? Tenk tilbake p? forelesningen og hva som skiller prosedyrer fra funksjoner. ''' ''' Oppgave 3 Skriv en funksjon som tar i mot to sannhetsverdier (True/False) og returnerer 1 hvis begge verdier er sanne, 0 hvis begge verdier ikke er sanne. Hva tar funksjonen ikke hensyn til (hva kan g? Ħ°galtĦħ)? ''' def sannhetsverdier(verdi1, verdi2): if verdi1 and verdi2: return 1 if verdi1 == False and verdi2 == False: #tenkt kodeflyt, du kan bruke elif, men dette fungerer like bra return 0 assert sannhetsverdier(True, True) == 1 assert sannhetsverdier(False, False) == 0 #assert sannhetsverdier(True, False) == ? ''' Oppgave 4 Skriv et program med en liste [6, 3, 2, 8, 11]. Bruk en for-l?kke til ? skrive ut alle verdiene i listen. Skriv en prosedyre med en parameter liste. Skriv ut alle verdiene i lista ved ? bruke prosedyren. Besvar deretter f?lgende sp?rsm?l: Hva er prosedyrens argument i dette tilfellet? Hva er verdien til prosedyrens parameter i dette tilfellet? Lag en funksjon som finner og returnerer den laveste verdien i lista. Hint: her kan det v?re lurt ? ha en variabel som mellomlagrer den til enhver tid minste verdien. ''' tall_liste = [6, 3, 2, 8, 11] #prosedyre tar inn liste og printer innholdet def oppgave4(liste): for verdier in liste: print(verdier) oppgave4(tall_liste) ''' Lese og skrive til fil ''' min_fil=open("mittFilNavn.txt") for linje in min_fil: print("Her fant jeg: " + linje) min_fil.close() for linje in open("mittFilNavn.txt"): ordliste = linje.split() for ord in ordliste: print(ord) min_fil.close() min_fil = open("nyFil.txt", "w") min_fil.write("Dette er den f?rste linjen i filen\n") min_fil.write("Dette er den andre linjen i filen") min_fil = open("mittFilNavn.txt", "w") for i in range(5): min_fil.write("Dette er en ny linje\n") min_fil.close() ''' Oppgave 5 Anta at du har filen Ħ°historiske_personer.txtĦħ. Les inn alle linjene og lagre dem i en liste. F?rste historiske person (linje) i filen skal ligge f?rst i lista, o.s.v. Tips: husk ? ?pne og lukke filen. Opprett filen Ħ°historiske_personer.txtĦħ. Fyll den med noen historiske personer ved ? skrive direkte i fila. Legg fila i samme mappe som .py-filen din. Test at programmet fra a) fungerer ved ? bruke filen du opprettet i b). ''' liste_historie_original = ["Edvard Munch", "Edvard Grieg", "Jesus", "Napolion", "Sokrates"] fil_historie = open("historiske_personer.txt", "w") for person in liste_historie_original: fil_historie.write(person + "\n") fil_historie.close() fil_historie = open("historiske_personer.txt") liste_historie = [] for linje in fil_historie: liste_historie.append(linje.strip("\n")) assert len(liste_historie_original) == len(liste_historie) assert liste_historie_original == liste_historie fil_historie.close() ''' Oppgave 6 Lag et program som skriver historiske personers navn og f?dsels?r til fil. Navnene og f?dsels?rene skal v?re lagret i en ordbok, med navn som n?kler og f?dsels?r som verdier. Tips: husk ? ?pne og lukke filen ved behov. Opprett en ordbok med fem historiske personer og deres f?dsels?r. Skriv navn og f?dsels?r til fil. Hver linje skal ha en historisk persons navn og f?dsels?r, atskilt med ; (semikolon). Filen skal hete Ħ°historiske_personer_fodt.txtĦħ. Lag et nytt program, som bruker en funksjon til ? lese inn filen du laget i b) og som returnerer en ordbok tilsvarende den i a). Funksjonen skal ha parameter ''' ordbok_historisk = {"Edvard Munch": "1863","Edvard Grieg": "1843", "Jesus": "0", "Napoleon": "1769", "Sokrates": "399 f.kr."} fil_historie = open("historiske_personer_fodt.txt", "w") for nokkel in ordbok_historisk: fil_historie.write(nokkel + " ; " + ordbok_historisk[nokkel] + "\n") fil_historie.close() def oppgave6(fil): ordbok = {} #for linje in open("historiske_personer_fodt.txt"): for linje in open(fil): liste = linje.split(" ; ") nokkel = liste[0] verdi = liste[1].strip("\n") ordbok[nokkel] = verdi return ordbok ny_ordbok = oppgave6("historiske_personer_fodt.txt") assert len(ordbok_historisk) == len(ny_ordbok) assert ordbok_historisk == ny_ordbok #kan bruke samme funksjon til flere filer ord_test = oppgave6("hihi.txt") for nokkel in ord_test: print(nokkel + " " + ord_test[nokkel])