'''L?kker!!! Hvorfor? N?r bruker man det? While -> Nesten som if, bare at man kj?rer innholdet mange ganger - helt til condition ikke lenger er True Hva skjer i koden under? ''' tall1 = 1 tall2 = 2 while tall1 < tall2: print("???????") tall1 += 1 ''' Oppgave 1 Forklar hva som skjer i programmet under. N?r slutter while-l?kka ? kj?re og hvorfor? ''' x = 3 while x < 10: x += 1 print(x) ''' Oppgave 2 Hva skrives ut p? skjermen i programmet under? Her kan det v?re nyttig ? skrive ned verdiene av a og b for hver runde l?kka kj?rer (det vil si for hver iterasjon). ''' a = 10 b = 1 while a > 0: b = b * 2 a = a - b print("a =", a) print("b =", b) ''' Summere sammen tallene 1 til 100, hvordan bruke while her? B?r man bruke while her? ''' indeks = 1 sum = 0 while indeks <= 100: sum = sum + indeks indeks += 1 ''' Hvordan iterere over samlinger, n?r er det nyttig? For l?kker, hvordan skiller det seg fra while? Hvordan velger man? ''' ''' range() med 1, 2 og 3 argumenter Disse 3 er identiske: ''' # slutt indeks 5 for i in range(5): print(i) # start indeks 0, slutt indeks 5 for i in range(0, 5): print(i) # start indeks 0, slutt indeks 5, ?ker indeks med 1 for i in range(0, 5, 1): print(i) ''' Oppgave 3 Skriv et program som har en variabel a med verdien 1 og en while-l?kke. For hver runde (hver iterasjon) i while-l?kka skal variabelen a adderes med 2. L?kka skal v?re ferdig n?r verdien av a er st?rre enn 100. Skriv s? ut verdien av a. N?r sjekkes betingelsen i while-l?kka for siste gang, og hvorfor slutter while-l?kka da ? kj?re? ''' a = 1 while a < 100: a += 2 print(a) ''' Oppgave 4 Skriv et program som inneholder en while-l?kke. Inne i l?kka skal bruker bes om ? taste et tall. Dersom tallet ikke er 10, skal l?kka fortsette ? be om tall. N?r bruker taster inn tallet 10, skal vedkommende f? beskjeden ˇ°Du har tastet inn tallet 10. Programmet avsluttes ˇ­ˇ±, f?r programmet s? avslutter. Utfordring: summer alle tallene brukeren skriver inn frem til 10 blir tastet. N?r 10 tastes inn, skrives summen av tallene (ikke inkludert 10) ut. Med andre ord; hvis bruker taster sekvensen 1, 3, 4 og 10, skrives ˇ°Sum er: 8ˇ± f?r programmet avslutter. ''' total = 0 bruker_input = int(input("Tast inn ett tall: ")) while bruker_input != 10: total += bruker_input bruker_input = int(input("Tast inn ett tall: ")) print(f"Du har tastet inn tallet 10. Summen av alle tallene: {total}. Programmet avsluttes ˇ­") ''' Oppgave 5 Hva skrives ut i terminalen ved kj?ring av programmet under? Kom frem til et svar f?r dere kj?rer programmet. Kj?r programmet ogs? i Python Tutor. ''' tekst = ["hadet", "p?", "badet", "din", "gamle", "sjokolade"] indeks = 0 while indeks < len(tekst): print(tekst[indeks]) indeks += 2 ''' Hvorfor oppst?r det feil hvis dere bytter ut < med <= i l?kkebtingelsen over? Hva slags l?kke ville dere valgt hvis dere skulle skrevet ut alle ordene i lista? Diskut¨¦r, og lag deretter et program som skriver ut alle ordene. ''' tekst = ["hadet", "p?", "badet", "din", "gamle", "sjokolade"] for indeks in range(len(tekst)): print(tekst[indeks]) ''' Oppgave 6 Dere har lista artister = ["Taylor Swift", "Astrid S", "Sam Smith"] Print ut alle elementene i lista med en for-l?kke ved: ? l?pe (iterere) gjennom lista uten ? bruke listeeindekser. Beskriv all koden og hva som endrer seg underveis i kj?ringen. ? l?pe (iterere) gjennom lista ved ? bruke listeeindekser. Beskriv all koden og hva som endrer seg underveis i kj?ringen. Sammenlign de to variantene av for-l?kke i a og b. Hva oppdager dere? ''' artister = ["Taylor Swift", "Astrid S", "Sam Smith"] for element in artister: print(element) for indeks in range(len(artister)): print(artister[indeks]) ''' Oppgave 7 Gitt f?lgende liste: tegnliste = ["h", "e", "i", ",", " ", "d", "u", "!"] Bruk en for-l?kke og lag en setning med tegnene. Dere kan anta at tegnene st?r i riktig rekkef?lge i tegnliste. Skriv ut setningen i terminalen til slutt. Lag en mengde av tegnliste. Gj?r s? det samme som dere gjorde i a), men ved ? bruke mengden i stedet for. Hva oppdager dere, og hvorfor er det slik? ''' tegnliste = ["h", "e", "i", ",", " ", "d", "u", "!"] setning = "" for bokstav in tegnliste: setning += bokstav print(setning) ''' Oppgave 8 Skriv et program med en prosedyre, print_hei. Prosedyren skal skrive ut teksten ˇ°Heiˇ± til terminalen. Bruk s? en l?kke, som kaller prosedyren print_hei. N?r l?kken er ferdig, skal ˇ°Heiˇ± ha blitt skrevet ut fem ganger. Skriv prosedyren print_hei. L?s s? oppgaven ved hjelp av en while-l?kke, deretter en for-l?kke. Hvilken av de to l?kkene anser dere som best egnet til ? l?se oppgaven? Diskut¨¦r fordeler og ulemper. ''' def print_hei(): print("Hei") teller = 0 while teller < 5: print_hei() teller += 1 for indeks in range(5): print_hei() ''' Quizen v?r!! ''' poengsum = 0 # Oppretter ordbok med riktig svar til hvert spm fasit = {"Hva er hovedstaden i Norge?": "Oslo", "Hva heter komponisten Grieg til fornavn?": "Edvard", "Hvilken norsk maler deler Edvard Grieg fornavn med?": "Edvard Munch", "Hvor f?r man b?rek p? IFI?": "Dana"} print("Hei og velkommen til gruppe 4 sin fantastiske quiz!") # sp?rring med for l?kke, bruker n?kkel og verdi til ? gi riktig output til bruker for nokkel in fasit: svar = input(nokkel) # sjekker om bruker svarer det som er i fasit if svar == fasit[nokkel]: print("Riktig!!") # oppdaterer poengsum poengsum = poengsum + 1 else: print("Feil :(((") print("Riktig svar er:", fasit[nokkel]) # sjekker poengsum if poengsum > 4 or poengsum < 0 : print(f"Her har det skjedd noe galt... poengsummen er {poengsum}?!?!?!?") else: print(f"Din poengsum er: {poengsum}") ''' I denne ?velsen skal du skrive en prosedyre for ? sjekke om inputen fra brukeren inneholder en gyldig RGB-farge. RBG (r?dt, gr?nt, bl?tt) er en m?te ? representere farger p? som best?r av tre heltall fra og med 0 til og med 255 som st?r for hvor mye av de tre fargene skal v?re med i den endelige fargen. Noen eksempler: Svart: (0, 0, 0) Hvit: (255, 255, 255) R?d: (255, 0, 0) Gul: (255, 255, 0) a) Skriv en prosedyre som ber brukeren om tre tall som ¨¦n input. Tallene skal skilles med mellomrom. Lagre denne verdien i en variabel. b) Bruk funksjonen split() for ? dele strengen i separate tall. Lagre resultatet i en ny variabel. Hva er typen av resultatet? (se dokumentasjonen for split() her). c) Sjekk om den nye samling inneholder tre tall(elementer). Hvis ikke, skriv ut en feilmelding. ''' def tre_tall(): tall = input("Gi meg 3 tall, skille med mellomrom: ") ny_variabel = tall.split() if len(ny_variabel) == 3: #hvorfor fungerer ikke denne l?kken som vi tror? for element in ny_variabel: element = int(element) for indeks in range(len(ny_variabel)): ny_variabel[indeks] = int(ny_variabel[indeks]) for element in ny_variabel: if element>256 or element<0: print(f"{element} er ikke gyldig tall!") else: print(f"{element} er gyldig!") else: print(f"Du skrev ikke inn 3 tall, du skrev inn {len(ny_variabel)} tall :(") tre_tall() ''' d) Konverter de tre string-tallene til heltall. Sjekk om de tre tallene i samlingen din er gyldige, dvs. mellom 0 og 256. Hvis ikke, skriv ut en feilmelding som forklarer hva som gikk galt. Skriv ogs? en melding hvis alt gikk bra. ''' ''' Oppgave 9 Lag et program som teller og skriver ut antallet ulike bokstaver som finnes i et ord. For eksempel har ordet ˇ°heisannˇ± seks ulike bokstaver og ˇ°heiˇ± tre ulike bokstaver. Programmet skal fungere for ethvert ord. Test derfor programmet med ulike ord. Diskuter hva dere trenger i programmet og hvordan dere vil g? frem for ? lage det f?r dere programmerer. ''' ''' Oppgave 10 Dere skal fordele gjester langs den ene siden av et langt bord. P? forh?nd har dere delt gjestene inn i to grupper - introverte og ekstroverte - og ?nsker ? fordele disse p? annenhver plass langs bordet. Det er alltid like mange introverte og ekstroverte gjester, men totalt antall gjester er vilk?rlig (kan v?re hva som helst). Den endelige bordplasseringen med annenhver introverte og ekstroverte gjest er en liste. Programmet skal avslutte med ? skrive ut en ryddig oversikt som viser alle par av introverte og ekstroverte gjester. Husk at en gjest kan inng? i flere par; hvis for eksempel Per som er introvert er plassert mellom ekstroverte Lisa og ekstroverte Sigrid, inng?r Per i to par. Siden totalt antall gjester er vilk?rlig (kan v?re hva som helst), test programmet med forskjellig antall gjester. Husk at antall introverte gjester alltid er likt antall ekstroverte. Diskuter hva dere trenger i programmet og hvordan dere vil g? frem for ? lage det f?r dere programmerer. ''' introverte = "Per,Daniel,Selma" ekstroverte = "Sokrates,Pippi,Kine" introverte = introverte.split(",") ekstroverte = ekstroverte.split(",") bordsetting = [] for indeks in range(len(introverte)): bordsetting.append(ekstroverte[indeks]) bordsetting.append(introverte[indeks]) assert len(bordsetting) == len(introverte)*2 assert bordsetting[0] == ekstroverte[0] assert bordsetting[1] == introverte[0] for indeks in range(1, len(bordsetting)): print(f" - {bordsetting[indeks-1]} og {bordsetting[indeks]}") for indeks in range(len(bordsetting)-1): print(f" - {bordsetting[indeks]} og {bordsetting[indeks+1]}") ''' Oppgave 11 En butikk har en liste med vareID-er (strenger). Lista inneholder alltid flere duplikater (like verdier) for ¨¦n eller flere varenummer. Dere er ansatt for ? hjelpe butikken med varetelling. I den forbindelse ?nsker butikken seg et program som tar vareID-er fra lista og lager en samling. Samlingen skal vise antallet av hver vare som erstatning for lista med duplikater. De ?nsker dessuten en alfabetisk oversikt over vareID-er og antall fra samlingen skrevet ut i terminalen. Hint: dere kan bruke operatorene >, <, <=, >= og == for ? sammenligne strenger. Programmet skal fungere for enhver liste med vareID-er (strenger) med flere duplikater. Test derfor programmet med ulike lister. Diskuter hva dere trenger i programmet og hvordan dere vil g? frem for ? lage det f?r dere programmerer. ''' ''' Oppgave 12: Ekstra utfordring Lag et program som fjerner alle nuller (hvis det finnes noen) i starten og slutten av en liste. Nuller som b?de har andre tall foran og bak seg i lista, skal ikke fjernes. Til slutt skal en liste som oppfyller de nevnte kravene skrives ut. Eksempler For listene [0, 0, 0, 0, 0] og [0] skal [] (tom liste) skrives ut. For [5] skal programmet skrive ut [5], og for listene [0, 0, 1, 2, 3] og [1, 2, 3, 0, 0] skal [1, 2, 3] skrives ut. For [1, 0, 2, 0, 3] skal programmet skrive ut [1, 0, 2, 0, 3] og for [1, 2, 3, 4] skal [1, 2, 3, 4] skrives ut. For [0, 0, 1, 2, 0, 3, 0, 0, 4, 0] skal programmet skrive ut [1, 2, 0, 3, 0, 0, 4]. Programmet skal fungere for enhver liste. Test derfor programmet med listene nevnt ovenfor, i tillegg til andre lister. Diskuter hva dere trenger i programmet og hvordan dere vil g? frem for ? lage det f?r dere programmerer. '''