Øving 3 - Lister, tupler, dicts, sets og kontrollstrukturer

VIKTIG!

Minst 5 av 6 oppgaver må løses for å få godkjent øvingen. Husk å sjekk at alle deloppgaver er løst.

Dersom ikke annet er oppgitt skal koden for hver programmeringsoppgave bestå av èn celle med hele programkoder.

Celler med "In [ ]:" foran er kode-celler som kan kjøre kode. Ellers er cellene tekstbokser. En celle (både tekst og kode) kjøres hvis du markerer den og trykker SHIFT+ENTER. Se guide for utfyllende informasjon om hvordan man bruker jupyter notebooks.

Last ned øvingen fra jupyter til din pc som .pdf-fil (se guide) og last den opp i Blackboard for å levere den.

Oppgave 1

a)

Skriv et program som utfører følgende pseudokode:

  • Initier en tom liste Li
  • Hent inn et element fra bruker (0-100)
  • Legg elementet i listen Li
  • Finn lengden på Li
  • Hvis det er mindre enn 10 elementer i Li, be om et nytt element
  • Når det er 10 elementer i Li skal det ikke bes om flere
  • Print Li til konsoll med en beskrivende tekst
  • Regn ut gjennomsnittet av de tre høyeste elementene i Li:
    • Sorter den opprinnelige lista Li
    • Hent ut de tre siste elementene og legg de i en ny liste Lu
    • Fjern disse tre elementene fra lista Li
      • Tips: Her kan det være lurt å printe listene for å sjekke at alt er riktig
  • Pluss 10 til hvert av de resterende elementene i lista Li
  • Sjekk om noen av de nye elementene i Li nå er høyere eller lik noen av elementene du la i liste Lu
  • Hvis noen av elementene var høyere, legg dem også til i liste Lu og fjern dem fra Li
    • Tips: bruk en nøstet for-loop for å gå gjennom Lu og Li
  • Print ut gjennomsnittet av Lu, og det høyeste og laveste tallet i Li
In [ ]:
## a) svar

Li = list([]) # Initier en tom liste Li

antall = 0 # Initier counter for antall tall

while len(Li) <= 9: # Kjør koden under så lenge det er mindre enn eller 9 tall
    nyttTall = int(input('Skriv et tall (0-100): ')) # Ta inn et tall fra bruker
    
    Li.append(nyttTall) # Legg tallet til i lista
    
    antall += 1 # Øk counter med 1
    
print('Du skrev tallene: ', Li)

Li.sort() # Sorter lista (stigende)

print('Li sortert:', Li) 
 
Lu = Li[-3:] # Hent de siste tre tallene i den sorterte lista

Li = Li[0:-3] # Hent alle tallene i lista untatt de tre siste

print('Li:', Li)
print('Lu:', Lu)

for num in range(len(Li)): # Gå gjennom Li for å plusse 10 på hvert tall
    Li[num] += 10
    
print('Li +10:', Li) 

for j in Lu: # Ytre loop: gå gjennom Lu
    for i in Li: #Indre loop: for hvert tall i Lu, gå gjennom alle tallene i Li
        if i >= j: # Sjekk om tallet i Li er større enn tallet i Lu
            Lu.append(i) # Legg Li-tallet til Lu hvis det var større
            Li.remove(i) # Fjern Li-tallet fra Li hvis det var større

print('Lu med høyeste fra Li +10:', Lu)
print('Li uten tall som var høyere enn Lu: ', Li)
        
gjLu = sum(Lu) / float(len(Lu)) # Finn gjennomsnittet av Lu

maxLi = max(Li) # Finn maks verdi i Li
minLi = min(Li) # Finn min verdi i Li

print('Gjennomsnittet av Lu er:', gjLu)
print('Det minste tallet i Li er: ', minLi)
print('Det høyeste tallet i Li er: ', maxLi)

b)

Uten å kjøre koden: forklar med én setning hva koden under gjør gitt at a = [1,2,3,4,5,6,7,8,9,10].

import random

a = [1,2,3,4,5,6,7,8,9,10]

b =[0]*len(a)

for c in range(len(a)):

d = random.randint(0,len(a)-1)

b[c] = a[d]

del a[d]    #del fjerner et bestemt element i listen, her fjerner det a[d].

print(b)

b) svar

Koden lager en liste med 0'ere, med lengde lik liste a, og bytter ut neste 0'er med et nytt tilfeldig tall mellom 0 og lengden til a inn i listen for hver runde.

c)

Gitt listen myList = [1,2,467,5,442,3,54,578,6,43,32,53,668].

Bruk én linje med kode for å legge elementene 442,3, 54, 578 og 6 fra myList i en ny liste listSlice. Print gjennomsnittet av listSlice. For å regne ut gjennomsnittet skal du bruke biblioteket NumPy. NumPy er et omfattende, praktisk bibliotek for matematiske operasjoner, fra grunnleggende ting som mean til komplekse matriseoperasjoner. Sjekk brukerguide her: https://docs.scipy.org/doc/numpy-1.15.1/user/index.html#user. Konvensjonen for å importere numpy er import numpy as np.

In [ ]:
## c svar

import numpy as np

myList = [1,2,467,5,442,3,54,578,6,43,32,53,668] # Opprinnelig liste

listSlice = myList[4:9] # Hent aktuelle verdier

avg = np.mean(listSlice) # Bruker numpy for å regne ut gjsnitt

print('Gjennomsnittet av', listSlice, 'er:', avg) # Printer gjennomsnitt

Oppgave 2

Du blir bedt om å lage et program som lagrer informasjon om været som har vært i løpet av én uke. Programmet skal lagre informajson om regnmengde(mm), vind(styrke, m/s) og temperatur(grader celcius) for hver av dagene. Programmet skal spørre brukeren om å legge inn informasjonen ved hjelp av en for-løkke som går gjennom alle dagene.

a)

Skriv programmet som beskrevet over.

In [5]:
## a) svar

days = ['Man','Tirs','Ons','Tor','Fre','Lør','Søn']

week = {} # Initierer tom dict

for d in days: # Itererer over dagene i uka
    
    print('Været på', d,':') # Viser hvilken dag man er kommet til
    
    regn_ny = int(input('Hvor mange mm regn? ')) 
    vind_ny = int(input('Hvor mange m/s vind? '))
    temp_ny = int(input('Hvor mange grader celcius? \n'))
    
    week[d] = regn_ny, vind_ny, temp_ny # Legger informasjonen for dagen i en ny key
    
print(week)

b)

Hent ut informasjonen om regn, vind og temperatur i hver sin liste, regn ut og print gjennomsnittet for alle tre listene med en beskrivende tekst.

In [10]:
## b) svar

import numpy as np

# Initierer lister for informasjonen som skal hentes fra week

regn = []
vind = []
temp = []

for d in week: # Itererer over key'ene (dagene) i week
    
    regn.append(week[d][0]) # For hver dag, legg til informasjon om regn (første tallet i value'ene)
    vind.append(week[d][1]) # For hver dag, legg til informasjon om vind (andre tallet i value'ene)
    temp.append(week[d][2]) # For hver dag, legg til informasjon om temperatur (tredje tallet i value'ene)

print('Gjennomsnittlig mm regn var: ',np.mean(regn))
print('Gjennomsnittlig m/s vind var: ',np.mean(vind))
print('Gjennomsnittlig temperatur var: ',np.mean(temp))

c)

Bruk innebygde funksjoner til å finne dagene i uka som hadde enten i) vind over 10 m/s, ii) temperatur lavere enn 5c eller iii) mer enn 1mm regn. Legg disse dagene i en liste og print dem ut til konsoll med en beskrivende tekst.

In [17]:
### c) svar

dager_vind = []
dager_temp = []
dager_regn = []

# Finner dager med >10 m/s vind

for key,value in week.items():
    if value[1] > 10:
        dager_vind.append(key)
    elif value[2] < 5:
        dager_temp.append(key)
    elif value[0] > 1:
        dager_regn.append(key)
    else:
        print('Bare fint vær jo!')
        
print('Dagene med mer enn 10 m/s vind var:', dager_vind)
print('Dagene med temperatur lavere enn 5c var:', dager_temp)
print('Dagene med mer enn 1 mm regn var:', dager_regn)
        

Oppgave 3

For og while

Insektssamleren

En entomolog skal skrive et program som lagrer informasjonen om lengden på larver fra en insektsart han skal forske på. Han trenger 100 målinger. Han vil legge inn denne informasjonen daglig, som en rekke med tall separert med komma, og hver dag få beskjed om hvor mange målinger som mangler før han har nok. Når han har nok målinger skal han få beskjed om det, listen med målinger skal skrives ut til konsoll og programmet avsluttes.

Hjelp entomologen å skrive programmet.

Tips: Her kan man generere en liste med tilfeldige tall (random-biblioteket) av ulike lengder for å teste at programmet fungerer.

In [ ]:
antall = 0 # Initierer counter for antall insekter

insekter = list([]) # Initierer tom liste som lengdene skal legges inn i 

maal = 100 # Antallet insekter som skal måles totalt

while antall != maal: # Sjekker om antallet er likt målet
    
    maaling = input('Målinger (separert med komma): ').split(',') # Tar inn lengder, kan være flere tall og separeres med komma
        
    for ins in maaling: # Loop for å legge lengdene inn i lista
            
        insekter.append(ins)
    
    antall = len(insekter) # Sjekker hvor mange målinger som er lagt inn
    
    if antall > maal:  
        print('Du har målt ', antall, 'insekter, så du har nådd målet og har ', antall-maal, 'ekstra målinger.')
        
    elif antall == maal: 
        print('Du har målt ', antall, 'insekter, så du har nådd målet!')
      
    else:
        print('Nå har du målt', antall, 'insekter. Du mangler', maal-antall, '.')

Oppgave 4

Nøstede for-løkker

En løpetrener spør deg om å lage et program som tar tiden løperne bruker på en distanse. Fra programmet starter til det slutter skal det telles antall minutter, sekunder og tideler. Programmet skal slutte når brukeren trykker på "stopp" (i jupyter er det knappen med et stort kvadrat på verktøylinja, i et IDE er det CTRL+C). Tiden skal så printes til konsoll i formatet "min:sek.hundredel", så husk å fullfør print-setningen til slutt.

Til hjelp er kontrollstrukturen for å stoppe tidtakingen allerede skrevet.

Tips: For å få tidtakeren til å vente med å telle videre før det er gått ett sekund/en tidel, slik at tiden blir riktig, kan "time" biblioteket være nyttig: time.sleep(secs)-funksjonen gjør at utførelsen at programmet stopper i det antallet sekunder du angir i parentesene (secs). For eksempel gjør følgende kode at for-loopen venter i ett sekund hver gang før den skal printe sekundet:

for sekund in range (0,60,1):

time.sleep(1)

print(sekund)
In [42]:
import time

try:
    while True:
        ### Skriv koden din under denne linjen ###
        for minutt in range(0,60,1):
            for sek in range(0,60,1):
                time.sleep(1)
                for tidel in range(0,10,1):
                    time.sleep(0.01)
                    tidel
        ### Skriv koden din over denne linjen ###
        
except KeyboardInterrupt:
    print('Tiden var: '+str(minutt)+':'+str(sek)+'.'+str(tidel))
        

Oppgave 5

Standardavvik

I Test-deg-selv uke 36, oppgave 1.2, fikk du i oppgave å skrive deler av en formel i python-kode. Dette var formelen for standardavvik. Standarddavvik er gjennomsnittlig avvik fra gjennomsnittet. Det som manglet i den forrige versjonen av formelen var beregningen av summen av alle avvikene, siden x bare var ett tall.

Hele formelen er:

stddev = math.sqrt((sum(x-y)**2))/n-1

I denne oppgaven skal du beregne standardavviket for lista "data" gitt under, og pseudokoden gitt over.

data = 31, 31, 34, 6, 32, 25, 14, 25, 21, 42, 33, 32, 44, 20, 48, 31, 23, 23, 8, 3, 36, 10, 48, 43, 26, 8, 35, 40, 27, 4, 24, 5, 29, 15, 10, 29, 11, 15, 47, 29, 26, 23, 34, 38, 9, 42, 27, 13, 15, 9

Pseudokoden for hele beregningen er som følger:

  • Legg listen "data" i en variabel
  • Beregn gjennomsnittet av tallene i listen ("y" i formelen)
  • Finn antall elementer i listen ("n" i formelen)
  • Initier en tom liste (som senere skal holde avvikene)
  • For hvert element (x) i listen, beregn avvik fra gjennomsnittet: a = (x-y)**2
  • Legg hvert resulterende avvik til i den tomme listen.
  • Beregn summen av alle avvikene
  • Del summen av avvikene på n-1
  • Beregn kvadratroten av summen av avvikene - dette er standardavviket
  • Print ut standardavviket til slutt.
In [ ]:
### Oppgave 5 svar

import math
import numpy as np

liste = [31, 31, 34, 6, 32, 25, 14, 25, 21, 42, 33, 32, 44, 20, 48, 31, 23, 23, 8, 3, 36, 10, 48, 43, 26, 8, 35, 40, 27, 
         4, 24, 5, 29, 15, 10, 29, 11, 15, 47, 29, 26, 23, 34, 38, 9, 42, 27, 13, 15, 9]

y = np.mean(liste)
n = len(liste)

avvik = []

for x in liste:
    a = ((x-y)**2)
    avvik.append(a)
    
total = np.sum(avvik)

totalOverN = total/(n-1)

stddev = math.sqrt(totalOverN)

print('standardavviket er: ', format(stddev, '.3f'))

Oppgave 6

Analyse av trontalen 2018

Skriv et program som tar inn teksten under som én lang string-variabel.

  • a) Tell antall ord i teksten og print antallet ut til konsoll
  • b) Tell antall setninger i teksten og print antallet ut til konsoll
  • c) Beregn gjennomsnittlig antall ord i hver setning og print til konsoll
  • c) Tell hvor mange ganger hver bokstav i alfabetet forekommer i teksten, og skriv en sortert liste som går fra høyest til lavest til konsoll.

Tips: mellomrom kan definere slutten av et ord, og punktum kan definere slutten av en setning.

tekst = Ærede President, Folkets representanter. Jeg hilser Stortinget velkommen til ansvarsfullt arbeid og ønsker at det må bli til gagn for fedrelandet. Den 17. januar ble regjeringen utvidet med partiet Venstre. Til grunn for utvidelsen ligger den politiske plattformen partiene ble enige om på Jeløya. Plattformen beskriver regjeringens mål om å skape et bærekraftig velferdssamfunn. Den beskriver også seks utfordringer for Norge som regjeringen vil arbeide med for å nå dette målet. Den første utfordringen er å omstille norsk økonomi for å skape nye arbeidsplasser og flere ben å stå på. Regjeringen vil bygge ut veier og jernbane for å fremme omstilling og vekst. Ny kunnskap styrker evnen til vekst. Regjeringen vil legge frem en revidert langtidsplan for forskning og høyere utdanning. For at ingen skal gå ut på dato, må vi gjøre mer for å oppdatere vår kompetanse. Regjeringen vil fremme tiltak for å la flere få mer opplæring mens de er i jobb. Den andre utfordringen er å oppfylle Norges klimaforpliktelser, slik at vi tar vår del av ansvaret. Sommeren 2018 kom med varmerekorder og tørke. Et mer ekstremt vær har blitt mer vanlig. Det er avgjørende at verden når sine klimamål. Norge skal oppfylle våre utslippsmål i samarbeid med EU. Parisavtalen er vårt viktigste internasjonale rammeverk. I desember vedtas kjøreregler for hvordan landene skal følge opp avtalen. Norge skal være pådriver. Bevaring av verdens regnskoger er avgjørende for å håndtere klimautfordringen. Regjeringen vil styrke dette viktige arbeidet. Regjeringen vil føre en politikk som skaper grønn vekst og nye grønne jobber. Regjeringen vil legge til rette for fortsatt fornyelse av bilparken. Den tredje utfordringen er å skape et inkluderende arbeidsliv. Regjeringens mål er et samfunn med små forskjeller, der alle kan delta og der alle gis muligheten til å bidra. Det største skillet i Norge går mellom de som er i jobb og de som står utenfor arbeidslivet. Flere må gis muligheten til å forsørge seg selv og sin familie gjennom lønnet arbeid. Den gode utviklingen i arbeidsmarkedet gir en god anledning til ekstra innsats. Regjeringen inviterer arbeidsgivere med på dugnad for å ansette flere som i dag står utenfor på grunn av nedsatt funksjonsevne eller hull i CVen. Den fjerde utfordringen er å sikre gode velferdsordninger i en tid hvor andelen eldre øker. Regjeringen vil gjennomføre reformen ”Leve hele livet”. Reformen skal gi eldre og deres pårørende økt valgfrihet, livskvalitet og trygghet. Regjeringen vil videreføre prøveordningen med statlig finansiert eldreomsorg. Tilbudet til utsatte mennesker i vårt samfunn, som rusavhengige og mennesker med psykiske lidelser, skal styrkes. Et offentlig utvalg skal utrede en rusreform. Målet er at brukerne får riktig og rask hjelp uten å risikere straffeforfølgning. Regjeringen tar sikte på å legge frem en opptrappingsplan for barn og unges psykiske helse i løpet av høsten 2018 og en ny nasjonal helse- og sykehusplan i 2019. Regjeringen vil legge frem en folkehelsemelding hvor ensomhet blir et viktig tema. Den femte utfordringen er å redusere fattigdom. Arbeid er den beste måten den enkelte kan øke sin inntekt og velferd på. Regjeringen vil derfor forsterke arbeidslinjen. Økt satsing på kompetanse, inkludering og integrering skal støtte opp om den enkeltes innsats for å komme i jobb. Regjeringen vil gi barn som vokser opp i familier med lav inntekt bedre muligheter for utvikling og deltakelse i fritidsaktiviteter, barnehage og SFO, slik at de lettere kan stå på egne ben når de blir voksne. Regjeringen arbeider med en stortingsmelding om sosial bærekraft og hvordan vi reduserer forskjeller. Den sjette utfordringen er å gjennomføre et integreringsløft. Regjeringens mål er at innvandrere skal være en del av store og små fellesskap i det norske samfunnet. Regjeringen vil forbedre norskopplæringen og introduksjonsprogrammet for flyktninger for at flere raskere kan gå over til ordinært arbeid og utdanning. Deltagelse i idrett, kultur og frivillighet gir kompetanse og erfaring som kan tas med inn i arbeidslivet. For bærekraften i våre velferdsordninger er det sentralt at flere kan forsørge seg selv og delta i samfunnet. Derfor er det også nødvendig å regulere innvandringen. Den internasjonale migrasjonen er uforutsigbar. Vi må ha høy beredskap for raske skifter. Regjeringen vil føre en restriktiv, rettssikker og ansvarlig innvandringspolitikk. En viktig prioritet for regjeringen er å skape et tryggere samfunn. Vi må hindre at barn utsettes for vold og overgrep. Regjeringen vil styrke kompetansen i tjenestene, slik at vold og overgrep blir avdekket tidligere. Regjeringens arbeid med nærpolitireformen fortsetter. Reformen bedrer evnen til å hindre kriminalitet og verne om ofrene. For å kunne beskytte innbyggerne i krisesituasjoner, trengs det flere politifolk med god trening og rask tilgang på riktig og godt utstyr, biler og helikoptre. Regjeringen vil derfor styrke beredskapen og forebygge bedre. Kriminalitet knyttet til IKT krever ny kompetanse i politiet og samordnet innsats. Ny sikkerhetslov vil i større grad stille krav som verner om samfunnets grunnleggende funksjoner og befolkningens grunnleggende sikkerhet. Det nye sikkerhetspolitiske landskapet krever et troverdig forsvar. Regjeringen vil styrke Norges forsvarsevne gjennom oppfølging av langtidsplanen for forsvarssektoren og starte arbeidet med neste langtidsplan. NATOs kollektive garanti forblir bærebjelken i sikkerhetspolitikken. Samtidig styrkes samarbeidet med USA, Storbritannia, Tyskland og i Norden. Verden rundt oss preges av økende usikkerhet. Den liberale verdensorden, demokratiske institusjoner og troen på fri handel er under press. Vi må hegne om de verdiene vi står for. Brexit vil påvirke også Norge. Regjeringen vil arbeide for et fortsatt velfungerende EØS-samarbeid og videreføre vårt nære samarbeid med Storbritannia. Regjeringen vil øke forståelsen for at bærekraftig bruk av havet gir både bedre miljø og høyere verdiskaping. Det internasjonale havpanelet er et viktig initiativ. Regjeringen vil ta nye initiativ på en rekke områder. Sammen støtter initiativene opp om målet om et bærekraftig velferdssamfunn og arbeidet for å nå FNs bærekraftsmål. Jeg ber Gud velsigne Stortingets arbeid, og erklærer Norges 163. storting for åpnet.

In [2]:
tekst = 'Ærede President, Folkets representanter. Jeg hilser Stortinget velkommen til ansvarsfullt arbeid og ønsker at det må bli til gagn for fedrelandet. Den 17. januar ble regjeringen utvidet med partiet Venstre. Til grunn for utvidelsen ligger den politiske plattformen partiene ble enige om på Jeløya. Plattformen beskriver regjeringens mål om å skape et bærekraftig velferdssamfunn. Den beskriver også seks utfordringer for Norge som regjeringen vil arbeide med for å nå dette målet. Den første utfordringen er å omstille norsk økonomi for å skape nye arbeidsplasser og flere ben å stå på. Regjeringen vil bygge ut veier og jernbane for å fremme omstilling og vekst. Ny kunnskap styrker evnen til vekst. Regjeringen vil legge frem en revidert langtidsplan for forskning og høyere utdanning. For at ingen skal gå ut på dato, må vi gjøre mer for å oppdatere vår kompetanse. Regjeringen vil fremme tiltak for å la flere få mer opplæring mens de er i jobb. Den andre utfordringen er å oppfylle Norges klimaforpliktelser, slik at vi tar vår del av ansvaret. Sommeren 2018 kom med varmerekorder og tørke. Et mer ekstremt vær har blitt mer vanlig. Det er avgjørende at verden når sine klimamål. Norge skal oppfylle våre utslippsmål i samarbeid med EU. Parisavtalen er vårt viktigste internasjonale rammeverk. I desember vedtas kjøreregler for hvordan landene skal følge opp avtalen. Norge skal være pådriver. Bevaring av verdens regnskoger er avgjørende for å håndtere klimautfordringen. Regjeringen vil styrke dette viktige arbeidet. Regjeringen vil føre en politikk som skaper grønn vekst og nye grønne jobber. Regjeringen vil legge til rette for fortsatt fornyelse av bilparken. Den tredje utfordringen er å skape et inkluderende arbeidsliv. Regjeringens mål er et samfunn med små forskjeller, der alle kan delta og der alle gis muligheten til å bidra. Det største skillet i Norge går mellom de som er i jobb og de som står utenfor arbeidslivet. Flere må gis muligheten til å forsørge seg selv og sin familie gjennom lønnet arbeid. Den gode utviklingen i arbeidsmarkedet gir en god anledning til ekstra innsats. Regjeringen inviterer arbeidsgivere med på dugnad for å ansette flere som i dag står utenfor på grunn av nedsatt funksjonsevne eller hull i CVen. Den fjerde utfordringen er å sikre gode velferdsordninger i en tid hvor andelen eldre øker. Regjeringen vil gjennomføre reformen ”Leve hele livet”. Reformen skal gi eldre og deres pårørende økt valgfrihet, livskvalitet og trygghet. Regjeringen vil videreføre prøveordningen med statlig finansiert eldreomsorg. Tilbudet til utsatte mennesker i vårt samfunn, som rusavhengige og mennesker med psykiske lidelser, skal styrkes. Et offentlig utvalg skal utrede en rusreform. Målet er at brukerne får riktig og rask hjelp uten å risikere straffeforfølgning. Regjeringen tar sikte på å legge frem en opptrappingsplan for barn og unges psykiske helse i løpet av høsten 2018 og en ny nasjonal helse- og sykehusplan i 2019. Regjeringen vil legge frem en folkehelsemelding hvor ensomhet blir et viktig tema. Den femte utfordringen er å redusere fattigdom. Arbeid er den beste måten den enkelte kan øke sin inntekt og velferd på. Regjeringen vil derfor forsterke arbeidslinjen. Økt satsing på kompetanse, inkludering og integrering skal støtte opp om den enkeltes innsats for å komme i jobb. Regjeringen vil gi barn som vokser opp i familier med lav inntekt bedre muligheter for utvikling og deltakelse i fritidsaktiviteter, barnehage og SFO, slik at de lettere kan stå på egne ben når de blir voksne. Regjeringen arbeider med en stortingsmelding om sosial bærekraft og hvordan vi reduserer forskjeller. Den sjette utfordringen er å gjennomføre et integreringsløft. Regjeringens mål er at innvandrere skal være en del av store og små fellesskap i det norske samfunnet. Regjeringen vil forbedre norskopplæringen og introduksjonsprogrammet for flyktninger for at flere raskere kan gå over til ordinært arbeid og utdanning. Deltagelse i idrett, kultur og frivillighet gir kompetanse og erfaring som kan tas med inn i arbeidslivet. For bærekraften i våre velferdsordninger er det sentralt at flere kan forsørge seg selv og delta i samfunnet. Derfor er det også nødvendig å regulere innvandringen. Den internasjonale migrasjonen er uforutsigbar. Vi må ha høy beredskap for raske skifter. Regjeringen vil føre en restriktiv, rettssikker og ansvarlig innvandringspolitikk. En viktig prioritet for regjeringen er å skape et tryggere samfunn. Vi må hindre at barn utsettes for vold og overgrep. Regjeringen vil styrke kompetansen i tjenestene, slik at vold og overgrep blir avdekket tidligere. Regjeringens arbeid med nærpolitireformen fortsetter. Reformen bedrer evnen til å hindre kriminalitet og verne om ofrene. For å kunne beskytte innbyggerne i krisesituasjoner, trengs det flere politifolk med god trening og rask tilgang på riktig og godt utstyr, biler og helikoptre. Regjeringen vil derfor styrke beredskapen og forebygge bedre. Kriminalitet knyttet til IKT krever ny kompetanse i politiet og samordnet innsats. Ny sikkerhetslov vil i større grad stille krav som verner om samfunnets grunnleggende funksjoner og befolkningens grunnleggende sikkerhet. Det nye sikkerhetspolitiske landskapet krever et troverdig forsvar. Regjeringen vil styrke Norges forsvarsevne gjennom oppfølging av langtidsplanen for forsvarssektoren og starte arbeidet med neste langtidsplan. NATOs kollektive garanti forblir bærebjelken i sikkerhetspolitikken. Samtidig styrkes samarbeidet med USA, Storbritannia, Tyskland og i Norden. Verden rundt oss preges av økende usikkerhet. Den liberale verdensorden, demokratiske institusjoner og troen på fri handel er under press. Vi må hegne om de verdiene vi står for. Brexit vil påvirke også Norge. Regjeringen vil arbeide for et fortsatt velfungerende EØS-samarbeid og videreføre vårt nære samarbeid med Storbritannia. Regjeringen vil øke forståelsen for at bærekraftig bruk av havet gir både bedre miljø og høyere verdiskaping. Det internasjonale havpanelet er et viktig initiativ. Regjeringen vil ta nye initiativ på en rekke områder. Sammen støtter initiativene opp om målet om et bærekraftig velferdssamfunn og arbeidet for å nå FNs bærekraftsmål. Jeg ber Gud velsigne Stortingets arbeid, og erklærer Norges 163. storting for åpnet.'
In [3]:
## a) svar

ant_ord = 0 # Initierer counter for antallet

for i in range(len(tekst) - 1): # Itererer over alle tegnene i teksten
    if tekst[i + 1] == " " and tekst[i] != " ": # Hvis det neste tegnet etter gjeldende tegn (i+1) er et mellomrom, og hvis 
                                                # gjeldende tegn ikke er et mellomrom
        ant_ord += 1 # Legg 1 til antallet

if tekst[-1] != " ": # Hvis det siste tegnet ikke er et mellomrom
    ant_ord += 1 # Legg til 1 i lista (for å få med det siste ordet)
    
print('Antall ord:', ant_ord) 
In [4]:
## b svar

ant_setn = 0 # Initierer counter for antallet

for i in range(len(tekst) - 1): # Itererer over alle tegnene i teksten
    if tekst[i + 1] == "." and tekst[i] != ".": # Hvis det neste tegnet etter gjeldende tegn (i+1) er et punktum, og hvis 
                                                # gjeldende tegn ikke er et punktum
        ant_setn += 1 # Legg i til i antallet
    
print('Antall setninger:',ant_setn)
In [5]:
## c svar

ordPrSetn = ant_ord/ant_setn # Finner gjennomsnittlig ord pr setning
print('Gj.snittlig ord pr setning var: ', format(ordPrSetn,'.1f'))
In [13]:
## d svar

# Initierer en dict med bokstavene det skal letes etter
bokstaver = {'a':0,'b':0,'c':0,'d':0,'e':0,'f':0,'g':0,'h':0,'i':0,'j':0,\
            'k':0,'l':0,'m':0,'n':0,'o':0,'p':0,'q':0,'r':0,'s':0,'t':0,\
            'u':0,'v':0,'w':0,'x':0,'y':0,'z':0}

for c in tekst: # Itererer over alle tegnene i teksten
    if c.lower() in bokstaver: # Gjør alle bokstavene i teksten til lowercase
        bokstaver[c.lower()] += 1 # Plusser 1 på bokstaver som finnes
        
    elif c.lower not in bokstaver: # Hvis tegnet ikke finnes i den opprinnelige dict'en, ikke gjør noe
        pass
        
    else: 
        pass
    
# For hver value,key-par (v,k) i dictionaryen 'bokstaver', returner en tuple der value er det første elementet. Da kan
# tuplene sorteres med "sorted" funksjonen, siden den sorterer på det første elementet i hver tuple.
sortert = sorted([(k,v) for v,k in bokstaver.items()], reverse = True)

print(sortert)