Programmering i Python – vurderingseksemplar

Page 1

PROGRAMMERING I PYTHON

TILVURDERING

Knut Skrindo Øystein Johannes Weider ALGORITMER OG KODE

TILVURDERING

2

PROGRAMMERING IPYTHON

TILVURDERING

KnutSkrindo ØysteinJohannesWeider
ALGORITMEROGKODE

©LærebokforlagetDA,2023 1.utgave,1.opplag

ISBN978-82-693330-0-8

Gra skproduksjon:BokstavogBildeAS,Drammen TrykketiLatviapåmiljøvennligpapir.

Design:MarianneCecilieDahl/mcddesign.no Omslagsdesign:MarianneCecilieDahl/mcddesign.no Omslagsfoto:GlitchLabApp,Unsplash Satsoglayout:KnutSkrindoogØysteinWeider Konsulenter:HaraldWeider,MatheaSwenssonogMariaSkrindo Figurer:KnutSkrindo,ØysteinWeiderogPython(www.python.org)

Bildekrediteringer:

Side6MonicaWillard/Unsplash,14ScottBroome/Unsplash,16/KhoiDoUnsplash,20LucaBravo/Unsplash,36Nick Hillier/Unsplash,44RandallRuiz/Unsplash,84MathewSchwartz/Unsplash,93Unsplash+,104KierinSightArchives/ Unsplash,116MichaelDziedzic/Unsplash,123SergioMedina/Unsplash,139JasonLeung/Unsplash,182RobertStump /Unsplash,190ReneBöhmer/Unsplash

Materialetidennebokaerbeskyttetetteråndsverklovensbestemmelser.Enhverkopiering,avfotograferingeller annenformforeksemplarframstillingogtilgjengeliggjøringavmaterialetidennebokaerkuntillattdersomdet nnes lovhjemmelellererinngåttsærskiltavtalemedLærebokforlagetDA.

ForfatterneharmottattstøttefraNorskfaglitterærforfatter-ogoversetterforening.

TILVURDERING

Henvendelserombokakanrettestil: LærebokforlagetDA post@larebokforlaget.no www.lærebokforlaget.no

Forord

ProgrammeringiPython–algoritmerogkode erenheltnyskrevetlærebok iprogrammeringforungdomsskoleogvideregåendeskole.

IlæreplanenKunnskapsløftet2020bleprogrammeringinnførtsomen obligatoriskdelavundervisningenimatematikk.Dennyeeksamensordningenharvistateleveneogsåblirtestetiprogrammeringpå eksamenimatematikk.

Eleveriungdomsskoleogivideregåendeskoletrengergrundig opplæringiprogrammeringiPython.Elevenetrengeråkjennenoen sentralealgoritmerogåsehvadekanbrukestil.Itilleggtrengerde oppgaverdekanøvepå. ProgrammeringiPython–algoritmerogkode møterdettebehovet.

Bokabeståravtredeler:Førstedelgireninnføringigrunnleggendeprogrammering.Bokatrekkerlinjertiltidligereerfaringereleveneharmed fytskjemaerogmedprogrammeringiScratch.Gjennomstrukturerte eksemplerogvarierteoppgaverfåreleveneetgodtgrunnlagforvidere programmering.Bokasandredelomhandlersentralealgoritmerog teknikkeriprogrammering.Flereavalgoritmeneintroduseresgjennom fysiskeaktiviteterelevenekangjøreiklasserommet.Algoritmeneer beskrevetutenkravtilhøyerematematisknivå,slikatdepassergodt forbådeungdomsskoleogvideregåendeskole.Tredjedelinneholder anvendelserogerhentetfraulikedeleravlæreplanen.Her nner dublantannettallteori,modelleringogfunksjonslære,økonomiog simuleringavstokastiskeforsøk.Defestetemaeneegnersegforbåde ungdomsskoleogvideregåendeskole.

Bokaerutstyrtmedkodeforslagtilalleoppgaveneiboka.

Påbokasegetnettstedwww.lærebokforlaget.no nnerdu lmermed gjennomgangavalleeksemplerogutvalgteoppgaveriboka.

Vihåperbokainspirererlærereogelevertilåløfteprogrammeringeni norskeklasseromtilnyehøyder.

OsloogJessheim,september2023

KnutSkrindo og ØysteinJohannesWeider

TILVURDERING

Innhold KAPITTEL1 ViprogrammereriPython..............6 1.1Komigang.........................8 1.2Tall,regningogvariabler..........10 1.3Input................................21 1.4Vilkår...............................24 1.5Løkker..............................31 1.6Turtle...............................46 1.7Lister................................51 1.8Funksjoner.........................57 1.9Anvendelseritallteori.............64 1.10Tallmønstre........................73 1.11Feilmeldinger......................79 1.12Ekstrabiblioteker..................83
TILVURDERING
KAPITTEL2 Algoritmer...............................84 2.1Løpegjennomlister...............86 2.2if-tester.............................90 2.3Størsteverdi........................94 2.4Kombinasjoner.....................98 2.5Sjekkalle...........................102 2.6Sortering...........................105 2.7Søkmedhalvering.................109 2.8Strengoperasjoner.................112 2.9Størrealgoritmer..................114 KAPITTEL3 Vibrukerprogrammeringen...........116 3.1Rekursivemønstre.................118 3.2Gra skframstilling.................124 3.3Datafraeksternekilder............136 3.4Funksjoneribruk..................140 3.5Økonomi...........................167 3.6Simulering.........................171 Oppgaver.................................190 Løsninger.................................200 Stikkord...................................254 TILVURDERING

Viprogrammerer iPython TILVURDERING

[1]

Åprogrammerebetyråskriveinstruksjoner tilenPComhvasomskalskje.Dettelikner littpåålageenmatoppskrift.Duskriveralle instruksjonersomskaltilforatenannen personskalkunnelagedensammeretten. ViskriverinstruksjoneneiPythonogsiervi programmerer.

TILVURDERING

Programmeringsspråk

Blokkbaserte:Scratch, Blockly

Tekstbaserte:Python, Javascript,C++,PHP, Swift,Ruby,Go

Devanligsteprogrammeringsmiljøene

Etegetprogram:

Spyder,Thonny, Mu,PyCharm, Pythonista,Pyto ogandre

Etnettbasert program:Replit, Trinket,Programiz ogandre

Etdokumentfokusertprogrammeringsmiljø: JupyterNotebook

1.1Komigang

Vimenneskersnakkermangeforskjelligespråk.Påsammemåte nnesdetenrekkeulikespråkvikanprogrammerei.Idenneboka programmererviiPython.

Nårduskriverentekst,tegnerengrafellerredigereretbildepåPC-en, brukerduulikeprogrammer,foreksempelWord,GeoGebra,Paintog andre.TilsvarendekanviskrivePython-kodeifereprogrammereller miljøer,foreksempelSpyderellerThonny.SelvePython-kodenerden sammeuansetthvorviskriverden,mendeulikeprogrammeringsmiljøeneharlittforskjelligefordelerogulemper.

Etprogrammeringsmiljøbeståravtodeler–ettekstvindu,hvordu skriverselvePython-koden,ogetvindu,derresultatetfraprogrammet kommer.Dettevinduetkalleskonsollen.Hvordandetteserutvariererfra programtilprogram.NedenforserdustandardvinduettilSpyder:

Tekstvinduet

Konsollen

TILVURDERING

ISpyderertekstvinduettilvenstreogkonsollennedersttilhøyre. Øversttilhøyrekanduvelgemellomfaner,deriblantenoversiktover variablene.IThonnyertekstvinduetøverstogkonsollennederst.Til høyrekanduforeksempelvelgeåviseenoversiktovervariablene.

8 KAPITTEL1

Konsollen

Vikanregneikonsollenpåsammemåtesomvigjørpåenkalkulator.Vi regnerut3 + 4vedåskrivedetinnikonsollenogtrykkerpåenter:

Vifårat3 + 4 = 7.Nårviskriverlangkode,erdetimidlertidmerpraktisk åskriveitekstvinduet.Nårviønskeråviseetresultat,sendervidettil konsollenmedkommandoen print(<detduskalprinte>) Heretterprogrammererviderformestitekstvinduet.

Dittførsteprogram

Itekstvinduetskrivervi:

1 print('Programmering er gøy!')

Derettertrykkervipåknappenmerketmed«Run le»/«Runcurrent script»ellerliknende.OfteerdetetgrøntsymbolsomliknerpåenPlayknapp: .Dakommerfølgendetekstoppikonsollen:

Programmeringergøy!

Gratulerer,duharnåskrevetdittførsteprogramiPython!Programmeter påbareénlinjeoginneholderkunkommandoen print,sammenmed tekstensomskalvises.

TILVURDERING

Komigang 9
Tekstvinduet Konsollen
In[1]:3+4 Out[1]:7

1.2Tall,regningogvariabler

Tallogregning

Somvisåovenfor,brukervi print tilåsendeteksttilkonsollen.Vi kallerdetgjerneåskrivetilskjermelleråprinte.Detskjeringentingi konsollenutenatvibruker print-kommandoen.Såhvisvivilhasvareti etregnestykkeskrevettilkonsollen,måviprintesvaret.

::: EKSEMPEL1.1

Regnut.

a)23 · 5

b) 2 + 8 11

LØSNING

Viskriveretprogramsomregnerut.

1 print(23*5)

a)

Nårvikjørerprogrammet,fårvi115ikonsollen.

1 print(2+8‑11)

b)

Nårvikjørerprogrammet,fårvi 1ikonsollen.

Programmeringengirennaturligstrukturpåarbeidet.Viskriver utregningeroginstrukseritekstvinduet,ogbruker print-kommandoen tilåstyrehvasomblirsynligikonsollen.Eksempeletoverviserat tegneneforde reregnearteneerdesammesomdepleieråværepåen datamaskin.Tegneneformultiplikasjonogdivisjonvirkerpådetallene somstårumiddelbartforanogbaktegnet:

3+4*5‑3/6‑1 betyr3 + 4 5 3 6 1

Detbetyratmultiplikasjonstegnetvirkerbarepå4og5,mensdivisjonstegnetvirkerpå3og6.Hvisviskalavvikefradette,brukerviparenteser.

::: EKSEMPEL1.2

TILVURDERING

Regnut3 + 4 + 7 2 + 1.

10 KAPITTEL1

LØSNING

Visetterparantesrundttelleren,sidendenharfereledd:

1 print(3+(4+7)/2+1)

Hvisvikjørerdetteprogrammetfårvi9,5.

Viskriverpotensermeddobbeltgangetegn.Detbetyrat23 skrivessom

2**3 og52 skrivessom 5**2.

IPythonbrukervipunktumsomdesimalkomma.

::: EKSEMPEL1.3

Regnut34,2442 18,441 + 2 · 312 .

LØSNING

Vibrukerpunktumsomdesimalkommaogskriverinn:

1 print(34.2442‑18.441+2*3**(12))

Nårvikjørerprogrammet,fårvi1062897,80.

Detervanligåbrukeetmellomrompåhversideavtegneneforplussog minus,menikkevedmultiplikasjonogdivisjon.Detteerimidlertidforat detskalværelettereåleseogsehvasomhørersammen,ogharingen efektpåhvordanPythontolkerdet.

Utskriftavtekst

Nårviskalskriveenteksttilkonsollen,brukervianførselstegn.

::: EKSEMPEL1.4

Skriv«Jeglikeråtelle.»tilkonsollen.

LØSNING

Vibrukerenkleellerdobleanførselstegnrundtteksten,inni printkommandoen:

1 print('Jeg liker å telle.')

addisjon: +

subtraksjon: ‑

multiplikasjon: *

divisjon: / potens: **

TILVURDERING

Tall,regningogvariabler 11

Vikallerdetsomstår inniparentesentil enkommandoforet argument.

Nårvikjørerprogrammet,blirteksten«Jeglikeråtelle.»skrevetut: Jeglikeråtelle.

Hvisviskalskriveutfereting,kanvibrukefere print-kommandoer:

1 print('Arealet av trekanten er ')

2 print(0.5*3*5)

Ulempenmeddetteeratvifårlinjeskiftetterhver print-kommando:

Arealetavtrekantener

7.5

Dettekanvi ksevedåleggetiletekstraargumenttil print,nemlig «end».Hvisviikkeskrivernoe,gir«end»etlinjeskifttilslutt.Hvisvivilha etmellomrom,skriverviforeksempel print(3+4,end=''):

::: EKSEMPEL1.5

Enrettvinklettrekanthargrunnlinje3oghøyde5.Bestemarealet.

LØSNING

1 print('Arealet av trekanten er', end='')

2 print(0.5*3*5)

Nårvikjørerprogrammet,fårvi

Arealetavtrekantener7.5

Vioppnårdetsammemedetkommamellomhvertingvivilprinte:

1 print('Arealet av trekanten er',0.5*3*5)

Dettegirsammeoutput:

TILVURDERING

Arealetavtrekantener7.5

12 KAPITTEL1

Kvadratrotog π

DefestekommandoervitrengererinnebygdiPython.Avogtiltrenger viitilleggålasteinnekstrakommandoer,somliggerlagretisåkalte biblioteker.Vilasterinnbibliotekenemedkommandoen import:

1 import math

KommandoenilinjaoverlasterinnbiblioteketMath.Dettebiblioteket inneholdervanligefunksjonerogsymboler,somblantannetkvadratrot og π.NårviskalbrukekommandoerfraMath-biblioteket,skrivervi «math.»forankommandoen.Kvadratrotfårvidamedkommandoen sqrt() med math. somforstavelse.

::: EKSEMPEL1.6

Regnut √2.

LØSNING

1 import math

2 print(math.sqrt(2))

Nårvikjørerprogrammet,fårvi1,4142135623730951tilsvar.

Math-biblioteketmålastesinnialleprogrammerderviskalbrukedet. Hvisviskalbrukekonstanten π,skrivervi math.pi.

::: EKSEMPEL1.7

Beregnarealetavensirkelmedradius3.

LØSNING

1 import math

2 print(math.pi*3**2)

Vikjørerprogrammetogfåratarealeteromtrent28,274.

TILVURDERING

Tall,regningogvariabler 13

1.3

Lagetprogramsomskriverutteksten«Their songplayed.Theydancedforever.».

1.4

LagetprogramiPythonsomregnerut

1.5

LagetprogramiPythonsomregnerut volumetavensylindermedradius4,5cmog høyde17,8cm.

1.6

SkrivetprogramiPythonsomregneruten desimaltilnærmingav 1 + √5 2 .

1.7

Arealetavettrapesmedhøyden h ogder sidene a og b erparallelle,er A = (a + b) · h 2

SkrivetprogramiPythonsomregnerut arealetavettrapesderdeparallellesidelengdeneer14,3cmog10,4cmoghøyden er13,6cm.

TILVURDERING

14 KAPITTEL1
OPPGAVER
97,2
3
11,13
88
45 12
6
1.1 BrukPythontilåregneut
+
·
1.2 LagetprogramiPythonsomregnerut
·
·
sammenmedenforklarendetekst.
3 3
8 3
5
+
+

KanvistolepåPython?

NårviprogrammereriPython,virkerendeltinglittuvantogforvirrende istarten.Eteksempelerdesimaltall.Kanvistolepåalledesimalene Pythonviseross?

Viregnerlittikonsollenforåsjekke:

In[1]:0.1+0.1

Out[1]:0.2

Detteersomforventet,siden0,1 + 0,1 = 0,2.Menseher:

In[2]:0.1+0.1+0.1

Out[2]:0.30000000000000004

Detteserrartut!Vivetjoat0,1 + 0,1 + 0,1 = 0,3,ogikke 0,30000000000000004.

Detvisersegatvibarekanstolepåca.15–16sifreiPython.Altsom kommerettermåvibaresebortfra.Slikerdetiandredataprogrammer også,somforeksempelGeoGebraogExcel,mendetteblirvanligvis skjultfoross.

Årsakentildette,eratPC-enharbegrensetantalltalltilgjengelig.Det eringengrenserforhvilketallvikanskriveinniPython,menPC-enhar ikkeuendeligmangetalldenkanbruke.Noenharderfortattetvalg,og PC-enharca.15–16sifrevikanstolepå.

Variabler

Nårviregnerpåenkalkulatorellerietmatematikkprogramsomfor eksempelGeoGebra,regnerviettogettregnestykke,linjeforlinje.Vi brukerdetsvaretvifårvidereiutregningen.Vitenkerossforeksempel atLarsskalmaleenstorveggpåskolen.Veggener8mlangog4mhøy. Veggenskalmalesmedtrestrøkavenmalingsomdekker6L/m2 .Hvor myemalingtrengerhan?Viregnerslik:

Arealetavveggen:8 · 4 = 32

Arealsomskalmales:32 · 3 = 96

TILVURDERING

Mengdemaling:96 : 6 = 16

Larsmåaltsåkjøpe16Lmaling.

Tall,regningogvariabler 15

Nårviskalprogrammeredette,girviegnenavntildeulikesvarene underveisiutregningen.Dissenavnenekallervi variabler .Koden

nedenforregnerutdetsamme:

1 vegg =8*4

2 areal = vegg*3

3 maling = areal/6

4

5 print(maling)

Nårvikjørerprogrammet,fårvi16tilsvar.

Variablereraltsåenmåtevikantavarepåmidlertidigeverdier,slikatvi kanbrukedemvidereiprogrammet.

TILVURDERING

16 KAPITTEL1

IPythonopprettervivariablervedåtilordneenverdivedhjelpav likhetstegnet.

1 svar =15+3

Nårvikjørerkodenovenfor,fårvariabelen«svar»verdien18.

Mariaplanleggerentreningsøkt.Hunskalvarmeopp18minutter. Deretterskalhunha5 × 4minintervallermed2minutterspause mellomhvertintervall.Tilsluttharhunnedjogg10minutter. Hvorlangtidvarertreningsøkta?

LØSNING

ViskriveretprogramiPythonsomregneruttiden:

1 oppvarming =18

2 intervalltid =5*4

3 pausetid =4*2

4 nedjogg =10

5 totaltid = oppvarming + intervalltid + pausetid + nedjogg

6 print('Treningsøkta tar', end='')

7 print(totaltid, end='')

8 print('minutter.')

Nårvikjørerprogrammetfårvidetteresultatet:

Treningsøktatar56minutter.

Vikangodtbrukevariabelensforrigeverdinårvitilordnernyverditilen variabel.

1 svar =15

2 svar = svar +5

3 print(svar)

TILVURDERING

Nårvikjørerkodenovenforblirførstvariabelen«svar»opprettetmed verdien15.Deretterblirverdiensatttildenverdienvariabelenhadde tidligere,addertmed5.Resultatetnårvikjørerprogrammetblir20.

Tall,regningogvariabler 17

Dissereglenegjelderforhvilketegnvikanbruketilvariabler:

Vikanbrukevanlige bokstavera–å,A–Å.

Vikanbruketall0–9,men ikkeistartenavenvariabel.

LOVLIGNAVN ULOVLIGNAVN

startellerSTART terningto

start1

3et Vikanbrukeunderstrek(«_»). start_1

start-1

Noennavneropptatt summen sum Pythonleserkodenovenfraognedover,fravenstremothøyre.Nårvi printerenvariabel,spillerdetingenrolleomvariabelenskifterverdipået seneretidspunkt.Ikodennedenforharvariabelen«svar»verdien15når denblirprintet,sådeteraltsåtallet15somkommerikonsollen.Ilinjen nedenforblirverdienendrettil30,mendetvisesikkeikonsollen.

1 svar =15

2 print(svar)

3 svar = svar*2

Mangeprogrammeringsmiljøerharmulighettilåviseenoversiktover hvilkenverdivariableneharnårprogrammeterferdig.Detteeroftetil godhjelp.ISpyderheterdennevisningen«VariableExplorer».Etterå kjørtprogrammetovenfor,serdenslikut:

Dettebetyratvariabelen«svar»harverdien30nårprogrammeterferdig.

Skriveuttekstogvariablersammen

Nårvibrukerprogrammeringtilåløsematematikkoppgaveravsluttervi gjerneprogrammetmedåskriveutverdienavenvariabelsammenmed enforklarendetekst.Dettekanvigjørepåferemåter.

Enmuligheteråprintetekstenogvariabelenisammekommando,atskilt medkomma:

TILVURDERING

1 svar =15

2 print('Svaret er', svar)

Nårvikjørerdetteprogrammet,fårvi«Svareter15»ikonsollen.

18 KAPITTEL1

Enannenmåteeråbrukeetsåkaltf-literal,enformaterttekst.Denne lagervivedåsettebokstaven«f»foranetanførselstegn.Nårvisåskal setteinnenvariabel,setterviparentesene«{»og«}»rundt:

1 tall1 =43

2 tall2 =6

3 print(f'Tallene er {tall1} og {tall2}.')

Nårvikjørerdetteprogrammet,fårvi

Talleneer43og6.

Avrunding

Virunderenklestavmedenf-literal.Rettførhøyreparentes«}»setter vietkolonogetpunktum.Deretterskrivervihvormangedesimalervi ønsker,etterfulgtavbokstaven«f».

::: EKSEMPEL1.9

Regnut 13 7 ogrundavtiltredesimaler.

LØSNING

1 tall =13/7

2 print(f'Variabelens verdi er {tall:.3f}.')

Nårvikjørerprogrammetfårvi

Variabelensverdier1.857.

Kommandoen round(<variabel>,<antalldesimaler>) eren annenmåteårundeavpå.Vibrukerdenslik:

1 svar =13/7

2

3 print(round(svar,3))

Kodengirsvaret1,857.Viseratdetførsteargumentettil round ertallet somskalrundesav,mensdetandreargumenteterantalldesimaler.

«f»stårfor« ksert (bestemt)antall desimaler»

TILVURDERING

Tall,regningogvariabler 19

1.8

Lagetprogramhvordusettervariabelen «svar»til28ogskriverutverdienavvariabelenmedensvarsetning.Resultatetav programmetskalbli:

1.9

OPPGAVER

Verdienavsvarer28.

Lagetprogramderduopprettervariabelen «tall»,dividererpå2ogskriverutsvaret.

1.10

Regnut23 : 7ogrundavtiléndesimali svaret.

1.11

Velgtotallmellom2og20.Skrivetprogram derduleggerdetotalleneivariablene a og b.Programmetskalskriveuthenholdsvissummen,diferansenogproduktetav

talleneihversinsvarsetning.Foreksempel «Summenav2og5er7».

1.12

EnsommerukekjørerJohannebåtensini omlag17timer.Båtenforbukeromtrent7 literbensinpertime.Bensinprisenerdenne uka26kronerperliter.

BrukPythontilåregneuthvormyebensinforbruketkosterdenneuka.

1.13

Skrivetprogramsom:

Opprettervariabelen«tall»medverdien 5

Endrerverdientil10

Leggertil11

Leggertil6

Dobler

Skriverutverdien

TILVURDERING

20 KAPITTEL1

1.3Input

Viharnålærtatvifårresultateneutfraetprogramoginnikonsollen medkommandoen print.Tilsvarendefårviopplysningerfrakonsollen inniprogrammetmedkommandoen input.

input() print()

Nedenforserduhvordanvikanbruke input-kommandoen:

1 navn = input('Skriv inn navnet ditt:')

2 print(f'Du heter {navn}.')

Nårvikjørerdetteprogrammet,kommerførstdetteoppikonsollen:

Skrivinnnavnetditt:

Hvisvidaskriver«Markus»ikonsollen,blirdettenavnetlagretivariabelen«navn»ilinje1iprogrammet.

Nårvitrykket«enter»,blirnavnetskrevetutmedensvarsetningfralinje2 iprogrammet:

DuheterMarkus.

Typer

Pythonoppfattertallogtekstpåforskjelligmåte.Vikanseeteksempeli detteprogrammet:

1 a =13

2 print(2*a)

3 b= 'matematikk'

4 print(2*b)

Nårvikjørerprogrammet,fårvidette:

TILVURDERING

Input 21
INN UT program
26 matematikkmatematikk

Ieksempeletser

dudetvikaller

kommentarertil

koden.Pythonhopper overaltsomkommer

ettertegnet«#»på enlinje.Detgjørat

vikanskrivesmå forklaringertilkoden.

Detvisersegaltsåatgangetegnet * betyruliketingfortallogtekst.Når detblirbruktpåtall,fungererdetsomvanligmultiplikasjon,mensnår detblirbruktpåentekst,blirtekstenrepetertlikemangegangersom talletsier.

Ivariabeloversiktenserviforskjellenpådetovariablene«a»og«b»:

Variabelen«a»eravtypen int,somerenforkortelsefor integer,altså detengelskeordetforheltall.

variabelen«b»eravtypen str fradetengelskeordet string,som betyrstreng,tekststrengellertekst.

TYPE ENGELSK NORSK str string streng,tekststreng,tekst int integer heltall float foating-pointnumber desimaltall,fyttall

Resultatetav input-kommandoenbliralltidtolketsomen str.Dersom detskalværeettall,måvimanueltgjøredetomtil int eller float. Kommandoeneforågjøreomtilenannentypeheterdetsammesom typen.Viserhvordanvikangjøredetteieksempeletnedenfor.

::: EKSEMPEL1.10

Skrivetprogramsomberomettallogsådoblertallet.

LØSNING

Vilagrerresultatetav input-kommandoenienvariabel,og oversettertildesimaltallmed float:

1 # Ber omet tall

2 tall = input('Skriv inn et tall:')

TILVURDERING

3 # Konverterer til float

4 tall = float(tall)

22 KAPITTEL1

5 # Dobler

6 dobbelt =2*tall

7 print(f'Det dobbelte av {tall} er {dobbelt}.')

Nårvikjørerprogrammetfårviteksten«Skrivinnettall:»i konsollen.Dersomviskriverinn«12.3»ogtrykkerpåenter,ser detslikut;

Skrivinnettall:12.3

Detdobbelteav12.3er24.6.

Dersomvibytterut float med int ieksempeletover,vilprogrammet barefungeremedheltall.Hvisviskriverinnetdesimaltall,vilvifåen feilmelding.

ValueError:invalidliteralforint()withbase10: '12.3'

1.14

Lagetprogramsomberometnavnogså svarermedenhilsenmeddettenavnet.

1.15

Lagetprogramsomberomettallog skriveruthalvpartenavtallet.

1.16

Lagetprogramsomberomradiusien sirkelogsåsvarermedarealetavsirkelen.

1.17

Lagetprogramsomberomlengdeog breddeietrektangelogsomsåskriverut arealetogomkretsenavrektangelet.

OPPGAVER

1.18

a)Lagetprogramderduberomettall. Programmetskalskriveut7merenn detdobbelteavtallet.

b) Lagetnyttprogramderduforandrer mønsteret.Foreksempelkanprogrammethalveretalletogleggetil re.Fåenannentilåforeslåettall. Programmetskriveruthvilkettallsom hørersammenmeddettetallet.Gjenta helttildenandreforstårmønsteret.

1.19

TILVURDERING

Lagetprogramsomberomhøydeog grunnlinjeientrekantogsvarermed arealetavtrekanten.

Input 23

1.4Vilkår

Vilkårhandleriprogrammeringomåbrukeentesttilåavgjørehva programmetskalgjøre.Iprogrammetnedenforsjekkerviomtallet brukerentasterinnerpositivt.

1 tall = input('Skriv inn et tall:')

2 tall = float(tall)

3

4 if tall >0:

5 print(f'Tallet {tall} er positivt.')

Nårvikjørerdetteprogrammet,blirvibedtomåskriveinnettall.Svaret vigirbliroversatttil float oglagtivariabelen«tall».SåtesterPython om«tall»erpositivt.Hvistalleterpositivt,blirdetskrevetutentekst omattalleterpositivt.Dersomvikjørerprogrammetogskriverinnfor eksempel17,såvildetseslikut:

Skrivinnettall:17

Tallet17.0erpositivt.

EnsliktestkallerviiPythonen if-test.Programmetovenforkanutvides medeninstruksjonomhvasomskalutføresdersomtesten ikke ersann. Loddrettunder if kanviskrive else:,sombetyr«ellers».

1 tall = input('Skriv inn et tall:')

2 tall = float(tall)

3

4 if tall >0:

5 print(f'Tallet {tall} er positivt.')

6 else:

7 print(f'Tallet {tall} er ikke positivt.')

Etterenif-teststårdet alltidetkolon. Ikodenovenforblirlinje5utførthvistestenersann,menslinje7blir utførthvistestenikkeersann.

TILVURDERING

Ienif-testkanvibrukedissetegnene:

24 KAPITTEL1

TEGN BETYDNING

< Mindreenn

<= Mindreennellerlik

> Størreenn

>= Størreennellerlik

== lik

!= ikkelik not() motsattbetydning

Skrivetprogramsomberomettallogsjekkeromtalleteråtte.

LØSNING

Vibruker input foråbeomettall.Såkonverterervisvarettil desimaltallmed float.En if-testavgjøromtalleteråtte.

1 # Ber omet tall

2 tall = input('Skriv inn et tall:')

3 # Konverterer til float

4 tall = float(tall)

5

6 # Avgjør om tallet er 8

7 if tall ==8:

8 print('Du har skrevet inn tallet 8.')

9 else:

10 print('Du har skrevet innnoe annet enn 8.')

Kodenieksempeletovenforkanviillustrereietsåkalt fytskjema. Flytskjemaetviserenoversiktoverhvaprogrammetgjør:Førstfår variabelen«tall»enverdi.Deretterblirsvaretenten«taller8»eller«taller noeannetenn8»,avhengigavomtesten«tall==8»ersannellerusann.

TILVURDERING

tall tall == 8 janei tall er noe annet enn 8 tall er 8

IPythonbrukervi«=» nårvitilordneren verditilenvariabel og«==»foråsjekke omtoutsagnerlike.

Vilkår 25
::: EKSEMPEL1.11

Ienif-testkanviogsåhaferevilkår.Dakombinerervikommandoene else og if ogskriver elif.Detteerenforkortelsefor else–if.

Vikanutvideforrigeeksempelslikatprogrammetavgjøromtallet brukerenskriverinnerlikåtte,størreennåtteellermindreennåtte:

Gjørendringerikodenfraeksempel11slikatdetsjekkeromtallet erlikåtte,størreennåtteellermindreennåtte.

LØSNING

Vileggerinn elif mellom if og else ikodenforåsjekkeom talleterlikåtte,størreennåtteellermindreennåtte.Selinje9.

1 # Ber omet tall

2 tall = input('Skriv inn et tall:')

3 # Konverterer til float

4 tall = float(tall)

5

6 # Avgjør om tallet er 8

7 if tall ==8:

8 print('Du har skrevet inn tallet 8.')

9 elif tall >8:

10 print('Du har skrevet innett tall som er større enn 8.')

11 else:

12 print('Du har skrevet innett tall som er mindre enn 8.')

Vikankombinereutsagnitestenmedkonjunksjonene and og or, sombetyrhenholdsvis«og»og«eller».Itabellennedenforserdunoen eksemplerpåtester.

TILVURDERING

DetosannhetsverdienesannogusannheteriPythonhenholdsvis True og False.Alletesterblirevaluerttilenten True eller False

26 KAPITTEL1
::: EKSEMPEL1.12

TEST VERDI

2==1+1 sann Høyreogvenstresideerlike.

2==1+2 usann Venstresideer2,høyresideer3

3<6 sann 3ermindreenn6

not(3<6) usann Deterikkesantat3ikkeer mindreenn6

3>6 usann 3erikkestørreenn6

not(3>6) sann Detersantat3ikkeerstørreenn 6

2>1and6>3 sann Beggeersanne

2>1and6<3 usann 6erikkestørreenn3,såbeggeer ikkesanne

2>1or6<3 sann Minsténavdemersann,nemlig denførste.2erstørreenn1.

Innrykk

Vileggermerketilatlinjeneumiddelbartetter if, elif og else er rykketinnfravenstremarg.Innrykketvisernår if-testenerferdig.

1 tall = float(input('Skriv inn et tall:'))

2 if tall <10:

3 print('Tallet er mindre enn10.')

4 else:

5 print('Tallet er ikke mindre enn10.')

Idetoprogramkodenenedenforerenesteforskjellatkodentilhøyrehar etinnrykkistartenavlinje6.Idenførstekodenblirlinje6utførtuansett: Vikanbådehenteinn informasjonoggjøre detomtiletheltall ellerfyttallpåénlinje vedåskrive«tall= int(input(’Skrivinnet heltall:’))»eller«tall= foat(input(’Skrivinn ettall:’))»

Idennekodenblirlinje6utførtbarehvistestenilinje2erusann:

6 print('Dette er sistelinje.')

1 tall = float(input('Skriv inn et tall:'))

2 if tall <10:

3 print('Tallet er mindre enn10.')

4 else:

TILVURDERING

5 print('Tallet er ikke mindre enn10.')

6 print('Dette er sistelinje.')

Denøverstekoden,uteninnrykk,girdetteresultatet:

Vilkår 27

Skrivinnettall:5

Talletermindreenn10. Detteersistelinje.

Dennederstekodengirdette: Skrivinnettall:5 Talletermindreenn10.

FRABLOKKTILTEKST

En if-testiPythontilsvarerenstyringsblokkmed«hvis»iScratch: Scratch-programmetnedenforsetterførstvariabelen«tall»til10. Derettersjekkerprogrammetom«tall»erstørreenn10.Hvisdet erdet,sendesmeldingen«ja».Hvisdenikkeerdet,spilleslyden «mjau». når klikkes

sett tall til 10

hvis tall > 50 ellers

sendmelding ja startlyden mjau

DettetilsvareromtrentPython-programmetnedenfor:

1 tall =10

2

3 if tall >50:

4 print('ja')

5 else:

6 print('mjau')

TILVURDERING

Istedetforåsendemeldingogspilleavenlyd,brukerdette programmet print.

28 KAPITTEL1

Tallteori,delelighet

Nårviutførerdivisjonforhånd,erdetikkealltiddivisjonengåropp.Da fårvienrest.Hvisviforeksempeldividerer43på5fårvi8heleog3irest. Pythonharegneoperatorersomregnerutdisse,nemlig«//»og«%».Vi prøvervårteksempel: Enoperatorerettegn ellerkombinasjonav tegnsomuttrykkeren regneoperasjon,for eksempel+,-,*,/,**, //,%.

1 print(43//5)

2 print(43%5)

Nårvikjørerprogrammetfårviat 43//5 er8og 43%5 er3.Detbetyrat «//»girantallheleveddivisjonen,mens«%»girrestenveddivisjonen.

Hvisettallerdeleligmedetannettall,errestennull.Vikanderforbruke «%»tilåtestedelelighet.

::: EKSEMPEL1.13

Skrivetprogramsomberomettallogsåundersøkeromtalleter deleligmed3.

LØSNING

1 tall = int(input('Skriv inn et heltall:'))

2

3 # Tester omvi får null i rest når vi deler på

3.

4 if tall%3==0:

5 print(f'{tall} er delelig med 3')

6 else:

7 print(f'{tall} er ikke delelig med 3')

Vitesterprogrammetunderveisogskriverviinn19ikonsollen:

Skrivinnetheltall:19

TILVURDERING

19erikkedeleligmed3

Vilkår 29

1.20

Lagetprogramsomberomtotallogsom avgjørhvilketavdissesomerstørst.

1.21

Lagetprogramsomberomtotallogsom avgjøromdetotalleneharsammefortegn.

1.22

a)Lagetprogramsomberomettallog undersøkeromtalleterdeleligmed5.

b) Utvidprogrammetslikatprogrammet fortellerhvormangeheleganger5går oppitallet.

1.23

Skrivetprogramsomberomettallogsom såavgjøromtalleterpositivtellernegativt.

1.24

Lagetprogramsomberometheltall.Programmetskalsvareomdeteroddetalleller partall.

1.25

Lagetprogramsomsjekkeromtotaller like.

OPPGAVER

1.26

Enoppskriftpåsukkerbrødinneholderblant annetdisseingrediensene:

3egg

2,5dLsukker

3,5dLmel

Prisenforseksegger32kroner.1Lmel koster15kronerog1Lsukkerkoster12 kroner.

LagetprogramiPythonsomregneruthvor myedetkosterforegg,melogsukkertil12 sukkerbrød.

Larsharlagetprogrammetovenfor. Hvakanhanbrukeprogrammettil?

Foreslåenpassendetekstsomkanskrivesi linje7.

TILVURDERING

30 KAPITTEL1
2 a
3 b =5 4 c =3 5 6
a**2+
+c**2==
c**2==
7
1.27 (Eksamen2P2022H)
1 # Velgerverdier for a,b og c
=4
if
b**2== c**2 or a**2
b**2 or b**2+
a**2:
print(" ")

1.5Løkker

Enløkkeerenkodebitsomgjøratdukangjentaenoppgavefere gangerutenåmåtteskrivedensammekodenigjenogigjen.IPython harvitoløkker, while-løkkerog for-løkker.

While-løkker

En while-løkkeerbygdoppomtrentsomen if-test.Førststår kontrollordet while,deretterentest,etterfulgtavetkolon.Allelinjene medsammeinnrykketterdette,blirutførtsålengetestenersann. Kodennedenforinneholderen while-løkke.Løkkakjørersålenge variabelen«teller»erlavereenn3.Hvergangløkkakjører,skriver programmetordet«Hei»tilkonsollenogøkerverdienavtellermedén.

1 teller =0

2 while teller <3:

3 print('Hei')

4 teller = teller +1

Nårvikjørerprogrammet,fårvidette:

Hei Hei Hei

Kodennedenforernestenlik,menviskriverutvariabelen teller underveis iløkka:

1 teller =0

2 while teller <3:

3 print(teller)

4 teller = teller +1

Resultatetavdetteprogrammetblir:

TILVURDERING

Løkker 31
0 1 2

En while-løkkemåinneholdetreting:

1 teller=0

2

3 while teller<3:

4 print('Hei')

5 teller=teller+1

::: EKSEMPEL1.14

SkrivenkodeiPythonsomhalverertallet20sålengeresultateter størreenn1.

LØSNING

1 # Startverdi for «tall»

2 tall =20

3

4 # Løkke som gjentas så lenge «tall» er større enn 1

5 while tall >1:

6 print(tall) 7 tall = tall/2 # Halverer «tall»

TILVURDERING

32 KAPITTEL1
2. Variabelen i testen må opprettes i koden over løkka. 1. En test som avgjør om koden inni løkka skal utføres. Testen inneholder en variabel. 3. Variabelen må oppdateres inni løkka.
20 10.0 5.0 2.5 1.25
Resultatetavkodenblir:

FRABLOKKTILTEKST

En while-løkkeiPythontilsvarerstyringsblokka«gjentatil»i Scratch.

når klikkes

sett tall til 0

gjentatil tall > 10

sett tall til tall + 1

Kodenovenforøkervariabelen«tall»medénhelttilverdiener over10.EntilsvarendekodeiPythonblirdenne:

1 tall =0

2

3 while tall <=10:

4 tall = tall +1

VileggermerketilatScratchogPythonhartestenemotsattvei.I Scratchvisertestennårløkkaskalslutteåkjøre,nemlignår«tall» erblittstørreenn10.IPythonvisertestennårløkkaskalkjøre, nemligsålenge«tall»ermindreennellerlik10.

Løkkaieksempeletovenforkanviillustrereietfytskjema:

tall = 20

halverer tall tall > 1

TILVURDERING

slutt

Løkker 33
ja
nei

Allekodelinjersomskaltilhøreløkkamåhasammeinnrykketterlinja med while.Førstelinjesomikkeerrykketinnfravenstremarkererat løkkaerslutt.

En while-løkkeegnerseggodttilålagetallmønstre.

::: EKSEMPEL1.15

a)Lagetprogramsomstartermed3ogsådoblerigjenogigjen, sålengetalletermindreenn500.Programmetskaldaskriveut dette:

3612244896192384

b) Endreprogrammetdittslikatdetstopperetteråhaskrevetutti tall.

LØSNING

a)Vilagerenløkkesomkjørersålengetalletermindreenneller lik500.Hvergangløkkakjøres,doblervitallet.

1 tall =3

2

3 while tall <=500:

4 print(tall, end='')

5 tall = tall*2

b) Vileggertilennyvariabelsomtellerhvormangegangerløkka harkjørt.Vistopperløkkanårtellerenblir10.

1 tall =3

2 teller =0

3

4 while teller <10:

5 print(tall, end='')

6 tall = tall*2

7 teller = teller +1

Nårvikjørerdetteprogrammet,fårvi

TILVURDERING

36122448961923847681536

34 KAPITTEL1

Inesteeksempelbrukervienegenvariabeltilåsummereopptallenei mønsteret.

::: EKSEMPEL1.16

a)Lagetprogramsomskriverutalleoddetalleneunder100.

b) Lagetprogramsomsummereralleoddetalleneunder100.

LØSNING

a)Programmetstarterpå1,sidendeterførsteoddetall.Forå kommetilnesteoddetall,leggervitil2.

1 tall =1

2

3 while tall <=100:

4 print(tall, end='')

5 tall = tall +2

Outputfraprogrammetblir

13579111315171921232527293133

3537394143454749515355575961

6365676971737577798183858789

9193959799

b) Viutviderprogrammetmedenegenvariabelsominneholder summen.Forhvergangløkkakjørerleggervitilverdienav variabelen tall.Vistartermed0,sidendetteikkepåvirker summen.

1 tall =1

2 summen =0

3

4 while tall <=100:

5 print(tall, end='')

6 summen = summen + tall

7 tall = tall +2

8 print()

TILVURDERING

9 print(f'Summen av tallene er {summen}.')

Løkker 35

Programmetieksempeletoverlisteroppalleoddetallene1, 3, 5,..., 99 ogsvareratsummener2500.Linje9inneholderen print-kommando utennoeargument.Dengirdaetenkeltlinjeskift,slikatsummen kommerpåennylinje.

Vileggermerketilatløkkeneofteinneholderlinjeravtypen

variabel=variabel+1

Det nnesenforkortetskrivemåtefordette: variabel+=1

Detgjøratvislipperåskrivevariabelentoganger.Programmetgjør akkuratdetsamme,menvisparerlittskriving.

TILVURDERING

36 KAPITTEL1

Åavbryteenløkke

Viavbryteren while-løkkevedåsørgeforattesteniførstelinjeblir usann.Noengangerkandetværenyttigmedenegenvariabelsombare hardettesomoppgave.

::: EKSEMPEL1.17

Skrivetprogramsomberomettogetttallogsummerertallene.

LØSNING

Vilagerenegenvariabel«fortsett»,somstyreromløkkaskalkjøre. Visetterverdientil«ja»nårprogrammetstarter.Underveisiløkka harvien if-test,somsjekkeromviharbedtomåavslutte.Isåfall endrervi«fortsett»til«nei».

1 fortsett = 'ja'

2 summen =0

3

4 print('Skriv innett og ett tall, avslutt med "q" ettersiste tall.')

5 while fortsett == 'ja':

6 svar = input('Skriv inn et tall:')

7 if svar == 'q':

8 fortsett = 'nei'

9 else:

10 tall = float(svar)

11 summen = summen + tall

12

13 print(f'Summen av tallene er {summen}.')

Vikjørerprogrammetogblirbedtomåtasteinnettall.Vitaster førstinn1,så2,deretter3også«q».Daserdetslikutikonsollen:

Skrivinnettogetttall,avsluttmed"q"etter sistetall.

Skrivinnettall:1

Skrivinnettall:2

Skrivinnettall:3

TILVURDERING

Skrivinnettall:q

Summenavtalleneer6.0.

Løkker 37

Vikanogsåbrukekommandoen break foråavbryteenløkke.

::: EKSEMPEL1.18

Skrivetprogramsomsummerertallene1, 2, 3,..., 10.Programmet skalstoppedersomsummenpåettidspunktblirakkurat15.Daskal vivitehvorlangtvierkommetisummeringen.

LØSNING

Vibyggeroppen while-løkkesomtidligere.Itilleggtarvimeden if-testsomavbryterløkkadersomsummener15.

1 tall =1

2 summen =0

3 while tall <10:

4 if summen ==15:

5 print(f'Vier kommet til {tall}.')

6 break

7 summen = summen + tall

8 tall = tall +1

9

10 print(f'Summen er {summen}.')

Resultatetavprogrammetblir

Vierkommettil6. Summener15.

Detbetyrat1 + 2 + 3 + 4 + 5 = 15.Vistopperløkkarettførviskal tilåaddere6.

Evigløkke

Dersomviiløpetavløkkaikkesørgerforattesteniførstelinjeiløkka blirusann,villøkkaaldristoppe.Vikallerdetteenevigløkke.Vimå damanueltavbryteprogrammetmedprogrammeringsmiljøets stoppknapp.

TILVURDERING

38 KAPITTEL1

Kodennedenforskalsummerepartalleneunder51.

1 tall =2

2 summen =0

3

4 while summen >=0:

5 summen = summen + tall

6 tall = tall +2

7 print(summen)

Nårvikjørerprogrammet,gårPythoninnienevigløkke. Foreslåenendringslikatprogrammetstopper.

LØSNING

Vifårenevigløkkesidentesteniløkkaalltidersann.Uansetthvor mangeleddvileggertil,vilsummenalltidværestørreennellerlik null.Hvisviendrertestentil tall<=51,vilprogrammetstoppe nårviharsummertallepartalleneopptilogmed50.

1.28

LagenkodeiPythonsombrukerenløkke tilåskriveutsetningen«Jeglikeråprogrammere.»femganger.

1.29

a)Skrivetprogramsomstartermed2 ogsådoblertiltalleterblitt5000eller høyere.

b) Summeralletallenefraa).

1.30

Summeralletalleneifemgangenopptilog med10000.

1.31

OPPGAVER

Lagenverditabelltilfunksjonen y = 4x 2 for x mellom 3og3.Avstandenmellom

x-verdieneskalvære0,5.

1.32

Lagetprogramsomtelleropphvormange gangervimådobletallet3foratsvaret skalblirmerenn1000.

1.33

Skrivetprogramsomleggersammen talleneisjugangen,7 + 14 + 21 + ....

Programmetskalavgjørehvormangeledd mantrengerforatsummenskalbli105.

1.34

TILVURDERING

Lagetprogramsomskriverutenhilsen ogsåspøromvivilsehilsenenengang til.Programmetskalfortsetteåskriveut hilsenenhelttilvisvarernei.

Løkker 39
::: EKSEMPEL1.19

For-løkker

Hvisvivethvormangegangerenløkkeskalutføres,kanvibrukeen forløkkeistedetforen while-løkke.Kodennedenforskriverut«Hei»tre ganger:

1 for i in range(3):

2 print('Hei')

Resultatetavprogrammetblir:

nei har løkka gått tre ganger? print «Hei»

Kodenovenforkanviillustreremedetfytskjema: ja

slutt

Vilageren for-løkkevedåskrivekontrollordet for,deretterenvariabel viselvvelger,deretterkontrollordet in,deretterentallmengdeogtil sluttetkolon.Allekodelinjersomkommeretterpåogsomharsamme innrykk,tilhørerløkkaogblirutførthvergangløkkakjører.Førstelinje somikkeharsammeinnrykkblirutførtnårløkkaerferdig.

TILVURDERING

40 KAPITTEL1
Hei Hei Hei

Lagetprogramsomskriverut regangen.

LØSNING

Firegangeninneholdertitall,såvibrukeren for-løkkesomkjørerti ganger.Tallenestarterpå4ogøkermed4hvergang.

1 tall =4

2

3 for i in range(10):

4 print(tall, end='')

5 tall +=4

Programmetgirresultatet:

481216202428323640

FRABLOKKTILTEKST

En for-løkkeiPythonsvarertilstyringsblokka«gjenta»iScratch. Kodennedenforsettervariabelen«tall»til1ogadderer1til«tall» 10ganger.

når klikkes

sett tall til 1

gjenta 10 ganger

sett tall til tall + 1

IPythonkanvigjøredetslik:

1 tall =1

2

TILVURDERING

3 for i in range(10):

4 tall = tall +1

Løkker 41 :::
EKSEMPEL1.20

Detspilleringenrolle hvilkenvariabelvi brukeriløkka–«x», «i»,«tall»,«y»ellernoe annet.

Ieksempeletovenforharvibruktkommandoen range(10).Denne kommandoenlagerenfølgeavtall.Kommandoen range kanha1–3

argumenter:

Treargumenter: range(<fraogmed>,<til>,<steglengde>)

Toargumenter: range(<fraogmed>,<til>) , tilsvarer range(<fraogmed>,<til>,1)

Ettargument: range(<til>),tilsvarer range(0,<til>,1)

Herserduenoversiktoverhvilketall range lager:

Vileggermerketilat range harmedvenstreendepunkt,altsåstartverdien,menharikkemedhøyreendepunkt,altsåsluttverdien.

::: EKSEMPEL1.21

Lagetprogramsomskriverutde reførstenaturligetallene.

LØSNING

1 for x in range(1,5):

2 print(x, end='')

Nårvikjørerprogrammetfårvidetteresultatet: 1234

Leggmerketilatdetførstetalleter1ogdetsistetalleter4.Vitar altsåikkemed5.

TILVURDERING

Ieksempeletunderleggerviogsåtilensteglengdepå4somdettredje argumentet:

42 KAPITTEL1
KOMMANDO TALL range(0,10) 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 range(5,14,2) 5, 7, 9, 11, 13 range(20,15,‑1) 20, 19, 18, 17, 16 range(5) 0, 1, 2, 3, 4

::: EKSEMPEL1.22

Lagetprogramsomskriverut regangen.

LØSNING

Firegangenstarterpå4,slutterpå40ogharsteglengde4.Da brukervi range(4,41,4).

1 for x in range(4,41,4):

2 print(x, end='')

Resultatetavprogrammetblir:

481216202428323640

Vikanogsåskriveuttallisynkenederekkefølgevedålasteglengdenha ennegativverdi.

::: EKSEMPEL1.23

Lagetprogramsomskriverutsjugangenisynkenderekkefølge:

LØSNING

Vivetatdethøyestetalletisjugangener7 10 = 70ogdetminste er1 · 7 = 7.Foråfåmedalletallenemåvisetteintervallettil [70, 7]. Ettersomviskalhasynkenderekkefølgebrukervisteglengde 7.Vi skriverda range(70,6,‑7).

range(70,6,-7)

Vi går ned til 6. Da vil 7 være det siste tallet i intervallet.

1 for i in range(70,6,‑7):

2 print(i, end = '')

Nårvikjørerkodenfårvi:

TILVURDERING

7063564942352821147

Løkker 43
Vi starter på 70 Steglengden er –7

Ålageallekombinasjoneravheltalligekoordinater (x, y) mellom0og10

ertidkrevendeforhånd.IPythongjørvidetganskeenkelt–vibrukeren løkkeinnienløkke.

::: EKSEMPEL1.24

Skrivoppalleheltalligekoordinater (x, y) mellom0og5.

LØSNING

1 for x in range(6):

2 for y in range(6):

3 print(f'({x}, {y})', end='')

TILVURDERING

44 KAPITTEL1
Vikjørerprogrammetogfår (0,0)(0,1)(0,2)(0,3)(0,4)(0,5)(1,0) (1,1)(1,2)(1,3)(1,4)(1,5)(2,0) (2,1)(2,2)(2,3)(2,4)(2,5)(3,0) (3,1)(3,2)(3,3)(3,4)(3,5)(4,0) (4,1)(4,2)(4,3)(4,4)(4,5)(5,0) (5,1)(5,2)(5,3)(5,4)(5,5)

1.35

LagenPython-kodesomskriverutteksten «ViprogrammereriPython.»10ganger.

1.36

Lagetprogramsomskriverutseksgangen. Løsoppgavenpåsåmangeulikemåterdu klarer.

1.37

Lagetprogramsomgirdetteresultatet:

1.38

OPPGAVER

Løssåmangesommuligavoppgavene ovenfortil while-løkkermed for-løkkeri stedet.

1.39

Lagetprogramsomsummererpartallene mellom2og1000.

1.40

Lagetprogramsomgirdetteresultatet:

191715131197531

Tips: '+'*4 gir ++++.

1.41

LagenPython-kodesomberomettallog somsålagertilsvarendegangetabell. Hvisvikjørerkodenogtasterinn3underveis,skalvifåfølgendeoutput:

Skrivinnethelttall:3

36912151821242730

1.42

Skrivenkodesomsettersammenalle oddetallmellom1og10medallepartall mellom1og10.

TILVURDERING

Løkker 45
+
+++++ +++++++
+++

Detkangodthende gurenkommeropp ietegetvindupå maskinendin.

1.6Turtle

Hvisviskriver importturtle istartenavPython- lavår,fårvi tilgangtildetsåkalteturtle-biblioteket.Deterlagetforatvikanlæreå programmerevedåtegne.

Dennekodentegnerførstenrettstrekpå40piksler,dreierså90grader mothøyre,førdentegnerenrettstrekpå60piksler.

1

2

3 turtle.forward(40)

4 turtle.right(90)

5 turtle.forward(60)

Nårvikjørerprogrammet,fårvidetteresultatet:

Vikanskrive importturtleast istedetfor importturtle.Da slipperviåskrive«turtle»forhverkommando,ogkannøyeossmed«t».

::: EKSEMPEL1.25

a)Brukenløkketilåtegneetkvadratmedsidelengde50.

b) Endrekodensåvitegnerenlikesidettrekantmedside50.

LØSNING

a)Sidenkvadratethar resider,larviløkkakjøre reganger.Hver gangmarkørenhargåttfram,snurvi90gradermothøyre.

2

3 t.forward(50)

4 t.right(90)

Nårvikjørerprogrammetfårvitegnetetkvadrat:

TILVURDERING

b) Løkkaskalnåkjøretreganger.Vinkelenblir120grader.

46 KAPITTEL1
import turtle 1 import turtle as t for i in range(4):

1 import turtle as t

2 for i in range(3):

3 t.forward(50)

4 t.right(120)

Nårvikjørerprogrammetfårvitegnetentrekant:

FRABLOKKTILTEKST

TurtleminnerganskemyeomScratch.Kodennedenforsender katteniScratchutienevigsirkel.

når klikkes

gjentaforalltid

gå 10 steg

snu 5 grader

Python-kodennedenforgjørakkuratdetsamme,densender markørenutienevigsirkel.

1 import turtle as t

2

3 while True:

TILVURDERING

4 t.forward(10)

5 t.right(5)

Turtle 47

Brukturtle-bibliotekettilåtegnepunkterpålinja y = 4x 3.Velg x-verdiermellom 20og20medtrinnlengde5.

LØSNING

1 # Importerer turtle biblioteket

2 import turtle as t

3 # Setter opp startverdier

4 xstart =‑20

5 xslutt =20

6 xsteg =5 7

8 x= xstart

9 y =4*x ‑3 10

11 # Løfter pennen, så den ikke tegner mens den beveger seg

12 t.penup()

13

14 while x <= xslutt:

15 t.goto(x,y) # Gårtil angitt posisjon

16 t.dot() # Tegner en prikk her

17 x=x+ xsteg

18 y =4*x ‑3

Vikjørerprogrammetogfårdetteresultatet:

TILVURDERING

48 KAPITTEL1 ::: EKSEMPEL1.26

Hererenoversiktovernoenkommandoerfra turtle-biblioteket:

KOMMANDO HVASKJER? EKSEMPLER

t.forward() Markørenfytterseg forover

t.forward(20)

t.backward() Markørenfytterseg bakover t.backward(40)

t.right() Markørenroterer mothøyre t.right(90)

t.left() Markørenroterer motvenstre t.left(180)

t.goto() Markørengårtil angittposisjon t.goto(50,100)

t.dot() Vitegnerenprikk medsentrumi markøren t.dot()

t.circle() Vitegnerensirkel medsentrumi markøren t.circle(200)

t.pendown() Markørentegner t.pendown()

t.penup() Markørentegner ikke t.penup()

t.pencolor() Setterfarge t.pencolor('red')

t.home() Markørengårtilbake tilorigo t.home()

t.setheading()

Markørensnursegtil angittvinkel.0ertil høyre,90errettopp, 270errettned.

t.setheading(270)

Påhttps://docs.python.org/3/library/turtle.html nnerduenfullstendig oversiktovermuligekommandoer.

TILVURDERING

Turtle 49

1.43

Skrivetprogramsomtegnerenfemkant. Prøvdegframforå nneuthvormange graderdumåsnumothøyrehvergangfor atduskalkommetilbaketilpunktetderdu startet.

1.44

OPPGAVER

1 import turtle as t

2 t.speed(100)

3 for i in range(200):

4 t.forward(i)

5 t.left(71)

a)Forklarhvasomskjerihveravlinjenei koden.

b) Gjørendringeriprogrammetslikatdu fårtegnetopp gurermedhenholdsvis

tre, reogseksarmer.

c)Gjørendringeriprogrammetslikatdu får«armene»rotertdenandreveien.

1.45

a)Skrivetprogramsomtegnerstjernenpå guren.

b) Utvidprogrammetslikatenbrukerkan bestemmehvormangearmerstjernen kanha.

c)Endreprogrammetslikatarmeneikke blirsåspisse.Se gurenunder.

1.46

TILVURDERING

50 KAPITTEL1
Kodenundertegneren gurmedfem «armer». Tegnpunkterpålinja y = 50 x.Velg xverdiermellom0og70medtrinnlengde10.

1.7Lister

Tilnåharvilagretbareenogenverdiienvariabel.Dersomviskallagre størremengderdata,brukervilister.Enlistebeståravenrekkeelementer medkommamellom,innenfordetoparentesene«[»og«]».Detteeret eksempelpåenliste:

[1,4,3,5,'hei',44,21,1,2,'hei','HEI']

Vioppretterenlistevedåtilordneenlistetilenvariabel.Kodennedenfor opprettertolister,énlistemedtreelementerogéntomliste.

1 liste1 =['Niels Henrik', 'Thoralf', 'Sophus']

2 liste2 =[]

Vileggertilelementerienalleredeeksisterendelistemedkommandoen append.Dennekommandoenskalhatoargumenter,nemlighvasom skalleggestilogihvilkenlistedetskalleggestil.IPythonskrivervi førstlistenavnet,deretteretpunktum,etterfulgtav«append»ogtil sluttelementetsomskalleggestil,inniparenteser.Ikodennedenfor oppretterviførstentomliste.Deretterleggervitiltreelementer.

1 liste1 =[]

2

3 liste1.append(5050)

4 liste1.append(1153)

5 liste1.append(1974)

Ingentingblirskrevettilkonsollennårvikjørerdetteprogrammet. Menivariabeloversiktenkanviseatvariabelen«liste1»nåharverdien [5050,1153,1974]

::: EKSEMPEL1.27

TILVURDERING

Lagetprogramsomoppretterenlistemedtallene1–10.

LØSNING

Førstopprettervientomliste.Deretterbrukervienløkketilålegge ettogetttallfratallene1–10innilista.

Lister 51

Listerkanvibrukertilålagreverditabeller,somviserieksempelether.

Legg x-og y-verdierfrafunksjonen y = 4x + 1innitolister.La x startepå1ogøkemed0,5helttil x er5. LØSNING 1 xverdier =[] 2 yverdier =[]

TILVURDERING

52 KAPITTEL1
5
[1,2,3,4,5,6,7,8,9,10]
1 liste =[] 2 3 for i in range(1,11): 4 liste.append(i)
6 print(liste) Resultatetfraprogrammetblir
::: EKSEMPEL1.28
=1
5
7 xverdier.append(x) 8 yverdier.append(y) 9 x=x +0.5
y =4*x +1
print(xverdier)
print(yverdier)
[1,1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0] [5,7.0,9.0,11.0,13.0,15.0,17.0,19.0,21.0]
3 x
4 y =4*x +1
6 while x <=5:
10
11 12
13
Nårvikjørerprogrammet,fårvi:

FRABLOKKTILTEKST

append-funksjoneniPythonsvarertilliste-blokka«leggtililiste» iScratch.Kodennedenforleggertallene1, 2,..., 10innilista «liste».

når klikkes

sett tall til 1

gjenta 10 ganger

leggtil tall i liste

sett tall til tall + 1

DettetilsvarerPython-kodenieksempeletovenfor.

Vihenterutenkeltelementerfralistervedåskrivelistenavnetog sånummerettildetelementetviskalha.Nummeretskriverviinni listeparentesene«[»og«]».IPythontellervifra0,såførsteelementfra lista«liste»fårvimedkommandoen liste[0],andreelementmed liste[1],ogsåvidere.Hvisdubrukernegativetall,tellerPythonfra høyre. liste[‑1] erderforsisteelementilista.

andre element, liste[1]

liste = [1, 1, 2, 3, 5, 8, 13, 21]

siste element, liste[–1]

første element, liste[0]

sjette element, liste[5]

TILVURDERING

Lister 53

Kommandoen len kommerfraengelsk «length»,sombetyr ‘lengde’.

::: EKSEMPEL1.29

Lagenlistemedminsttonavn.Skrivutførsteogandrenavn.

LØSNING

1 fornavn =['Niels Henrik', 'Thoralf', 'Sophus']

2

3 første = fornavn[0]

4 andre = fornavn[1]

5

6 print(første)

7 print(andre)

Etteratviharkjørtprogrammetstårdetikonsollen:

NielsHenrik

Thoralf

Kommandoen len girlengdenavenliste.Dagir range(len(liste)) entallfølge0, 1, 2, 3,...,medlikemangetallsomdeterelementerilista. Detgjøratvikanplukkeutalleelementerilista.

::: EKSEMPEL1.30

Lagenlistemednoennavn.Skrivetprogramsomskriveralle navnenetilkonsollen.

LØSNING

1 fornavn =['Niels Henrik', 'Thoralf', 'Sophus', 'Vilhelm', 'Caspar', 'Viggo']

2

3 for i in range(len(fornavn)):

4 print(fornavn[i], end=',')

Programmetgirdetteresultatet:

TILVURDERING

NielsHenrik,Thoralf,Sophus,Vilhelm,Caspar, Viggo,

54 KAPITTEL1

Detgårogsåanåbrukeen for-løkkedirektepålista,utenåbruke range.Nedenforserduenkodesomgirsammeresultatsomieksempeletovenfor.

1 fornavn =['Niels Henrik', 'Thoralf', 'Sophus', 'Vilhelm', 'Caspar', 'Viggo']

2

3 for person in fornavn:

4 print(person, end=',')

Nårviskalendreverdientilenvariabel,de nerervirettogslett variabelenpånytt.Påsammemåtekanvibytteutetelementienliste. Visetteretbestemtelementtilennyverdi.

::: EKSEMPEL1.31

Tautgangspunktilistade nertidennekoden:

1 grønnsaker =['hodekål', 'spisskål', 'kålrot', 'blomkål', 'rosenkål']

Byttuttredjeelementmednoeannet.

LØSNING

Visetterelementnummertotilenannenverdi.

1 grønnsaker =['hodekål', 'spisskål', 'kålrot', 'blomkål', 'rosenkål']

2 print(grønnsaker)

3 grønnsaker[2]= 'sukkerspinn'

4 print(grønnsaker)

Nårvikjørerkoden,fårvi

['hodekål','spisskål','kålrot','blomkål', 'rosenkål']

TILVURDERING

['hodekål','spisskål','sukkerspinn', 'blomkål','rosenkål']

Lister 55

1.47

Kodende nererenliste.

OPPGAVER

1 liste =['sykkel', 'båt', 'kjelke', 'bil', 'tog']

a)Utvidkodenslikatdenplukkerutandre ogtredjeelementilista.

b) Byttut«båt»med«fy»ilista.

1.48

Tautgangspunktidennelista:

1 frukt =['eple', 'pære', 'plomme', 'appelsin', 'klementin', 'ananas', 'kiwi']

Skrivutannenhverfrukt.

1.49

Lagetprogramsomleggeroddetalleneopp til50innienliste.

1.50

Kodennedenfortegnertreporter,hvorhver portbeståravtopunkter.

1 import turtle as t

2

3 porter =[(10,50),(14,50), (30,40),(34,40),(70, 50),(74,50)]

4

5 t.penup()

6 t.dot()

7

8 for port in porter:

9 t.goto(port)

10 t.dot()

11

12 t.goto(0,0)

Utvidprogrammetslikatmarkørentegner etsporgjennomporteneutenatsporet berørerportene.

1.51

Skrivoppallekombinasjonervikanfåav brød,rundstykke,knekkebrød,ogpannekakekombinertmedost,syltetøy,agurkog egg.

TILVURDERING

56 KAPITTEL1

1.8Funksjoner

EnfunksjoniPythonerensamlingavkommandoeroginstruksjoner.De innebygdekommandoene print og input ereksemplerpåfunksjoner.

Vibrukerenfunksjonvedåskrivenavnetpåfunksjonenetterfulgtav toparenteser,«(»og«)».Visieratvi kallerpå funksjonen.Herserduet eksempelpåenfunksjon:

1 # Her lager vi funksjonen

2 def hilsen():

3 print('Hei, hei!')

4 print('Klar til å lære mer?')

5

6 # Her kaller vipå funksjonen

7 hilsen()

Resultatetblir:

Hei,hei!

Klartilålæremer?

Deterkontrollordet def somviseratdetteerenfunksjon.Detblir etterfulgtavenvariabel,altsånavnetpåfunksjonen,parenteseroget kolon.Allepåfølgendelinjermedsammeinnrykkblirutførtnårvikaller påfunksjonen.

Funksjonenmåværede nertførvibrukerden.Hvisvifytter«hilsen()»

ilinje6overdetreførstelinjene,fårvienfeilmeldingsomsierat variabelenviprøveråbrukeikkeerde nert:

NameError:name'hilsen'isnotdefined

Dettebetyraltsåatviikkekankallepåfunksjonenførdenerde nert.

Enfunksjonkantaettellerfereargumenter.Dasetterviisåfall argumenteneinnienparentes,ogbrukerdemsomvanligevariableri de nisjonen.

TILVURDERING

Funksjoner 57

Nårvide nerer enmatematisk funksjonmed def, larvi x-verdien væreargumentet tilfunksjonen.Vi returnerer y-verdien med return.

Lagenfunksjonsomleggersammentotallogskriverutsvaret.

LØSNING

Vibrukertoargumenter,«tall1»og«tall2».Nårvisåkallerpå funksjonen,setterviargumentenetilfunksjoneniparentesene.

1

2

3

4 5

Summenavdetotalleneer9. Funksjoneneovenforskriverresultatetretttilkonsollen.Enannen muligheterålafunksjonenereturnereenverdi,somvisåkanbruke videre.Kodennedenforgirsammeresultatsomkodenieksempeletover, menerbyggetopppåenannenmåte:

1

6

Herreturnererfunksjonen«addisjon»summenavdetoargumentene. Deretterlagrerviresultatetavfunksjonenivariabelen«regnestykke»,før viprinterresultatettilskjermienegenoperasjon.Determangemåter åbrukefunksjonerpå.Etterhvertsomduprogrammerermerogmer, vildublifinkeretilåvurderehvordandeterlurtåbrukefunksjoneri programmenedine.

TILVURDERING

Vitarmedeteksempelhvorvibrukerenfunksjontilålageenverditabell.

58 KAPITTEL1 ::: EKSEMPEL1.32
def addisjon(tall1, tall2): svar = tall1 + tall2 print(f'Summen avdeto tallene er {svar}.') addisjon(4,5) def addisjon(tall1, tall2): 2 svar = tall1 + tall2 3 return svar 4 5 regnestykke = addisjon(4,5) print(f'Summen avdeto tallene er {regnestykke}.')

::: EKSEMPEL1.33

a)Lagetprogramsomskriverutenverditabellforfunksjonen f(x)= 3x 7.La x væretallene { 2, 1, 0, 1, 2, 3, 4, 5}.

b) Endrekodendinslikatprogrammetlagrer x-og y-verdieneito lister.Laavstandenmellomhver x-verdivære0,5.

LØSNING

a)Vide nerer f(x) somenfunksjonøverstikodenogbrukerden underveisiprogrammet.

1 def f(x):

2 return 3*x ‑7

3 xstart =‑2

4 xslutt =5

5 xsteg =1

6

7 x= xstart

8 y=f(x)

9

10 while x <= xslutt:

11 print(f'{x:4} {y:4}')

12 x += xsteg

13 y=f(x)

Nårvikjørerkoden,fårvidette:

‑2‑13 ‑1‑10 0‑7 1‑4 2‑1 32 45 58

TILVURDERING

b) Vi erner print-kommandoenfralinje11.Istedetopprettervi tolister«xverdier»og«yverdier»(linje7–8),somvisålegger xog y-verdieneinni,selinje14–15.

Funksjoner 59
60 KAPITTEL1 1 def f(x): 2 return 3*x ‑7 3 xstart =‑2 4 xslutt =5 5 xsteg =.5 6 7 xverdier =[] 8 yverdier =[] 9 10 x= xstart 11 y=f(x) 12 13 while x <= xslutt: 14 xverdier.append(x) 15 yverdier.append(y) 16 x += xsteg 17 y=f(x) 18 19 print(xverdier) 20 print(yverdier) Kodenovenforgirdetteresultatet: [‑2,‑1.5,‑1.0,‑0.5,0.0,0.5,1.0,1.5, 2.0,2.5,3.0,3.5,4.0,4.5,5.0] [‑13,‑11.5,‑10.0,‑8.5,‑7.0,‑5.5,‑4.0, ‑2.5,‑1.0,0.5,2.0,3.5,5.0,6.5,8.0]
nemligkvadratetavinput. TILVURDERING
IkodeneiScratchogPythonnedenforreturnererfunksjonenenverdi,

FRABLOKKTILTEKST

Åde nereenfunksjoniPythontilsvarerålagesinegenblokk iScratch.Kodennedenforlagerennyblokk«kvadrer»,som kvadrerertallet.

de ner kvadrer numberortext

sett svar til numberortext * numberortext

når klikkes kvadrer 5

KodenovenfortilsvareromtrentfølgendePython-kode:

1 def kvadrer(n):

2 return n**2

3

4 print(kvadrer(5))

Nårvikjørerprogrammene,fårvitilsvarat52 = 25.

Ieksempeletunderreturnererikkefunksjonennoe,menutføreren gruppeinstruksjonerhvergangfunksjonenblirbrukt.

::: EKSEMPEL1.34

TILVURDERING

Skrivetprogramsomtegnerfølgende gur.

Avstandenmellomhvertkvadraterliksidelengdenavkvadratettil venstre.Kvadratethelttilvenstreharsidelengde10.Nestekvadrat harsidelengde20,deretter30ogsåvidere.

Funksjoner 61

LØSNING

1 import turtle as t

2

3 def tegnkvadrat(n):

4 for i in range(4):

5 t.forward(n)

6 t.right(90)

7

8 for i in range(10,61,10):

9 tegnkvadrat(i)

10 t.forward(2*i)

::: EKSEMPEL1.35

Skrivetprogramsomberenbrukerometheltall.Programmetskal sjekkeomtalleterdeleligmed4eller7.

LØSNING

Vide nererfunksjonen«delelig(n)».Visjekkerom n erdelelig med4eller7.Isåfallreturnerervisvarsetningendirekte.Hvisikke returnerervidetmotsatte.Underfunksjonenhenterviettallfra enbrukermedkommandoen input oggjørtalletomtiletheltall medkommandoen int

1 def delelig(n):

2 if (n %4==0) or (n %7==0):

3 return f"{n} er delelig med 4 eller 7"

4 else:

5 return f"{n} er ikke delelig med 4 eller 7"

6

7 n= int(input("Skriv inn et heltall:"))

TILVURDERING

8 print(delelig(n))

Hvisviskriverinn27fårvi:

62 KAPITTEL1
Vikankombinerevilkårmedfunksjoner.Laosssepåeteksempel:

1.52

Skrivinnetheltall:27

27erikkedeleligmed4eller7

Hvisviskriverinn28fårvi:

Skrivinnetheltall:28 28erdeleligmed4eller7

OPPGAVER

Lagenfunksjonsomreturnererproduktet avtotall.

1.53

Lagenfunksjonsomreturnererenliste overdiferanseneienliste.

1.54

Kodennedenforsummereralletalleneopp

til n = 6:

1 n =6

2

3 summen =0

4 for i in range(1, n +1):

5 summen += i

6

Skrivomprogrammetslikatvifårenfunksjonsomsummereralletalleneopptilog med n.

1.55

Lagenfunksjonsomsummereralletallene ienliste.

1.56

Lagetprogramsomskriverutenverditabellforfunksjonen y = x2 + 3x 1.La x gåfra 5til5medsprangpå1.

1.57

Figurenbeståravtrekopierav resirkler tegnethorisontaltslikatavstandenmellomsentrumitosirklererlikradius. Brukturtle-bibliotekettilåtegne guren.

1.58

7 print(summen)

Skrivetprogramsominneholderfunksjonen«BingBang(n)».Programmetskalbeen brukeromverdienav n,forsååreturnere

«Bing»hvis n erdeleligmed3

«Bang»hvis n erdeleligmed4

«BingBang»hvis n erdeleligmed3og4

verdienav n hvis n verkenerdelelig med3eller4

TILVURDERING

Funksjoner 63

1.9Anvendelseritallteori

Hundrenettet

Løkkeregnerseggodttilåillustrereelleroppdageegenskaperved tallenevåre.Viskalprogrammereethundrenett.Vitarutgangspunkti heltallenefra1til100:

Vileggerinnentestslikatvifårlinjeskiftbareettertalleneitigangen. Dettegjørvivedåsjekkeomtalletharnullirestnårvidelerpå10,altså vedåseom tall%10 blirnull.

Resultatetblir

12345678910

11121314151617181920

21222324252627282930

TILVURDERING

31323334353637383940

41424344454647484950

51525354555657585960

64 KAPITTEL1
1234567891011121314151617181920 21222324252627282930313233343536 37383940414243444546474849505152 53545556575859606162636465666768 69707172737475767778798081828384 858687888990919293949596979899100
1 for tall in range(1,101): 2 print(tall, end='')
Kodengirdissetallene:
1 for tall in range(1,101): 2 if tall %10==0: 3 print(tall) 4 else: 5 print(tall, end='')

61626364656667686970

71727374757677787980

81828384858687888990

919293949596979899100

Nålarviallekolonnenehabredde3vedåskrive f'{tall:3}'.Daser detlittryddigereut:

1 for tall in range(1,101):

2 if tall %10==0:

3 print(f'{tall:3}')

4 else:

5 print(f'{tall:3}', end='')

Nårvikjørerdennekodenfårvi

12345678910

11121314151617181920

21222324252627282930

31323334353637383940

41424344454647484950

51525354555657585960

61626364656667686970

71727374757677787980

81828384858687888990

919293949596979899100

Nåharvifåttethundrenett.Dettekanvibruketilåutforskeegenskaper ogsammenhengermellomdenaturligetallene.

TILVURDERING

Vileggernåtilen if-testistarten,somavgjøromtalletskalskrivesut ellerikke.Foråbareskriveutforeksempeltregangen,leggerviinnen testomtalleterdeleligmed3.Dettegjørvivedåsjekkeomvifårnulli restnårvidelerpå3,altsåom tall%3 blirnull.Nårvi ikke skalprinte tallet,printerviistedettremellomrom,selinje9.

Anvendelseritallteori 65

1

Primtall

Primtalleneerdeheletallenestørreenn1sombareerdeleligemed1 ellersegselv.Deførsteprimtalleneer

,

Viskallageetprogramsomundersøkeromettalleretprimtall.Damåvi undersøkealletalllavereenntallet,menstørreennellerlik2.

n= int(input('Skriv

TILVURDERING

66 KAPITTEL1
4
6 print(f'{tall:3}',
9
10 else: 11 print('',
Kodenovenforgir: 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99
for tall in range(1,101): 2 if tall %3==0: 3 if tall %10==0:
print(f'{tall:3}') 5 else:
end='')
7
else:
8
if tall %10==0:
print('')
end='')
2, 3, 5
7
11
13
,
,
1 inn et heltall:')) 2 3 for i in range(2, n):
4
if n%i ==0:
5
print(f'{n} er ikke et primtall')

Nårvikjørerdetteprogrammet,kommerteksten«Skrivinnetheltall:» oppikonsollen.Hvisvidataster6ogtrykkerenter,serdetslikut:

Skrivinnetheltall:6

6erikkeetprimtall

6erikkeetprimtall

Viseratkodenskriveruténmeldingomattalletikkeeretprimtallfor hvergangprogrammet nnerenfaktor.Foråretteoppdette,leggervi innen break:

1 n= int(input('Skriv inn et heltall:'))

2

3 for i in range(2, n):

4 if n%i ==0:

5 print(f'{n} er ikke et primtall')

6 break

Programmetgirnåbeskjednårdetvitasterinnikkeerprimtall.Men hvordankanviviteomtalleteretprimtall?Løsningeneratvietterat løkkaerferdigmåhuskeomvifantenfaktorellerikke.Hvisviikkegjorde det,såertalletetprimtall.Vibrukerenvariabeltildette.Vikallerden faktor_funnet.Visetterdentil False førløkkakjører.Hvisvi nneren faktor,settervi faktor_funnet til True.

1 n= int(input('Skriv inn et heltall:'))

2

3 faktor_funnet = False

4 for i in range(2, n):

5 if n%i ==0:

6 faktor_funnet = True

7 break

8 if faktor_funnet == True:

9 print(f'{n} er ikke et primtall')

10 else:

11 print(f'{n} eret primtall')

TILVURDERING

Detblirlettereåbrukekodendersomvi«pakkerdeninn»somen funksjon.

Anvendelseritallteori 67

Funksjonenovenforreturnerer True dersom n eretprimtall,og False dersom n ikkeeretprimtall.

Testene iferPrimisk(n): og iferPrimisk(n)==True: betyr akkuratdetsamme.

Programmetfungererslikdetskalfordefestetall,meninneholdernoen forbedringspunkter.Laossseomvikanforbedrekoden.

::: EKSEMPEL1.36

Tautgangspunktikodenovenfor.

a)Kodenfungererbarefortallsomerstørreennellerlik2.Gjør nødvendigeendringerforåretteoppdette.

b) Hvaerdetstørstetalletvitrengeråsjekkeom n erdeleligmed? Leggdetteinnikoden.

LØSNING

a)Vileggerinnentestistartenavkoden,slikatfunksjonen returnerer False dersom n ≤ 1:

2 if n <=1: 3 return False

TILVURDERING

b) Siden2erdetminsteprimtallet,trengerviikkesjekketallstørre enn n 2 .Vikunnederforla range gåfra2til n 2 .Vimåimidlertid

68 KAPITTEL1 1
2
3
i in
4
5 faktor_funnet =
6 break 7 return not(faktor_funnet) 8 9
10 11
12
13
14
def erPrimisk(n):
faktor_funnet = False
for
range(2, n):
if n%i ==0:
True
n= int(input('Skriv inn et heltall:'))
if erPrimisk(n):
print(f'{n} eret primtall')
else:
print(f'{n} er ikke et primtall')

gjøreom n 2 tilethelttall,foreksempelmed int(n/2)+1. Dettegjørkodenmerefektiv.

Deterimidlertidtilstrekkeligåsjekketallopptil √n,siden ingenfaktorkanværestørreenndet.Vilarderfor range gåtil int(math.sqrt(n))+1 :

1 import math

2

3 def erPrimisk(n):

4 if n <=1:

5 return False

6 faktor_funnet = False

7 stopp = int(math.sqrt(n)+1)

8 for i in range(2, stopp):

9 if n%i ==0:

10 faktor_funnet = True

11 break

12 return not(faktor_funnet)

13

14 n= int(input('Skriv inn et heltall:'))

15

16 if erPrimisk(n):

17 print(f'{n} eret primtall')

18 else:

19 print(f'{n} er ikke et primtall')

TILVURDERING

Anvendelseritallteori 69

Divisorer

Endivisorerettallsometannettallerdeleligmed.Vikanbrukeenløkke ogentestmed % tilå nnealledivisorer.

::: EKSEMPEL1.37

a)Skrivetprogramsomskriverutalledivisorertilettall.

b) Gjørendringerikodenslikatprogrammetsummereralle divisorenetiltallet.

LØSNING

a)

1 n= int(input('Skriv inn et heltall:'))

2 for i in range(1, n +1):

3 if n%i ==0:

4 print(i, end='')

Vikjørerprogrammet.Viblirbedtometheltall.Dersomvi skriverinn12ogtrykkerpåenter,serkonsollenvårslikut:

Skrivinnetheltall:12

1234612

b)

1 n= int(input('Skriv inn et heltall:'))

2 summen =0

3 for i in range(1, n +1):

4 if n%i ==0:

5 print(i, end='')

6 summen += i

7 print()

8 print(f'Summen av divisorene er {summen}')

Nårvikjørerprogrammetogtasterinn12underveis,fårvi

Skrivinnetheltall:12

TILVURDERING

1234612

Summenavdivisoreneer28

70 KAPITTEL1

Primtallsfaktorisering

Åprimtallsfaktorisereettallbetyråbrytenedettallialleprimtallsom talleteretproduktav.Foreksempelkantallet12skrivessom2 · 2 · 3.Vi kanbrukePythontilåhjelpeossmedprimtallsfaktoriseringen.

Vitarutgangspunktiettall, n.Sålagervien for-løkkesomgårgjennom alletallfraogmed2opptil n.Vedåbrukerestoperatoren %,kanvi sjekkeom n erdeleligmedhvertavtallenefraogmed2ogoppover. Hvis n erdeleligmedettall,skriverviutdettetalletogoppdaterer verdien n vedådeledetpåtalletvifårfra for-løkka,helttil n erlik1.La ossprimtallsfaktoriseretallet12:

1 n =12

2 for i in range(2, n):

3 while n%i ==0:

4 print(i, end='')

5 n=n/i

6 if n ==1:

7 break

Hervil for-løkkagågjennomettogetttallfraogmed2tilogmed11. Dermedvil while-løkkastartemedtallet2.Vivetat12 : 2 = 6.Når while-løkkakjørerforandregang,vil n = 6.Tallet6erogsådeleligmed 2.Tredjegangvikommertiltestenilinje3erderfor n = 3.Mentallet3er ikkedeleligmed2,såderforgårviutav while-løkka.Viforsetterpåden nesteverdienav i i for-løkka,nemlig i = 3.Ettersom3erdeleligmed3, fårviat3erdensisteprimtallsfaktoren.Daer n = 1ogviavbryter forløkka.Nårvikjørerkodenfårvi

Detbetyrat12 = 2 · 2 · 3.

Vihaddeikketrengtlinje6og7ikoden,menleggmerketilatden størsteprimtallsfaktorener3.Detbetyrat n = 1når for-løkkaer kommettil i = 3.Dermedslipperdatamaskinenågjøreberegningermed alletallenestørreenn3.

Grunnentilatvibarefårprimtall,eratvistarterpåetlavestmuligtall oggåroppover.Hvis n erdeleligmedettallsomikkeeretprimtall,for eksempel4,vilikkedettekommeoppsomfaktorettersomvisjekkerom deterdeleligmed2førvisjekkeromdeterdeleligmed4.

TILVURDERING

Anvendelseritallteori 71
223

Ilinje8endrervien variabelnårvi nner enfaktor.Dukanlese meromdettepåside

102.

1.59

Nårvikjørerprogrammetogforeksempelskriverinn«170» underveis,fårvidetteresultatet:

Skrivinnetheltall:170

2erenprimtallsfaktor

5erenprimtallsfaktor

17erenprimtallsfaktor

Hvisviskriverinntallet«457»underveisfårvi:

Skrivinnetheltall:457

Talleteretprimtall

OPPGAVER

Skrivetprogramsomskriverutseksgangen påhundrenettet.

1.60

Finnalletallsomerdeleligemed2eller3og

skrivdemutpåhundrenettet.

1.61

TILVURDERING

LagenkodeiPythonsomskriverutdenlille gangetabellen.

72 KAPITTEL1 ::: EKSEMPEL1.38
LØSNING 1 n= int(input('Skriv inn et heltall:')) 2 3 faktor_funnet = False 4 for i in range(2, n): 5 while n%i ==0: 6 print(f'{i} eren primtallsfaktor') 7 n=n/i 8 faktor_funnet = True # 9 if not faktor_funnet: 10 print(f'Tallet eret primtall')
Skrivetprogramsomberometheltall,forsååskriveut primtallsfaktorenetiltallet.Hvistalletsomskrivesinneretprimtall, skalprogrammetskriveutattalleteretprimtall.

1.10Tallmønstre

Entallfølgeertallsomkommerienbestemtrekkefølgeetteretbestemt mønster.Eteksempelkanværetallene

1, 4, 9, 16, 25

Vikansemønsterettydeligvedåskrivetallfølgensom

12 , 22 , 32 , 42 , 52

Mønstereterheraltsåatviopphøyerdenaturligetalleneiandrepotens.

::: EKSEMPEL1.39

Lagetprogramsomskriveruttallfølgennedenfor.

1, 4, 9, 16, 25

LØSNING

Vibrukeren for-løkketilålagetallene1,2,3,4og5.Viprinterut kvadratetavtallene.

1 for n in range(1,6): 2 print(n**2, end='')

Dersomviklarerå nneenformelfortallnummer n,brukerviformelen tilålageogskriveuttallene.Ieksempeletnedenfor nnervienformel forrektangeltallene.

::: EKSEMPEL1.40

TILVURDERING

Rektangeltalleneframkommerveddisse gurene:

Lagetprogramsomskriveruthvormange rkanterdeterihver guridetiførste gurene.

Tallmønstre 73
R1 R4 R3 R2

LØSNING

Første gurhartoruter.Vi nnerneste gurvedåleggetilenrad ogenkolonnepåhver gur.Figur2hartoraderogtrekolonner ogderfor2 3 = 6ruter.Figur3hartreraderog rekolonnerog

3 · 4 = 12ruter.Detbetyrat gur n har n raderog n + 1kolonner.

Antallruterblirda n · (n + 1).

1 for n in range(1,11):

2 tall =n*(n +1)

3 print(tall, end='')

Vikjørerprogrammetogfår:

2612203042567290110

Hvisviikke nnerenformelfortallene,kanvilikevelprogrammere mønsteret,bareviavslørerhvaregelenfornestetaller.

::: EKSEMPEL1.41

Tallenenedenfordanneretmønster:

3, 7, 15, 31, 63, 127,...

Lagetprogramsomskriverutdetiførstetalleneimønsteret.

LØSNING

Viprøverossframogoppdagerathverttallerénmerenndet dobbelteavforrigetall.Vilagerenløkkehvorviaddereréntildet dobbelteavforrigetall.Vibrukeren for-løkkesomgårtiganger.

1 tall =3

2 for i in range(10):

3 print(tall, end='')

4 tall =2*tall +1

Resultatetikonsollenblir

TILVURDERING

715316312725551110232047

74 KAPITTEL1

Nårvimåbrukeferetidligereleddforåregneutnesteleddientallfølge, måvibrukeenekstravariabeltilåhuskeforrigetall.

::: EKSEMPEL1.42

Fibonacci-talleneertallene

LagetprogramsomskriverutdetiførsteFibonacci-tallene.

LØSNING

Vileggermerketilathverttallifølgenersummenavdetoforrige tallene.Førviregnerutnyverdifor tall2 måvilagreverdien.Vi lagrerdenienvariabel«minne».

1 tall1 =1

2 tall2 =1

3 print(tall1, end='')

4

5 for i in range(9): # Trenger ni tall til

6 print(tall2, end='')

7 minne = tall2

8 tall2 = tall1 + tall2

9 tall1 = minne

Nårvikjørerkoden,fårvidetteresultatet:

11235813213455

Fraktaler

Fraktalerergeometriske gurersomserlikeutentenvizoomerinneller ut.Mangefraktalerinneholderenganskeenkelde nisjon,menvirker ganskekomplisertenårvilardatamaskinenbrukede nisjonenfere ganger.

::: EKSEMPEL1.43

TILVURDERING

Dendrageliknendefraktalen«JurassicPark»lagesetterfølgende oppskrift:

a)Startmeden«H».

Tallmønstre 75
1, 1
2
3
5
8
13
,
,
,
,
,
,...

b) Lagenkopiavforrigeliste.

c)Byttut«H»med«V»og«V»med«H»ilista.

d)Snurekkefølgen.

e)Leggtilen«H»ogsådenendredekopien.

f) Gjentafereganger.

g)Tegn.«H»betyrsnu90°tilhøyreoggårettfram,«V»betyrsnu 90°tilvenstreoggårettfram.

Nårvitegner,skalvietteren,to,treog reomgangerfådisse gurene.

LØSNING

Førstlagervienstartliste«[’h’]»(linje7).Inniløkkatarvienkopi avlista(linje11)ogutviderlistameden«’h’»(linje12).Såsnurvi kopien(linje13)ogbytterom«’v’»og«’h’»(linje18).Såsettervi listaogkopiensammen(linje24).Tilslutttegnervi guren:«’h’» betyrtilhøyreogrettfram,mens«’v’»betyrtilvenstreogrettfram.

TILVURDERING

76 KAPITTEL1
Skrivprogrammetsomtegnerfraktalen.
2
3
5
6 7
8
9 iterasjon =1 10
11
12 ny
13
1 import turtle as t
t.speed(speed=0)
4 antall_iterasjoner =13
lengde =4
ny =['h'] # Starter med høyre
# Tellerantallrunder (iterasjoner)
while iterasjon < antall_iterasjoner:
kopi = ny # Tar vare påen kopi.
= ny +['h'] # Legger påen ekstra 'h'
kopi.reverse() # Snur kopien

17 # Bytter ompå venstre og høyre

18 for i in range(len(kopi)):

19 if kopi[i]== 'h':

20 kopi[i]= 'v'

21 else:

22 kopi[i]= 'h'

23 # Legger tilden endredekopien

24 ny = ny + kopi 25

26 iterasjon +=1

27

28 for instruks in ny:

29 if instruks == 'h':

30 t.right(90)

31 t.forward(lengde)

32 else:

33 t.left(90)

34 t.forward(lengde)

TILVURDERING

Tallmønstre 77

1.62

Lagetprogramsomskriverutkubikktallene, altså

1.63

OPPGAVER

Entallfølgeserslikut:

Lagetprogramsomskriverutdetiførste Lucas-tallene.

1.66

1, 8, 27, 64, 125, 216, 343,...

DensvenskematematikerenHelgevonKoch fantpåenfraktalmedfølgendeoppskrift:

a)Startmed«HHH».

b) Byttut«H»med«HVHV»og«V»med «VVHV».

1, 3, 6, 10, 15, 21, 28,...

a)Finnetmønsteravgeometriske gurer somillustrerertallfølgen.

b) LagetprogramiPythonsomskriverut de15førstetalleneitallfølgen.

1.64

Entallfølgeergittsom

256, 128, 64, 32, 16, 8,...

Lagetprogramsomskriverutdeførsteti leddeneifølgen.

1.65

TallfølgennedenforkallesLucas-tallene: 2,

,

,

,

, 11, 17,...

c)Gjentanoenganger.

d)Tegn.«H»betyrsnu120°tilhøyreoggå rettfram,«V»betyrsnu60°tilvenstreog gårettfram.

Nårvikjørerprogrammet,skalvivedhenholdsvisingen,enogtoiterasjonerfådisse gurene:

FraktalenharfåttnavnetKoch-snøfnugget. Lagetprogramsombrukerturtle-biblioteket tilåtegnefraktalet.

TILVURDERING

78 KAPITTEL1
1
3
4
7

1.11Feilmeldinger

Deterirriterendeåtrykkepå«Run»,forsååfåenfeilmelding.Men feilmeldingeneertilstorhjelp,omvibareforstårhvordandevirker.

SyntaxError

Syntakshandleromreglerforoppbygningavkoden.Hvisdufår «SyntaxError»,betyrdetatkodendinavvikerfrareglene.

Dennefeilmeldingenviseratdetantakeligerenfeilpåsluttenavlinja:

foriinrange(2,n)

SyntaxError:invalidsyntax

Hermanglerdeterkolon,somdetalltidskalværepåsluttenavførste linjeiløkker.

Densammefeilenfårvihvisviglemmerkolonpåsluttenavenlinjemed if:

ifn%i==0 ^

SyntaxError:invalidsyntax

Feilmeldingeninneholderettegnsompekerpåetmuligstedfeilen ligger.Ikodennedenforpekerpilamotlikhetstegnet:

ifn%i=0:

SyntaxError:invalidsyntax

Ogdeternettoppderfeilenligger–viharbruktettlikhetstegnistedet forto.

Dersomviglemmeråavslutteenstrengmedanførselstegn,ser feilmeldingenslikut:

TILVURDERING

print(f'{n}erikkeetprimtall)

SyntaxError:EOLwhilescanningstringliteral

Feilmeldinger 79
^
^
^

Herstår«EOL»for«endofline».Feilmeldingenbetyratprogrammetleser enstrengnårlinjaerslutt.

Noengangerpekerfeilmeldingenpålinje under derfeilener:

1 if faktor_funnet:

2 print(f'{n} er ikke et primtall'

3 else:

4 print(f'{n} eret primtall')

Kodenovergirdennefeilmeldingen:

else: ^

SyntaxError:invalidsyntax

Detkanvirkesomatkodeninneholderenfeilpålinjasombegynnermed else.Deterimidlertidlinjaoversomharfeil.Detmanglerenparentes påsluttenavlinja,menfeilenoppdagesikkeavPythonførpånestelinje.

IndentationError

InnrykkerendelavregleneforkodingiPython.Hvisvibryterdisse reglene,fårvi«IndentationError»–feilvedinnrykket.

Kodennedenforgirenfeilmeldingominnrykk:

1 for i in range(2, n):

2 if n%i ==0:

3 faktor_funnet = True

4 break

Feilmeldingenvifårer: break ^

IndentationError:unindentdoesnotmatchanyouter indentationlevel

TILVURDERING

Innrykketskalværedetsammeforallelinjerisamme if-test.Detbetyr at break skalhasammeinnrykksomlinjaover.

Ettellerferemellomromistartenavenlinjesomikkeskalhainnrykkgir ogsåenIndentationError:

80 KAPITTEL1

1 faktor_funnet = False

2 for i in range(2, n):

3 if n%i ==0:

4 faktor_funnet = True

5 break

Nårvikjørerdennekodenfårvi

foriinrange(2,n):

IndentationError:unexpectedindent

Herviserfeilmeldingenatdeteretekstramellomromfør for-løkka.

TypeError

Dersomkodeninneholderetbruddpåhvordandeuliketypeneskal brukes,fårvi«TypeError».KodennedenforgirenTypeError:

1 n= int(input('Skriv inn et tall:'))

2 n=n(3)

Programmetgirfølgendefeilmelding: n=n(3)

Idetteprogrammetharvariabelen n type int.Pånestelinjestårdeten parentesumiddelbartettervariabelen.Mankunnekanskjetrodetskulle bety n · (3)?DetteerimidlertidslikviiPythonbrukerfunksjoner.Her harvialtsåbruktvariabelen n somenfunksjon,mensdenegentligeret heltall.Dafårvi«’int’objectisnotcallable».

NameError

Hvisviikkeharde nertenvariabelførdenbrukes,fårvien«NameError».

Ikodennedenforerdetenskrivefeil:

TILVURDERING

TypeError:'int'objectisnotcallable

1 tall =17

2 print(tal)

Feilmeldinger 81
^

Detgirdennefeilmeldingen:

print(tal)

NameError:name'tal'isnotdefined

IndexError

Nårviarbeidermedelementerilister,måvipassepåantallelementeri lista.Feilmeldingen«IndexError»kommerdersomviprøveråleseeller endreetelementutenforlista:

Ikodenovenforvilindeksen i fåverdiermellom0og7,sidendeter åtteelementerilista.Ilinje5erimidlertidindeksen i + 1,somdafår verdiermellom1og8.NårPythonfårkommandoen liste[8] fårvi feilmelding.Feilmeldingenblir

x2=liste[i+1]

IndexError:listindexoutofrange

TILVURDERING

82 KAPITTEL1
1 liste =[7,4,4,6,3,3,7,9] 2 3 for i in range(len(liste)): 4 x1 = liste[i] 5 x2 = liste[i +1] 6 print(x2 x1)

1.12Ekstrabiblioteker

Tilnåharduidennebokamøttpå import-kommandoenvedto anledninger,nemlignårviskulleregnemedkvadratroteller π,ognårvi skullebrukeTurtle-gra kk.Vibruker import nårviskalbrukefunksjoner somikkefølgermedigrunninstallasjonenavPython.

Nårvibruker import-kommandoen,leserviinnen lmedtillegsfunksjoner.Filenekallervibiblioteker.VanligebibliotekererMatplotlib,Random, Pandas,SciPy,NumPy,PyGameogandre,itilleggtilMathogTurtle.

NoenbibliotekerfølgeralltidmedPythonogmåbareaktiveresmed import-kommandoen.Andrebibliotekermåinstalleresspesieltidet programmeringsmiljøetdubruker.

Vikanundersøkeometbibliotekerinstallertvedåskrive import sammenmedbiblioteknavnetogsåkjøreprogrammet.Eksempel:Vi undersøkeromMath-biblioteketerinstallertvedåskrive:

1 import math

Nårvikjørerprogrammetskjerdetingentingikonsollen.Detbetyrat biblioteketerinstallertoglastetinnutenproblemer.

Dersomviprøveråbrukeetbiblioteksom ikke erinstallertiprogrammeringsmiljøetvibruker,fårvifeilmeldingen«ModuleNotFoundError». SlikserdetutnårviprøveråbrukebiblioteketPyGamepåenPChvor PyGameikkeerinstallert.Viskriveretprogrammedénlinje:

1 import pygame

Nårvikjørerprogrammetfårvifølgendeikonsollen:

importpygame

ModuleNotFoundError:Nomodulenamed'pygame'

FeilmeldingenbetyratbiblioteketPyGameikkeerinstallert.

Noenforetrekkeråimportereslik: frommathimport*.Dalastesalle kommandoerfrabiblioteketinnogkanbrukesutenforstavelse,altså pi istedetfor math.pi.Deterfordelerogulempermedbeggemetodene, mendenanbefaltemetodeneråimportereslikviharbeskrevetovenfor.

TILVURDERING

Detvarierer fraprogramtil programhvordan viinstallerernye biblioteker.Mange programmerbruker enpakkehåndterer fraPython,somkalles pip.

Ekstrabiblioteker 83

Algoritmer TILVURDERING

[2]

Åtenkealgoritmiskhandleromåtilnærme segetproblempåensystematiskmåteog åkunnevurderehvilkestegsomskaltilfor åløseetproblem.Dethandleromåbryte problemetnedimindredelproblemerfor sååkunnelagefremgangsmåterforåløse problemet.

TILVURDERING

Ekstrabiblioteker 85

2.1Løpegjennomlister

Noensammensatteproblemeriprogrammeringkreveratvitarvarepå mangetall.Dissekanvilagreienliste.Nedenforserviderforpånoen teknikkerknyttettillister.

Løpegjennomenlistedirekte

Meden for-løkkekanviløpegjennomenlistedirekte.

::: EKSEMPEL2.1

Skrivenkodesomløpergjennomenlisteogskriverutelementene.

LØSNING

1 liste =[1,1,2,3,5,8,13,21]

2

3 for x in liste: 4 print(x, end='')

Nårvikjørerkodenfårvidetteresultatet:

1123581321

Vilvisummeredissetallene,lagervienegenvariabeltilsummen.

::: EKSEMPEL2.2

Skrivetprogramsomsummereralletalleneienliste.

LØSNING

1 liste =[1,1,2,3,5,8,13,21]

2

3 summen =0

4 for x in liste:

5 summen = summen +x

TILVURDERING

6 7 print(summen)

Nårvikjørerkoden,fårvi54tilsvar.

86 KAPITTEL2

Teknikkenvibrukerilinjene3–5ieksempeletkansammenfattesslik:Vi oppretterenvariabelsomtilsluttskalinneholdesummen.Hvergang løkkakjører,oppdaterervisummenmeddenverdienvierkommettili lista.Detteerengenerellteknikkvikanbrukeimangesammenhenger.

Det nneseninnebygdkommandosomgirakkuratdetsamme resultatet,nemlig sum.Idettekapittelettrenervipåalgoritmisktenkning ogbrukerderforminstmuligavdisseinnebygdekommandoene.Nårvi ellersprogrammerer,brukervidetvikanavkommandoer.

Brukeindekseringtilåløpegjennomenliste

Istedetforålaløkkaløpegjennomselvelista,kanløkkaløpegjennom plassnumrenetillista.Vikallerplassnumreneforindekser.Indeks0er førsteplassilista,indeks1erandreplassilista,ogsåvidere.

andre element, indeks 1

liste = [1, 1, 2, 3, 5, 8, 13, 21]

første element, indeks 0

::: EKSEMPEL2.3

siste element, indeks –1

Vibruker range-kommandoentildette.Kommandoen len regner utlengdenavlista.Dagirkommandoen range(len(liste)) alle plassnumrenetillista liste.

sjette element, indeks 5

Skrivenkodesomløpergjennomenlisteogskriverutelementene.

LØSNING

1 liste =[1,1,2,3,5,8,13,21]

2

3 for i in range(len(liste)):

4 x= liste[i]

5 print(x, end='')

Resultatetavdennekodenblir

TILVURDERING

1123581321

Løpegjennomlister 87

Detoeksempleneovenforgirakkuratdetsammeresultatet.Fordelen medåbrukeindeksereratviogsåkanplukkeutforeksempelnesteeller forrigeelementilista.Detplassnummeretvierpåkallervigjernefor i. Nesteelementharindeks i + 1,mensforrigeelementharindeks i 1. Dabetyr liste[i] detelementetvierpå,mens liste[i+1] erneste element,ogsåvidere.

::: EKSEMPEL2.4

Enlisteavtallergittsom

1123581321

Lagenkodesomregnerutdiferansenmellomalletallene.

LØSNING

Viskalregneutdiferansenmellomtotallsomstårvedsidenav hverandre:

1123581321

0112358

liste[i] erdetelemementetvierkommettil.Nesteelementi listablirda liste[i+1].Diferansenmellomelementeneblir liste[i+1]‑liste[i].

1 liste =[1,1,2,3,5,8,13,21]

2

3 for i in range(len(liste)‑1):

4 differanse = liste[i +1]‑ liste[i]

5

6 print(differanse, end='')

Resultatetavåkjøreprogrammetblir

0112358

TILVURDERING

Ilinje3ikodenieksempeletoverstårdet range(len(liste)‑1) . Hvorforstårdet 1der?Holdoppenhånd,såserdudet:Enhåndhar fem ngre.Mellom ngreneerdet fre mellomrom.Listaovenforbestår av len(liste) elementer.Antallmellomromblirda len(liste)‑1.

88 KAPITTEL2

2.1

Skrivetprogramsommultipliserertallenei lista [1,1,2,3,5,8,13,21] .

2.2

Viskalskriveenkodesom nnermidtpunktetmellomtall.

a)Finnetuttrykkformidtpunktetmellom totall a og b. Tips:Startmedtosmåtall,foreksempel5og11.Hvilkettallliggermidt mellom5og11?hvordankanduregne degframtildetvedhjelpavtallene5 og11?Prøvgjernemedferetall.

b) Skrivenkodesomregnerutmidtpunktetmellomtallsomstårvedsidenav hverandreienliste.

2.3

Gjennomsnittetavenlistemedtaller summenavalletallenedividertmedantall tall.

Lagenkodesomregnerutgjennomsnittet avalletalleneienliste.

2.4

Nårviregnerutgjennomsnittavenliste medtall,eralletalleneilistalikeviktige ogbidrarlikemyetilgjennomsnittet.Iet vektetgjennomsnitt kanvilanoenavtalleneværeviktigereenndeandre.Viutstyrer

OPPGAVER

tallenemedenlistemedvekter.Nårvi regnerutgjennomsnittetmultipliserervi førsttallenemedtilhørendevekt.

Eksempel:Nedenforserduenlistemedtall sammenmedenlistemedvekter.

liste=[1,1,2,3,5,8] vekter=[1,1,1,1.5,2,2]

Detvektedegjennomsnittetavtalleneblir da

Skrivetprogramsomregnerutdetvektedegjennomsnittetavtalleneienliste.

Tabellenviserstandpunktkarakterenei matematikkiklasse1STB.

Skrivetprogramsomregnerutgjennomsnittskarakteren.

TILVURDERING

Løpegjennomlister 89
1 1 + 1 1 + 2 1 + 3 1,5 + 5 2 + 8 2 6 = 5
75
,
2.5
KARAKTER FREKVENS 1 1 2 4 3 7 4 9 5 6 6 2

2.2if-tester

Vitarutgangspunktienlistemedtretall.Hvordanvelgerviutdetstørste tallet?Enmuligheteråsammenlikneallekombinasjoneravtotallilista:

Laossbrukesammetankegangforå nnedetmidterstetallet.Deter mangemuligheterunderveis,ogdetkangjøredetletterehvisviførst lageretfytskjema:

90 KAPITTEL2
1 liste =[1,6,12] 2 3 a= liste[0] 4 b= liste[1] 5 c= liste[2] 6 7 if a<b: 8 if b<c: 9 print(c) 10 else: 11 print(b) 12 else: 13 if a<c: 14 print(c) 15 else: 16 print(a)
a < b a < c b < c a < c b < c ja ja ja ja ja nei nei nei nei nei a c bc a
TILVURDERING

Brukfytskjemaetovertilåskriveenkodesombruker if-testertilå plukkeutdetmidterstetallet,altsådettalletsomharnestlavestog nesthøyestverdi,ienlistemedtretall.

1 def midterst(liste):

2 a= liste[0]

3 b= liste[1]

4 c= liste[2]

TILVURDERING

if-tester 91
::: EKSEMPEL2.5
7 return b 8 elif a<c: 9 return c 10 else: 11 return a 12 elif a>b: 13 if a<c: 14 return a 15 elif b<c: 16 return c 17 else: 18 return b
5 if a<b: 6 if b<c:
S1 == S2 S1: S2: S1 S1 S1 S2 S1: S2: S1: S2: uavgjort ja ja ja nei nei nei nei
Eksempeletnedenforerstein–saks–papir.Ogsåherbrukervifytskjema.

Brukfytskjemaetovenfortilålageetprogramsomavgjørhvem somharvunnetienomgangmedstein–saks–papir.Brukerenskal tasteinnhvaspillerneharvalgt.

LØSNING

Viberbrukerenomåtasteinnsinevalgoglagrervalgeneito variabler«spiller1»og«spiller2».Sågårvigjennomfytskjemaet.Til sluttskriverviuthvemsomvant.

1 print('Skriv innhva spillerne har valgt.')

2 print('Skriv inn «stein», «saks» eller «papir».')

3 spiller1 = input('Spiller 1, skriv inn valg:')

4 spiller2 = input('Spiller 2, skriv inn valg:')

5

6 if spiller1 == spiller2:

7 vinner =0

8 elif spiller1 == 'stein' and spiller2 ==

'saks':

9 vinner =1

10 elif spiller1 == 'saks' and spiller2 ==

'papir':

11 vinner =1

12 elif spiller1 == 'papir' and spiller2 ==

'stein':

13 vinner =1

14 else:

15 vinner =2

16

17 if vinner ==0:

18 print('Detble uavgjort.')

19 else:

20 print(f'Spiller {vinner} vant.')

TILVURDERING

92 KAPITTEL2 ::: EKSEMPEL2.6

2.6

Totallergittsomvariablene«n»og«m». Skrivetprogramsomavgjørhvilkettall somerstørst.

2.7

OPPGAVER

2.8

Ettallspillmedtospillere. Tospillerestårvendtmothverandre.Når desammenhartelttil3,roperdeneneut ettall.Samtidigholderbeggespillerne frametantall ngrepådenenehånda. Dersomsummenav ngreneertalletsom bleropt,vinnerdensomropterunden.Så erdetdenandrespillerensturtilårope. Spillspilletogskrivetprogramsomavgjør hvilkenavdetospillernesomharvunnet enrundeavspillet.

TILVURDERING

if-tester 93
Bygguteksempeletovenfor,slikatto spillerekanspillestein–saks–papirfere ganger.Programmetskaltilsluttskriveen oppsummeringoverhvormangeganger hveravspillerneharvunnet.

2.3Størsteverdi

Aktivitet

Forengruppepå10–15elever.

1.Stilldereetterhverandrepåenrekke.

2.Alleskriverettilfeldigtallpåhversinlapp.

3.Vibegynnermeddenyttersteeleven.Sammenliknemedneste person.Hvisnesteharlaveretall,bytterdeplass.Denmed høyesttallgårvideretilnesteperson.

4.Sammenliknemednesteperson.Densomhardethøyeste talletgårvidere.

5.Gjentatilsluttenavrekka.

6.Densomkomtilsluttenavrekkaviserframsitttall.Detteer detstørstetallet.

Detstørstetalletienlistekanvi nnemedkommandoen max.Viskal imidlertidlagevåregenalgoritmesomgjørdetsamme.

Vistartermedenlistemedtall:

Visammenliknerdetoførstetallene,10og34.Såtarvimedossdet størsteavdisse,34,ogsammenliknermeddetneste,35.Detstørsteav disse,35,sammenliknervimednestetall,altså11.Slikfortsettervitilvier ferdigemedhelelista.

TILVURDERING

HvordanoversettervidettetilPython?Ibeskrivelsenovenforser viatviheletidenhuskerhvilkettallsomtilnåerstørst.IPython tilsvarerdetteåhaenegenvariabelhvorvilagrerdetforeløpigstørste tallet.Såsammenliknervinesteverdimeddette,ogbytterutverdien avvariabelennårvi nneretstørretall.Vilageretfytskjemafor programmet:

94 KAPITTEL2
103435113175347672791331687371

størst = første tall tall = andre tall

tall > størst ja nei

tall = neste tall

Vileggermerketilatvariabelensominneholderstørsteverdimåhaen startverdinårvibegynner.Visetterdentilførstetall,ogsåsammenlikner vimedneste.

størst = tall

SkrivetprogramiPythonsom nnerdetstørstetalletienliste.

LØSNING

Viløpergjennomlistaogsammenliknermedenvariabelsom huskerdetforeløpigstørstetallet.Dettegjørvimeden for-løkke. Førvistarterpåløkkasettervivariabelentildetførstetalletilista.

Kodengir79tilsvar.

TILVURDERING

Nårviskal nnestørsteellerminsteelementienlisteogdettilhørende elementetienannenliste,brukerviplassnummeret,indeksen,som ovenforpåside87.

Størsteverdi 95
::: EKSEMPEL2.7 1 liste =[10,34,35,34,76,72,79,13,31, 68,73,71] 2 3 størst = liste[0] 4 5 for x in liste: 6 if x> størst: 7 størst =x 8 9 print(størst)

Enverditabellergittsomtolister:

xverdier=[‑3,‑2,‑1,0,1,2,3,4,5,6] yverdier=[32,21,12,5,0,‑3,‑4,‑3,0,5]

Skrivenkodesom nnerminste y-verdiogtilhørende x-verdi.

LØSNING

Viantaratdenførsteverdienilistaover y-verdiererminst,oglagrer denneienvariabel.Derettersammenliknervidennevariabelen medhvertleddilistamed y-verdier.Hvergangvi nnerenlavere yverdi,bytterviinnholdivariabelen.Samtidiglagrerviindeksenien egenvariabel.Dennebrukervitilå nnedentilsvarende x-verdien.

12 print(f'Minste verdi er y={minst_y}, for x= {xverdier[minst_indeks]}.')

Kodengirfølgenderesultat:

Minsteverdiery=‑4,forx=3.

TILVURDERING

96 KAPITTEL2 ::: EKSEMPEL2.8
=0
1 xverdier =[‑3,‑2,‑1,0,1,2,3,4,5,6] 2 yverdier =[32,21,12,5,0,‑3,‑4,‑3,0,5] 3 4 minst_y = yverdier[0] 5 minst_indeks
6
if yverdier[i]< minst_y:
minst_y = yverdier[i]
minst_indeks =i
7 for i in range(len(yverdier)): 8
9
10
11

2.9

a)Beskrivenalgoritmesom nnerdet størstetalletienliste.

b) Skrivenkodesombrukerdennealgoritmen.

c)Utvidkodenslikatprogrammetogså nnerdetminstetallet.

2.10

Enverditabellerlagretitolister:

OPPGAVER

xverdier=[‑6,‑5,‑4,‑3,‑2, ‑1,0,1,2,3,4,5]

yverdier=[‑11,‑4,1,4,5, 4,1,‑4,‑11,‑20,‑31, ‑44]

Bestemdetpunktet (x, y) somharstørst yverdi.

2.11

Enverditabellergittsomtolister:

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

yverdier=[2.5,9.3,10.9, 13.6,14.1,19.9,21.5, 25.2,32.1,31.3]

a)Skrivetprogramsomforhver x-verdi skriverutdiferansenmellom y og3 · x.

Eksempel:Når x er2,blir3 · x = 3 · 2 = 6. Herer y = 9,3,sådiferansenblir9,3 6 = 3,3.

b) Utvidprogrammettilåsummerekvadratetavallediferansene.Duskalaltså gangehverdiferansemedsegselvfør dusummerer.

c)Iprogrammetovenforsummertevi kvadratetavdiferansenemellom y og a x med a = 3.Utvidprogrammetditt tilågjøredetsammeforalleverdier a ∈ {3, 3 1, 3 2,..., 3 9, 4}.Bestem denverdienav a hvorsummenav kvadratetavdiferanseneblirminst.

TILVURDERING

Størsteverdi 97

2.4Kombinasjoner

Viskalsettesammenallekombinasjoneravbokstaven x meddetre tallene1,2og3

x 1 23

Kombinasjoneneblir:

x1, x2, x3

HvordankanvigjøredetteiPython?På gurenerdettresammensetninger.Dissekanvilagemeden for-løkkesomgårtreganger.

1 for y in [1,2,3]:

2 print('x',y)

Resultatetblir: x1 x2 x3

Såutvidervi:Viskalsettesammenallemuligekombinasjoneravdetre bokstavene a, b og c meddetretallene1,2og3.Vibegynnerålisteopp muligekombinasjoner:

a1, c2, b1, a3, c1,...

Foråsikreatvifårmedoss alle kombinasjoner,letervietteretsystem. Vikommerframtilatviforhvertelementidenførstelistalageren sammensetningmedhvertelementidenandrelista:

ab c 1 23

ab c 1 23

ab c 1 23

TILVURDERING

Hver gurtilsvarersituasjonentidligere,somga x1, x2og x3.Vimånå lagetreslike gurer.Dettekanviogsågjøremeden for-løkkesomgår treganger.Viplassererdeneneløkkainnidenandre:

98 KAPITTEL2

1 for x in ['a', 'b', 'c']:

2 for y in [1,2,3]:

3 print(x,y, end=',')

Resultatetblirnå:

a1,a2,a3,b1,b2,b3,c1,c2,c3, Listenevikombinerertrengerikkeværelikelange,somvisernedenfor.I nesteeksempelsettervielementenesammenogleggerdemiennyliste.

::: EKSEMPEL2.9

TillunsjkanMalinvelgemellomlof,kneippogrundstykker. Påleggenehennesersyltetøy,ost,kaviar,eggogskinke. Skrivetprogramsomlisteroppallekombinasjonenehunkanlage tillunsj.

LØSNING

Vibrukerénløkkeforbrødtypeneogénløkkeforpåleggstypene ogleggerløkkeneinnihverandre.

1 brød =['loff', 'kneipp', 'rundstykke']

2 pålegg =['syltetøy', 'ost', 'kaviar', 'egg', 'skinke']

3

4 for nederst in brød:

5 for øverst in pålegg:

6 print(f'{nederst} med {øverst}')

Nårvikjørerprogrammet,skriverPythonut24linjer.Deførste linjeneserslikut

loffmedsyltetøy

loffmedost

loffmedkaviar

loffmedegg

loffmedskinke

TILVURDERING

kneippmedsyltetøy

kneippmedost

Kombinasjoner 99

Vikanbruke range-kommandoentilågenereretall,somvisåkombinerersomvigjordeovenfor.

::: EKSEMPEL2.10

Skrivetprogramsomlageralletallpar (x, y) der x og y erheletall mellom 2og2.

LØSNING

Heltallenemellom 2og2lagervimed range(‑2,3).Såbruker vien for-løkketilåkombineredem.

1 for x in range(‑2,3):

2 for y in range(‑2,3):

3 print(x,y, end='|')

Nårvikjørerprogrammet,skriverPythonut49linjer.Deførsteer:

Teknikkenovenforkanvikombineremeden if-test.

::: EKSEMPEL2.11

Skrivetprogramsom nneralleheleverdierav x og y fraogmed0 tilogmed10sompasserinnilikningen:

2x 5y = 10

LØSNING

Vilagerallekombinasjoneravtallpar (x, y).Viskriverdemuthvis deoppfyllerlikningen.

1 for x in range(0,11):

2 for y in range(0,11):

TILVURDERING

3 if 2*x ‑5*y ==10:

4 print(f'({x}, {y})')

100 KAPITTEL2
‑2‑2|‑2‑1|‑20|‑21|‑22|‑1‑2|‑1 ‑1|‑10|‑11|‑12|0‑2|0‑1|00 |01|02|1‑2|1‑1|10|11|12 |2‑2|2‑1|20|21|22|

Nårvikjørerprogrammet,fårvi: (5,0) (10,2)

Dettebetyrat x = 5og y = 0oppfyllerlikningen.Detgjørogså x = 0og y = 2.

Enalternativ print-kommandoilinje4er print('(',x,',',y,')') eller print((x,y)).

OPPGAVER

2.12

Skrivomeksempeletpåside99tilåbruke indekseroverdetolistene.

2.13

Tautgangspunktidetolistene:

liste1=['a','b','c','d', 'e','f']

liste2=['f','g','h','i']

Skrivetprogramsomlagerennyliste medallemuligesammensetningeravett elementfradenenelistamedettelement fradenandrelista.

2.14

Skrivetprogramsomplukkerutalletalltripler (x, y, z) somerslikat

x2 + y2 = z2 fortallmellom1og10.

2.15

a)Vikastertovanligeterninger.Skriv etprogramsomskriveroppdeulike

kombinasjoneneavterningkastvikan få.

b) Endreprogrammetslikatdetikke skriverutsammekombinasjonfere ganger.Altsåskal (1, 2) og (2, 1) bare skrivesutsom (1, 2).

2.16

Skrivetprogramsomskriveroppalleheltall x og y mellom 10og10sompasseri likningen

2x + 3y = 24

2.17

Skrivetprogramsommed n = 5girfølgendeoutput:

Kombinasjoner 101
1 21 321 4321 54321
TILVURDERING

2.5Sjekkalle

Vedførsteøyekastserdetuttilatalletallenenedenforerdeleligemed3.

62721393392433271221453363936132418

Viskalundersøkeomdettestemmer.Detmestnaturligeeråstartepå førstetallogsåsjekketallfortallomdeterdeleligmed3.Hvisvikommer tilettallsom ikke erdeleligmed3,huskervidette.Detgjørvienklestved atviendrerverdienpåenenvariabel.Dennevariabelenmåopprettesfør viundersøkerførstetall.

tall = neste tall

ja nei ::: EKSEMPEL2.12

delelig = ja tall = første tall

tall er delelig med 3 delelig = nei

Skrivetprogramsomavgjøromalletalleneerdeleligmed3: 62721393392433271221453363936132418

LØSNING

Viopprettervariabelen«delelig».Visetterverdienavdennetil True.Viendrerverdientil False hvisvi nnerettallsomikkeer deleligmed3.

1 liste =[6,27,21,39,33,9,24,33,27,12, 21,45,3,36,39,36,13,24,18]

2

3 delelig = True

4 for x in liste:

TILVURDERING

5 if x %3!=0:

6 delelig = False

102 KAPITTEL2

7 if delelig == True:

8 print('Alle tallene i lista er delelige med 3.')

9 else:

10 print('Ikkealle tallene er delelige med 3.')

Nårvikjørerprogrammet,fårvidetteresultatet:

Ikkealletalleneerdeleligemed3.

Deteraltsåminstetttallsomikkeerdeleligmed3.

Kodenieksempeletovervilbrukekorteretiddersomvietterlinje6 leggertilkommandoen break,sommedéngangavslutterløkka.

Densammeteknikkenbrukerviforålageetprogramsomundersøker omettalleretprimtall.

::: EKSEMPEL2.13

Skrivetprogramsomavgjøromettalleretprimtall.

LØSNING

1 n =57

2

3 primisk = True

4 for i in range(2, n):

5 if n%i ==0:

6 primisk = False

7

8 if primisk == True:

9 print(f'{n} eret primtall')

10 else:

11 print(f'{n} er ikke et primtall')

Vikjørerprogrammetogfårat57ikkeeretprimtall.

TILVURDERING

Sjekkalle 103

2.18

Skrivetprogramsomavgjøromalletallenei listaundererdeleligmedsju:

2.19

Skrivetprogramsomsjekkeromalletallene eroddetall:

OPPGAVER

2.20

Markusharenlistemedtall.Hanregner medatavstandenpåtallinjafra10tilhvert tallermindreenn5.Skrivetprogramsom undersøkerdette.Talleneer:

TILVURDERING

104 KAPITTEL2
{14, 56, 84, 133, 122, 28, 77}
{3, 7, 6, 13, 31, 15, 55, 97, 13, 11, 3, 5, 10}
{5, 7, 4, 6, 3, 16, 18, 2, 3, 17}

2.6Sortering

Åprogrammeresorteringerengodøvelseialgoritmisktenkning.Deter mangeulikemåteråsorterepå.Herfølgernoensorteringsalgoritmer.

Boblesortering

Aktivitet

Forengruppeelever,gjerneomlag10–15personer.

1.Stilldereetterhverandrepåenrekke.

2.Stilldereoppetteralder.

3.Dereskalnåsorteredereetterhøyde.Gjørfølgende:

(a)Begynnienden.Stårdetoførsteriktig?Hvisikke,bytt plass.

(b)Stårnummertoogtreriktig?Bytteventueltplass.

(c)Stårnummertreog reriktig?Bytteventueltplass.

(d)Fortsettslikgjennomhelerekka.

(e)Begynnforfraigjen.

(f)Fortsettomogomigjentilingenmåbytteplass.

Boblesorteringforegårslik:Visammenliknerdeførstetotallene.Hvisde stårfeil,såbytterviplass.Såfortsettervimedtalltoogtre–ogbytter plassomdestårfeil.Slikfortsettervigjennomhelelista.Nårvierferdig, begynnerviforfraigjen,helttildetikkeernødvendigåbyttenoentall. Daerlistasortert.

::: EKSEMPEL2.14

Skrivetprogramsombrukerboblesorteringtilåsortereenliste medtall.

LØSNING

Iprogrammetfårvigjentattegangerbrukforåbytteplasspåtotall ilista.Vilagerførstenfunksjonsomgjørdette.

Vibrukeren for-løkketilåsammenliknetoogtotallilista.

TILVURDERING

Lengdenavlistaer len(liste).Daerantallparsomskal sammenliknes len(liste)‑1

Vibrukeren while-løkketilågjenta for-løkkafererunder.Hver

Sortering 105

gangvistarterpåennyrundemed for-løkke,settervivariabelen «byttet»til False.Dersomvimåbyttetotall,settervi«byttet»til True.Hvisenrundemed for-løkkaerferdigutenat«byttet»er blitt True,vetviatvikanstoppe.Dasettervi«fortsett»til False.

1 liste =[30,10,86,68,69,31,77,3,14, 23,99,6,66,2,27,84,16,81,99,31]

2

3 # Funksjon som bytter plass påto elementer

4 def bytt(liste,n,m):

5 minne = liste[n]

6 liste[n]= liste[m]

7 liste[m]= minne

8

9 # Sørger for at while løkka starter

10 fortsett = True

11

12 while fortsett:

13 # Husker omvi har gått gjennom heleuten

å bytteplass på noen.

14 byttet = False

15

16 for i in range(len(liste)‑1):

17 if liste[i]> liste[i +1]:

18 bytt(liste,i,i +1)

19 byttet = True

20 # Hvis ingen harbyttet, ervi ferdige.

21 if byttet == False: 22 fortsett = False 23 24 print(liste)

TILVURDERING

106 KAPITTEL2

Skyttelsortering

Aktivitet

Forengruppeelever,gjerneomlag10personer.

1.Stilldereetterhverandrepåenrekke.

2.Dereskalnåsorteredereetteralder.Gjørfølgende:

(a)Begynnienden.Stårdetoførsteriktig?Hvisikke,bytt plass.

(b)Stårnestepar,altsånummertoogtre,riktig?Bytt eventueltplass.Sjekkogsåførstepar.

(c)Stårnummertreog reriktig?Bytteventueltplass.Sjekk ogsåandreparogderetterførstepar.

(d)Fortsettslikgjennomhelerekka.

Sliksortererdumedskyttelsortering:Sammenlikneførstepar,ogbytt omnødvendigplass.Gåderettervideretilnestepar.Sammenlikne ogbyttomnødvendig.Sjekkogsåførstepar.Gåvideretiltredjepar: Sammenlikneogbytt,oggjentaforandreogførstepar.Slikfortsetter dugjennomhelelista.

::: EKSEMPEL2.15

Skrivetprogramsomsortererenlistemedskyttelsortering.

LØSNING

Vilagerførstenegenfunksjonsombytterplasspåtoelementeri enliste.

TILVURDERING

Vilageren for-løkkesomsammenliknerogbytterplassfraslutt

tilstartpåalleelementeneienliste.Denneløkkaleggerviinnien annen for-løkke,somtelleroppfrastarttilsluttilista.

Sortering 107
1. par 2.
3. par 4. par 5. par
par

2.21

Sorterlistaundervedåbrukeboblesortering.

2.22

Lagenlistemed10tallivilkårligrekkefølge. Lagetprogramsomsortererlistamed skyttelsortering.

OPPGAVER

2.23

Innstikksorteringeråsorterepådenne måten:

Startmedførstetallilista.

Nestetallleggerdupåriktigplass–til høyreellertilvenstre–iforholdtildet første.

Dettredjetalletleggerdupåriktigplass. Lagplassilistadersomdetskalinn mellomtotall.

Fortsettsliktilduharsortertalle. Lagetprogramsomsorterermedinnstikksortering.

TILVURDERING

108 KAPITTEL2 1 liste =[30,10,86,68,69,31,77,3,14, 23,99,6,66,2,27,84,16,81,99,31] 2 3
Funksjon
plass
4 def bytt(liste,n,m): 5 minne = liste[n] 6 liste[n]= liste[m] 7 liste[m]= minne 8 9
Løkke
slutt. 10 for i in range(len(liste)‑1): 11 # Løkke somgår gjennom en del av lista fra slutt til start. 12 for j in range(i,‑1,‑1): 13 if liste[j]> liste[j +1]: 14 bytt(liste,j,j +1) 15 16 print(liste)
#
som bytter
påto tall.
#
somgår gjennom lista fra start til
{6, 3, 5, 1, 8, 79, 43}

2.7Søkmedhalvering

Viskalnåframtilenalgoritmeforå nneetelementiensortertliste. Svaretskalværeindeksentilelementet,altsåhvilkenplasselementethar.

Énmuligheteråløpegjennomlistafrabegynnelsetilslutt.Forhvert elementilistasjekkerviomelementeterdetvierpåjaktetter.Enkode fordettekanseslikut:

1 liste =[1,4,5,7,8,9,14,16,17]

2 mål =9

3

4 for i in range(len(liste)):

5 if liste[i]== mål:

6 print(i)

Kodenovenforleteretterførsteforekomstavtallet9ilista.Nårvikjører dennekoden,fårvi5tilsvar.Detbetyratindeksentilførsteforekomstav 9ilistaer5.

Dersomlistaerlang,vilkodenovenforbrukelangtid.Kanvigjøredette påenraskeremåte?

Aktivitet

Forengruppeelever,gjernemange.

Viskal nneplassnummerettilettallirekka.

1.Alleunntattlederenskriverhvertsitttallpåtolapperhver.

2.Gidenenelappentillederen.

3.Stillderepåenrekkemedtalleneistigenderekkefølge.

4.Lederentrekkerenlapp,utenåvisetildeandre.Detteertallet lederenskal nne.

5.Lederensjekkerlappentilmidtersteelev.Hvismåletertil venstre,setterallepåhøyresidesegned,ogmotsatt.

6.Lederensjekkernålappentilmidtersteelevavdesomerigjen. Hvismåletertilvenstre,setterallepåhøyresidesegned,og motsatt.

TILVURDERING

7.Slikfortsetterdettilriktiglapperfunnet.

8.Tilslutttellerlederenhvormangeeleverdeterframtilden sombleståendeigjen.Antalleterplassnummeret.

Søkmedhalvering 109

Algoritmeniaktivitetenovenforsammenfattervislik:

Sammenliknetalletduleterettermeddetmidterstetalletilista. Avgjørommåletliggerivenstreellerhøyrehalvdelavlista.

Letviderepåsammemåteidenhalvdelenmåletbe nnerseg:Finn detmidterstetalletihalvdelenogavgjørihvilkendelmåletligger. Fortsetttildu nnermålet.

Kodenieksempeletnedenforbrukerdennealgoritmen.

::: EKSEMPEL2.16

Brukalgoritmenitekstenovenfortilåskriveetprogramsom nner ettalliensortertliste.

LØSNING

Vitarutgangspunktiensortertlistemedtallogoppretteren variabel mål fordettalletviskal nne.

Viskal nneindeksen,altsåplassnummeret,tilmålet.Svaret erderforettallmellom0ogantallelementerilista.Vilagerto variabler start og slutt,somerindeksentilytterpunkteneilista ogenvariabel midtpunkt,somermidtenavlista.Sidenindeksen måværeethelttall,brukerviheltallsdivisjon(\\)nårviregnerut midten,selinje6.

Viletergjennomlistavedåheletidenundersøkehvilkenhalvdel måleteri:Visammenliknermåletmedmidtpunktet.Hvismåleter mindreennmidtpunktet,utelukkervihøyrehalvdelvedåfytte høyreendepunkttilmidten.Hvismåleterstørreennmidtpunktet, utelukkervivenstrehalvdelvedåfyttevenstreendepunkttil midten.Såregnerviutnyttmidtpunkt,selinje15–20.Hvismålet faktisk er midtpunktet,avsluttervisøket,selinje12.

Viavsluttersøketvedålaen while-løkkekjøretilvariablene funnet skifterverdifra False til True,selinje14. 1 liste

4

TILVURDERING

5

6

110 KAPITTEL2
=[1,4,5,7,8,9,14,16,17]
2 mål =9 3
start =0 slutt = len(liste) midtpunkt =(start + slutt)//2

2.24

9 funnet = False

10

11 while funnet == False:

12 if liste[midtpunkt]== mål:

13 svar = midtpunkt

14 funnet = True

15 elif liste[midtpunkt]> mål:

16 slutt = midtpunkt

17 midtpunkt =(start + slutt)//2

18 else:

19 start = midtpunkt

20 midtpunkt =(start + slutt)//2

21

22 print(f'Indeksen til {mål} er {svar}.')

Nårvikjørerkoden,blirresultatetdette: Indeksentil9er5.

OPPGAVER

a)Beskrivenalgoritmesom nnerettall iensortertlistevedåferegangerdele listaitreogforkastededelenesom ikkeinneholdermålet.

b) Brukalgoritmentilåskriveetprogram.

2.25

Tautgangspunktikodenieksempelet påside110over.Skrivomkodentilen funksjonsomtarinnenlisteogettallog returnererindeksentilførsteforekomstav talletilista.

TILVURDERING

Søkmedhalvering 111

Kommandoen

s.upper() gjør omstrengen s til storebokstaver. s.strip() erner mellomromistarten ogsluttenav s.

2.8Strengoperasjoner

Noenproblemerløsesenklestvedåkonverteretalltiltekststrenger.

Operatorene + og * ogrelasjonene <, <=, > og >= fungererogsåpå strenger.

Vikanløpegjennomenstrengmeden for-løkke,omtrentsomen liste.

Det nnesegnekommandoersombarefungererpåstrenger,for eksempel .upper() og .strip()

Vislårsammentostrengervedhjelpav +.Så 'abc'+'def' blirtil 'abcdef'.Nårvisettersammenenstrengienløkkebrukervientom streng,altså '',somutgangspunkt.Dettetilsvarer0nårvisummerertall.

:::

EKSEMPEL2.17

Brukenløkketilålageentekststrengmedti«x»-eretterhverandre.

LØSNING

Vistartermedentomstreng.Forhverrundeiløkkaleggervitilen «x».

1 svar = ''

2 for i in range(10):

3 svar = svar + 'x'

4

5 print(svar)

Kodenovenforlagerteksten«xxxxxxxxxx».

Operatoren * settersammensammestrengferegangeretterhverandre. Så 'abc'*3 blir 'abcabcabc'.

Vibrukeen for-løkketilåløpegjennomenstrengpåsammemåtesom enliste.Ikodennedenforplukkerviuténogénbokstavfrastrengen:

1 streng = 'programmering'

TILVURDERING

2 for x in streng:

3 print(x, end='')

Nårvikjørerprogrammet,fårvi«programmering»tilsvar.

112 KAPITTEL2

Ettalleretpalindromdersomdetersymmetriskommidtenav tallet.Så12321og1441erpalindromer,mens123og89ikkeerdet. Lagenfunksjonsomundersøkeromettalleretpalindrom.

LØSNING

Viundersøkeromførsteogsistetegnistrengenerlike.Såsjekkervi andreognestsiste.Slikfortsettervitilmidtenavstrengen.

1 def palindrom(n):

2 streng = str(n)

3 svar = True

4 for i in range(len(streng)//2):

5 if not streng[i]== streng[‑i ‑1]:

6 svar = False

7 return svar

8 print(palindrom(125421))

Nårvikjørerprogrammet,fårviat125421ikkeeretpalindrom.

2.26

Brukenløkketilåskriveutmønsteret:

2.27

Entallekforegårslik:Deltakernestårien ring.Førstedeltakersier:«én».Nestesier:

«to».Slikfortsetterdet,menhvergang noenkommertilettallsomerdeleligmed 3eller4sierde«biip»istedetfortallet.

OPPGAVER

2.28

TILVURDERING

a)Lekleken.

b) Lagetprogramsomskriverutenfasit.

Strengoperasjoner 113
::: EKSEMPEL2.18
* ** *** ****
Medinput n = 3,skriverprogrammetut 1 121 12321
Lagenfunksjonsomskrivertallbaklengs. 2.29 Etprogramskriverutetmønsteravtall.
Lagprogrammet. 2.30
Lagetprogramsomsjekkeromsifreneiet tallståristigenderekkefølge.

2.9Størrealgoritmer

Tilsluttidettekapitteletøvervipååfølgelittstørrealgoritmer.Selv omalgoritmenstrengttattinneholderaltvitrengerforåoversettetil programkode,erdetikkealltidrettfram.Noentipspåveien:

Lagenskisseoverhvaprogrammetskalgjøre,foreksempeliformav etfytskjema.

Gågjennomalgoritmenmanueltnoenganger.

Hvilkeverdiermådulagreunderveis?Hvilkevariablertrengerdu? Kjørkodenunderveis,slikatduoppdagereventuellefeil.

Bruk print-kommandoenofteunderveisiarbeidet.Skrivutverdien avvariablene,slikatdufølgermedpåhvasomskjer. ::: EKSEMPEL2.19

Viskalprogrammere Eratostenos’sil.Detteerenalgoritmeforå nneprimtall.Med n = 0fungereralgoritmenslik: Skrivoppalletallenefra1til100. Stryk1.

2eretprimtall.Strykannethverttallsomerstørreenn2,altså4, 6,8,10ogsåvidere.

Nestetallsomikkeerstrøketuter3.Detteeretprimtall.Stryk alletalli3-gangenoppover.Vistryker6,9,12,15,18også videre.

Slikfortsettervitilviikkekanstrykeferetall. Tallenesomnåstårigjenerprimtallene.

SkrivenkodesombrukerEratostenos’siltilå nnealleprimtallene under100.

LØSNING

Vilagerenliste«tall»hvorhverplassrepresenterertallenefra1til n.Måleteråståigjenmed True påprimtallsplasseneog False på resten.

Vibrukeren for-løkketilåløpegjennomalletalleneopptil n. Forhver i sjekkerviomdetstår True påplassen(linje8).Daer

TILVURDERING

i + 1etprimtall, i + 1fordiPythontellerfra0.Vistarterpåandre forekomst(2i + 1)ogstrykermedmellomrom i + 1irestenavlista, selinje9.Tilsluttskriverviutprimtallene.

114 KAPITTEL2

2.31

1 n =100

2 # Legger True på alle plasser i lista:

3 tall =[True]* n

4 # Tallet 1 er ikke primtall:

5 tall[0]= False

6 i =1

7 while i<n:

8 if tall[i]:

9 for j in range(2*i +1, n,i +1):

10 tall[j]= False

11 i +=1

12 # Skriver ut alle primtallene

13 for i in range(len(tall)):

14 if tall[i]:

15 print(i +1, end='')

Nårvikjørerprogrammetfårvi: 235711131719232931374143475359 6167717379838997

OPPGAVER

Collatzformodning:Duskallageetprogramsomfølgerfølgendealgoritme:

1.Startmedethelttall n,ogskrivuttallet.

2.Hvis n eretpartall,såsetterdu n til n 2 .

Hvis n erodde,setterdu n til3n + 1.

3.Skrivut n tilskjerm.

4.Gjentapunkt2og3til n = 1.

Tallene n ihverttrinndannerentallfølge.

Eksempel:Visetter n til24.Dablirtallfølgen24,12,6,3,10,5,16,8,4,2,1.Antall leddidetteeksempeleter11.

Kodenskalskriveutantallleddifølgen.

2.32

Duskalskriveetprogramsombruker

Heronsmetodetilåregneutkvadratrot. Someksempelforklarervimetodenvedå regneut √42:

Vistartermedentilnærmingsverdi

Slikfortsettervitilviharetnøyaktignok svar.

TILVURDERING

Skrivetprogramsombrukerdennealgoritmentilåregneutkvadratrot.

Størrealgoritmer 115
x0 = 6. Vi nnernesteleddifølgen: x1 = x0 + 42 x0 2 Vi nnernesteleddifølgen x2 = x1 + 42 x1 2

Vibruker programmeringen TILVURDERING

[3]

Medprogrammeringkanviløse matematiskeproblemer.Vedågjøre numeriskeberegningerkanviogsåløsede problemenesomikkelarsegløseanalytisk. Itilleggkanvisimuleresituasjonerfra virkelighetenoggjøreberegningerknyttet tilsannsynlighetogstatistikk.

TILVURDERING

Størrealgoritmer 117

3.1Rekursivemønstre

Nårvijobbermedtallmønstreiprogrammeringleterviikkeetter eteksplisittuttrykkfordet n-teleddetientallfølge,menvibruker datamaskinensregnekapasitettilå nnedenesteleddene.Vihargitt tallfølgen

5, 12, 21, 32, 45,...

Viønskerå nnedetfemtendeleddetidennefølgen,samthvormange leddviminstmåhamedforatsummenskalblimerenn5000.

Førstletervietteretmønster.Viseratavstandenmellomhvertleddikke erdensamme.Menlaossseomdeteretmønsteridiferansenmellom toleddsomfølgeretterhverandreitallfølgen,altsåhvormyevimålegge tilforåfådetnesteleddet.Hvisdiferansenikkeerkonstant, nnervi diferansenemellomdiferanseneogsåvidere.Dettegjørvihelttilvifår entallfølgemedkonstanter.

222

71113 9

512213245

Leggmerketilatvi nnerhvertleddidenmidterstetallfølgenvedå leggetil2foråkommetilnesteledd.Vikanaltsåuttrykketallfølgen rekursivtmedformelen

Nesteledd = leddet + 2

ellermedsymboler:

an+1 = an + 2, med a1 = 7

Dermedharvietmønstersomgjøratvikan nnesåmangeleddvivili denmidterstetallfølgen.VibrukerPythontilå nnede10førsteleddene:

1 a =7

2 for i in range(10):

3 print(a, end='')

4 a=a +2

TILVURDERING

Nårvikjørerkodenfårvi:

791113151719212325

118 KAPITTEL3

Idennederstetallfølgen {bn } serviatdetførsteleddeter5.Deneste

leddenefårvivedåsummerede n 1førsteleddeneidenmidterste

Vibrukerenløkketilåsummereettogettleddidenmidterstetallfølgen ogleggerdennesummentil b.Vilarløkkagå15gangerettersomviskal nnedetfemtendeleddetitallfølgen.

1 a =7

2 b =5

3 for i in range(15):

4 print(b, end='')

5 b=b+a

6 a=a +2

Ikonsollenfårvi:

512213245607796117140165192221252285

Detfemtendeleddeter285.

TILVURDERING

Forå nneuthvormangeleddviminstmåhamedforatsummenskal blistørreenn5000,opprettervienvariabel summen medstartverdilik null.Vibrukeren while-løkkesomgårhelttilsummenerover5000.Vi opprettervariabelen teller somtellerhvormangegangerløkkagår,altså hvormangeleddviminstmåtamedforatsummenskalblistørreenn 5000:

Rekursivemønstre 119
tallfølgen: b1 = 5 b2 = b1 + a1 = 5 + 7 = 12 b3 = b1 + a1 + a2 = 5 + 7 + 9 = 21 b4 = b1 + a1 + a2 + a3 = 5 + 7 + 9 + 11 = 32

Vitrengerminst23leddforatsummenskalblimer enn5000.Daersummen5428.

Kristoferharlaget re gureravklossersomfølgeretmønster.Han ønskeråfortsetteålagestørreogstørre gureretterdetsamme mønsteret.

a)Hvormangeklossertrengerhanforålage gurnummer10?

TILVURDERING

Kristoferhar3000klosserogønskerålagesåmange gurersom mulig.

b) Hvormange gurerkanhanlage?Hverklosskanbarebrukesi én gur.

120 KAPITTEL3 1 a =7 2
=5 3 summen =0 4 teller =0 5 6 while summen <=5000: 7 summen = summen +b 8 teller = teller +1 9 b=b+a 10 a=a +2 11 12
b
print(f'Vi trenger minst {teller} ledd for at summen skal blimerenn 5000. Daer summen {summen}.')
Nårvikjørerkoden,fårvi: ::: EKSEMPEL3.1
y
Vanlig tekst kursiv x
Figur 1Figur 2Figur 3Figur 4

LØSNING

a)Vitellerklosseride reførste gureneogfårtallfølgen:

5, 11, 20, 32,...

33

612 9

Vi nnerdiferansenemellomleddeneogdiferansenmellom diferansene: 5112032

Vibrukermetodenvibrukteovenfor:Vi nnerleddeneiden midterstefølgenvedåstartemed a = 6ogsåleggetil3.

1 a =6

2 for i in range(10):

3 print(a,end=',')

4 a=a +3

Nårvikjørerkoden,fårvidetiførsteleddeneidenmidterste tallfølgen:

691215182124273033

Leddeneidennetallfølgenerdiferansenemellomleddene idennederstetallfølgen.Vi nnerleddeneidennedeste tallfølgenvedåstartemed b = 5forsååleggetil a1 forå nne b2 , a1 + a2 forå nne b3 osv:

1 # Det førsteleddet i den midterste følgen

2 a =6

3 # Det førsteleddet i den nederste følgen

4 b =5

5 # Legger til summen av stadig flere ledd i den midterste følgen for å finne leddene i den nederste følgen.

6 for i in range(10):

7 print(b,end='')

TILVURDERING

8 b=b+a

9 a=a +3

Rekursivemønstre 121

Nårvikjørerkoden,fårvidetiførsteleddeneidennederste tallfølgen.

5112032476586110137167

Dettiendeleddeter167.DetbetyratKristofertrenger167 klosserforålage gurnummer10.

b) Viopprettervariablene summen og teller,beggemed startverdiennull.Vigjørløkkaomtilen while-løkkeoglar løkkagåsålengesummenenmindreenn3000.Hvergang løkkagår,oppdatererviverdienavsummenvedåleggeett ogettledditallfølgeninnidennevariabelen.Antall gurer

Kristoferkanlagevilvære teller 1sidensummenvilbliover 3000sistegangenløkkagår:

Nårvikjørerkoden,fårvi:

Kristofferkanlage17figurer.

TILVURDERING

122 KAPITTEL3
1 a =6 2 b =5 3 summen =0 4 teller =0 5 while summen <=3000: 6 summen = summen +b 7 teller = teller +1 8 b=b+a 9 a=a +3 10 print(f'Kristoffer kan bygge {teller 1} figurer.')

3.1

OPPGAVER

Figureneoverviserklossersomfølgeret mønster.

a)Hvormangeklossertrengerviforå

lage gurnummer12?

b) Hvormange gurerkanvilagetil sammenhvisvihar6000klosserog hverklossbarekanbrukesién gur?

3.2

Skrivetprogramsom nnerleddnummer

20itallfølgenunder:

TILVURDERING

Rekursivemønstre 123
x
Figur 1 Figur 2 Figur 3 Figur 4
718335275

3.2Grafskframstilling

VibrukerbiblioteketMatplotlibtilåtegnegraferogdiagrammer.Ialle koderimportererviførstbiblioteket:

1 import matplotlib.pyplot as plt

Deretterbrukerviblantannet plt.plot og plt.bar tilåtegne.

Linjediagram

Ietlinjediagramavsettervipunkterietkoordinatsystemogtrekkerrette linjermellompunktene.IPythonlagrervi x-koordinateneiénlisteog ykoordinateneienannen.Såtegnervilinjediagrammetmed plt.plotkommandoen:

1 import matplotlib.pyplot as plt

2

3 xverdier =[0,5,10,15,17,18,20]

4 yverdier =[0,15,10,22,3,8,11]

5

6 plt.plot(xverdier, yverdier)

7 plt.show()

Kodenovenfortegnernåetdiagrammedrettelinjermellompunktene

TILVURDERING

124 KAPITTEL3
(0, 0), (5, 15), (10, 10), (15, 22), (17, 3), (18, 8) og (20, 11):

Vibrukergjerneetlinjediagramtilåillustrereenutviklingovertid. ::: EKSEMPEL3.2

VerdienavenaksjeietvaksineselskappåOsloBørsnoendageri maiergittitabellennedenfor:

Lagetlinjediagramsomviserutviklingeniaksjekursen.

LØSNING

Vilegger x-verdieneinniénliste,og y-verdieneienannen.Deretter tegnervidiagrammetmed plt.plot fraMatplotlib-biblioteket.

1 import matplotlib.pyplot as plt

2

3 xverdier =[1,4,12,15,17,18,19,23]

4 yverdier =[29.3,32.1,28.2,29.8,25.7, 25.1,26.4,25.2]

5 6 plt.plot(xverdier, yverdier)

7 plt.show()

TILVURDERING

Grafskframstilling 125
Dato 1 4 12 15 17 18 19 23 Verdi 29,3 32,1 28,2 29,8 25,7 25,1 26,4 25,2

Inoenprogrammer, foreksempelSpyder, kanviutelate kommandoen plt.show(),mens iandreprogrammer, foreksempelThonny, mådenbrukes.

Spredningsdiagram

Etspredningsdiagramviser x-verdieneog y-verdienesompunkteriet koordinatsystem.Vilagerspredningsdiagrampåsammemåtesomet linjediagram,menviskriveren 'o' somtredjeargumenti plt.plotkommandoen.

1 import matplotlib.pyplot as plt

2

3 xverdier =[0,5,10,15,17,18,20]

4 yverdier =[0,15,10,22,3,8,11]

5

6 plt.plot(xverdier, yverdier, 'o')

7 plt.show()

Programmetovergirdettespredningsdiagrammet:

Vedåvarieredettredjeargumenteti plt.plot-kommandoenkanvifå littulikepunkter.

TILVURDERING

126 KAPITTEL3
TEGN RESULTAT 'o' sirkel '.' litensirkel '+' + 'x' kryss

::: EKSEMPEL3.3

Lagetspredningsdiagrammeddissepunktene:

3, 5), (5, 6), (8, 12), (11, 3), (12, 7), (15, 10)

LØSNING

Vilagertolister,éntil x-koordinateneogéntil y-koordinatene. Spredningsdiagrammettegnervimed plt.plot.

1 import matplotlib.pyplot as plt

2

3 xverdier =[3,5,8,11,12,15]

4 yverdier =[5,6,12,3,7,10]

5

6 plt.plot(xverdier, yverdier, 'x')

7 plt.show()

Resultatetblirdettediagrammet:

TILVURDERING

Grafskframstilling 127
(

Stolpediagram

Stolpediagramtegnervimedkommandoen plt.bar,sombrukespå sammemåtesom plt.plot:

1 import matplotlib.pyplot as plt

2

3 xverdier =[3,5,8,11,12,15]

4 yverdier =[5,6,12,3,7,10]

5

6 plt.bar(xverdier, yverdier)

7 plt.show()

Stolpeneplasserespå x-verdieneoghar y-verdienesomhøyder.Koden ovenforgirdettestolpediagrammet:

Ieksempeletnedenforkombinerervilinjediagram,stolpediagram ogspredningsdiagram.Ikkefordideterryddigoglesbart,mensom eksempelpåatdetkangjøres.

TILVURDERING

128 KAPITTEL3

::: EKSEMPEL3.4

VerdienavenaksjeietvaksineselskappåOsloBørsnoendageri maiergittitabellennedenfor:

Lagetdiagrammedpunkter,stolperoglinjersomviserutviklingen iaksjekursen.

LØSNING

Vibrukertilsvarendekodesomieksempleneovenfor,ogleggertil enkommandofraMatplotlibforhvertdiagram:

1 import matplotlib.pyplot as plt

2

3 xverdier =[1,4,12,15,17,18,19,23]

4 yverdier =[29.3,32.1,28.2,29.8,25.7, 25.1,26.4,25.2]

5

6 plt.plot(xverdier, yverdier) # linjer

7 plt.plot(xverdier, yverdier, 'o') # punkter

8 plt.bar(xverdier, yverdier) # stolper

9 plt.show()

TILVURDERING

Grafskframstilling 129
Dato 1 4 12 15 17 18 19
Verdi 29,3 32,1 28,2 29,8 25,7 25,1 26,4
23
25,2

Tilpasningeravutseendet

Pythongirossiutgangspunktetenenkelgra skframstilling.Vikangjøre endeltilpasninger,slikatvifårdetutseendetviønsker.

Utsnitt

Vibestemmerutsnittetvedåjusteregrensenepåaksene.Dettegjørvi med

:

9

Meddennekodenfårvi x-verdiermellom 5og20og y-verdiermellom

10og15:

TILVURDERING

130 KAPITTEL3
plt.xlim og plt.ylim 1 import matplotlib.pyplot as plt 2 3 xverdier =[3,5,8,11,12,15] 4 yverdier =[5,6,12,3,7,10] 5 6 plt.plot(xverdier, yverdier, 'o') 7 plt.xlim(‑5,20) #x gårfra ‑5 til 20 8 plt.ylim(‑10,15) #y gårfra ‑10 til 15 plt.show()

Forklaringpågrafen

Hvisviutvider plt.plot medargumentet label,kanvisetteen merkelapppågrafen.Foratmerkelappenskalsynes,måvibruke kommandoen plt.legend():

1 import matplotlib.pyplot as plt

2

3 xverdier =[3,5,8,11,12,15]

4 yverdier =[5,6,12,3,7,10]

5

6 plt.plot(xverdier, yverdier, 'o', label='målinger')

7 plt.legend()

8 plt.show()

Detgirfølgendegraf:

Plasseringavkoordinataksene

Nårvitegnerforhåndellermedengraftegner,larvigjernekoordinatakseneskjæregjennomorigo.IPythongjørvidettevedålagrede re kantenevenstre,høyre,toppogbunnivariabelen akser.Vifyttervenstre ognedrekanttilorigo:

TILVURDERING

1 akser.spines['bottom'].set_position('zero')

2 akser.spines['left'].set_position('zero')

Grafskframstilling 131

Høyreogøvrekantskjulervi:

1 akser.spines['top'].set_visible(False)

2

Dablirhelekodenslik:

1

2

4

7

8

9

10

11

12 plt.show()

Dettegirfølgendegraf:

TILVURDERING

Alternativtgårdetanåtegneenhorisontalogenvertikallinjegjennom

origo:

132 KAPITTEL3
akser.spines['right'].set_visible(False) import matplotlib.pyplot as plt 3 xverdier =[‑3,5,8,11,12,15] yverdier =[‑5,2,12,‑3,7,10] 5 6 plt.plot(xverdier, yverdier, 'o') akser = plt.gca() akser.spines['bottom'].set_position('zero') akser.spines['left'].set_position('zero') akser.spines['top'].set_visible(False) akser.spines['right'].set_visible(False)

1 import matplotlib.pyplot as plt

2

3 xverdier =[3,5,8,11,12,15]

4 yverdier =[5,6,12,3,7,10]

5

6 plt.plot(xverdier, yverdier, 'o')

7 plt.axhline()

8 plt.axvline()

9 plt.show()

Detserslikut:

Rutenett

Rutenettetslårvipåmed plt.grid():

1 import matplotlib.pyplot as plt

2

3 xverdier =[3,5,8,11,12,15]

4 yverdier =[5,6,12,3,7,10]

5

TILVURDERING

6 plt.plot(xverdier, yverdier, 'o')

7 plt.grid()

8 plt.show()

Grafskframstilling 133

Dennekodengirgrafennedenfor:

Farger

Pythonfargeleggerdiagrammeneautomatisk.Dersomviønskeråstyre fargevalgetselv,kanvileggetileninstruks color='<fargenavn>'.For åfåetrødtlinjediagramietblåttrutenettskrivervi:

1 import matplotlib.pyplot as plt

2

3 xverdier =[3,5,8,11,12,15]

4 yverdier =[5,6,12,3,7,10]

5

6 plt.plot(xverdier, yverdier, color='red')

7 plt.grid(color='blue')

8 plt.show()

Detgirdettediagrammet:

TILVURDERING

134 KAPITTEL3

Noenvanligefargenavn:

NAVN FARGE

white

black blue

orange

green red

purple

brown

pink

gray olive

cyan

Såhvisduskriver plt.plot(xverdier,yverdier,color='pink') , såfårdurosagraf.Vikanbrukemangeandrefargerogså,foreksempel CSS-farger,som«papayawhip»og«seagreen».

3.3

Sammenhengenmellom x og y ergittien verditabell:

OPPGAVER

x 0 4 5 10 14 16 20

y 3 8 2 5 16 14 15

a)Lagetlinjediagramoververditabellen.

b) Lagetspredningsdiagramover x og y.

TILVURDERING

Grafskframstilling 135
punktene:
1
6
, (2, 20
, (3, 14
, (4, 20), (5, 18), (6, 10), (7, 0), (8, 5) og (9, 3). 3.5
x 0 2 4 5 8 10 15 16 y 9 -7 -10 -3 -3 7 6 -6 3.6
variablene
2 . x 4 6 7 10 11 10 12 y1 -3 -3 -5 9 -6 -7 -1 y2 -10 -7 8 -1 -8 1 -10
x og
ogfor x og
isammekoordinatsystem.
3.4 Lagetspredningsdiagrammeddisse
(0, 16), (
,
)
)
)
Lagetspredningsdiagramavverditabellen.
Tabellenvisersammenhengenmellom
x, y1 og y
Tegnlinjediagrammenefor
y1
y2

Det nnesferemåter åleseinn lerfra eksternedatakilder på.Vibrukerher

Pandas.Alternativerer foreksempelNumPy sin loadtxt() ellerdeninnebygde withopen()metoden.

3.3Datafraeksternekilder

Ensamlingmedtallframålingerellerannetkallervigjerneforet datasett.DatasettkanvileggeinniPythonsomlister.Mennårdatasett erstore,lagrervidemhelleriegne ler.Filenefårviframålingervigjør selvellerlasterdemnedfradataleverandørersomStatistisksentralbyrå, Ektedata.noellerandre.

Det nnesmangeulike ltyperfordatasett,foreksempelCSV,Exceleller andre.HerviservihvordanvileserinnCSV- ler.CSVerenforkortelse for«Commaseparatedvalues».EnCSV- lerentekst lhvordataeneer adskiltmedetskilletegn,foreksempelsemikolon(;).StartenpåenCSV- l kanseforeksempelslikut:

Kårbø;15.5

Rakkestadstranda;20.0

Tussvatnet;20.0

Rolfsbukta;23.0

VibrukerbiblioteketPandastilålasteinncsv- lene.Førstimporterervi Pandas:

1 import pandas as pd

FørvikanlesefraCSV- la,undersøkervihvordan laerbyggetopp.

Hvilketskilletegnerbrukt?Vanligeskilletegnersemikolon(;), kolon(:)ellerkomma(,).Detkanogsåværeettabulatortegn,som representereretttrykkpåtabulatortasten,somertilvenstreforQpå tastaturet.Python-kodenfordetteer '\t'.

Hvilkettegnfordesimalkommaerbrukt?Vanligetegnerpunktum(.) ellerkomma(,).

Inneholder lanoenkommentarer?Hvaerisåfallkommentartegnet?

Inneholder laoverskriftoverkolonnenemeddata?

TILVURDERING

Nedenforserdustartenavetdatasettsominneholdermålingerav vanndybdenihavetiVestfold.

136 KAPITTEL3

#VanndybdepåetskjærutenforHudøyiVestfold #Tidiantalltimerframidnattnatttil04.09.2023

FradenneCSV- lanoterervioss: Skilletegnetersemikolon(;)

Desimalkommaeterpunktum(.)

Kommentartegneternummertegn/hashtag(#)

Datakolonneneharoverskriftene«Tid»og«Dybde»

NåerviklaretilåleseinnCSV- laiPython.Vibrukerkommandoen pd.read_csv() ogleggerinninformasjonenvifantiCSV- la.

1 import pandas as pd

2

3 fil = 'vannstand.csv'

4 df = pd.read_csv(fil, sep=';', decimal='.', comment='#')

Nårvikjørerdetteprogrammet,liggerdatasettetlagretivariabelen df.Foråbrukedatasettet,lagrervi x-verdieneog y-verdieneihver sinvariabel.Vibrukerkommandoen tolist() forålagelisterav variablene.

5 tid = df['Tid'].tolist() #x‑verdier

6 dybde = df['Dybde'].tolist() #y‑verdier

Nåkanvileggetilinstruksjonersåvifårtegnetetlinjediagram,slikvigjør detieksempeletnedenfor.

CSV- lenei boka nnerdupå www.lærebokforlaget.no.

Viharlagtnavnetpå CSV- laivariabelen fil forågjørekoden enklere.

TILVURDERING

Datafraeksternekilder 137
#Vanndybdeimeter # Tid;Dybde 0;75 1;72.2 2;75.9 3;82.3 4;85.4 5;86.2 6;89.6

BrukCSV- lavannstand.csvtilålageetlinjediagramfor vanndybdenutenforHudøyiVestfold.

LØSNING

ViinspisererCSV- laogseratdenbruker:

«;»somskilletegn

«.»somdesimalkomma

«#»somkommentartegn

Viseratdatakolonneneharoverskrift«Tid»og«Dybde».Vi brukerPandastilåleseinndatasettetogMatplotlibtilålage linjediagrammet.

1 import matplotlib.pyplot as plt

2 import pandas as pd

3

4 # Leser inn datasett

5 fil = 'vannstand.csv'

6 df = pd.read_csv(fil, sep=';', decimal='.', comment='#')

7 tid = df['Tid'].tolist()

8 dybde = df['Dybde'].tolist()

9

10 # Tegner linjediagram

11 plt.plot(tid, dybde)

12 plt.show()

Vikjørerprogrammetogfårdettelinjediagrammet:

TILVURDERING

138 KAPITTEL3
EKSEMPEL3.5
:::

ViåpneralltidCSV- leriPython-programmetelleriettekstbehandlingsprogram.Noenregnearkprogram,somforeksempelExcel,kanavog tilødelegge la.Detteskjerdersomviharautomatisklagringpåslått. Dersomdetteskjer,måviskafetilveieennykopiavdatasettet.

3.7

BrukCSV- lanorges-befolkning.csvtilå lageetlinjediagramforantallinnbyggerei norgemellom1741og2023.

OPPGAVER

3.8

CSV- lalonn.csvvisergjennomsnittlig årslønniNorgemellom2015og2022. Fremstilldataeneiet

spredningsdiagram

linjediagram

søylediagram

TILVURDERING

Datafraeksternekilder 139

Imatematikkeneren funksjon entilordning fra x til y slikatdettil hververdiav x hører maksimalténverdiav y.

Husk:Nårvibrukeren while-løkke,måvi oppfylletrekrav:

Testenmå inneholdeen variabel.Herer det x.

Variabelenmå opprettesfør løkka.

Variabelenmå endresinniløkka.

3.4Funksjoneribruk

Imatematikkener f(x)= 2x + 5og f(x)= x2 3x + 1eksemplerpå funksjoner.Noenskriverogså y = 2x + 5og y = x2 3x + 1ogmener detsamme.Programmeringkanværeetgodtverktøyivårtarbeidmed funksjoner.IPythonde nerervifunksjonermedkontrollordene def og return.

Verditabell

VilagerverditabelliPythonvedåprodusere x-og y-verdiermeden løkke.Herserduenkodederviførstde nererfunksjonen f(x)= 2x + 5, førvibrukeren while-løkketilålageallepar (x, y) slikat y = f(x) for x mellom0og6:

1 def f(x):

2 return 2*x +5

3

4 x =0

5 while x <=6:

# Definerer funksjonen

# Startverdi for x

6 print(x,f(x)) # Skriver ut x og y

7 x=x +1

# Øker x med 1

Nårvikjørerkodenovenfor,blirdetteresultatet:

TILVURDERING

Detkanværeengodregelåsamlestartverdieritoppenavkoden.Det gjørdetenklerenårvisenerevilendrestartverdiene.Kodennedenforer enomskrivningavkodensomlagerverditabellenovenfor.Kodengjør akkuratdetsamme,menviharopprettetstartverdiene xstart, xslutt og xsteg itoppenavkoden.

140 KAPITTEL3
05 17 29 311 413 515 617

1 def f(x):

2 return 2*x +5

3 xstart =0

4 xslutt =6

5 xsteg =1

6

7 x= xstart

8

9 while x <= xslutt:

10 print(x,f(x))

11 x=x+ xsteg

Vitarmedeteksempeldervibrukerf-literalertilålagetabellenpenere.

EKSEMPEL3.6

Enfunksjonergittsom

f(x)= x2 + 4x + 2

Lagentabellfor f(x) med x mellom 2og4medsteglengde1.

LØSNING

1 def f(x):

2 return ‑x**2+4*x +2

3 xstart =‑2

4 xslutt =4

5 xsteg =1

6

7 print(f'xy') # Overskrift

8 print('=========') # Rett linje

9 x= xstart # Startverdi for x

10 y=f(x) # Startverdi for y

11

12 while x <= xslutt: # Løkke som skriver verdiene

13 print(f'{x:3} {y:3}')

TILVURDERING

14 x=x+ xsteg

15 y=f(x)

Funksjoneribruk 141
:::

Grafer

Kodenvibruktetilålageverditabellforenfunksjonkanviendretilå tegnegrafentilfunksjonen:

Vilagrerverditabellenitolister,enmed x-verdierogenmed y-verdier. Verdienelagrervimedkommandoen append.

VilageretlinjediagramavdetolistenemedMatplotlib:

plt.plot(xverdier,yverdier)

Joferepunkterviharmediverditabellen,joglattereblirkurven.

Eksempeletnedenfortegnergrafentilenfunksjon.

::: EKSEMPEL3.7

La f(x) værefunksjonengittved

f(x)= x2 3x + 1

Tegngrafentilfunksjonenfor x mellom 1og5.

LØSNING

TILVURDERING

Vitarutgangspunktikodeneforverditabellogforlinjediagram. Steglengdenvibrukerer0,01,slikatdetblirkortavstandmellom hvertpunktoggrafenblirglattere.

142 KAPITTEL3 Programmetgirdenneverditabellen: xy ========= ‑2‑10 ‑1‑3 02 15 26 35 42

1 import matplotlib.pyplot as plt

2

3 def f(x):

4 return x**2‑3*x +1

5

6 xstart =‑1

7 xslutt =5

8 xsteg =0.01

9

10 xverdier =[]

11 yverdier =[]

12

13 x= xstart

14 y=f(x)

15

16 while x <= xslutt:

17 xverdier.append(x)

18 yverdier.append(y)

19 x=x+ xsteg

20 y=f(x)

21

22 plt.plot(xverdier, yverdier)

23 plt.show()

TILVURDERING

Funksjoneribruk 143
Nårvikjørerprogrammet,fårvitegnetgrafentil f:

Topp-ogbunnpunkter

Vikan nnetoppunkterogbunnpunkterpåengrafslikvifantstørste ellerminsteverdiienliste,seovenforpåside94.Viviserteknikken.

::: EKSEMPEL3.8

Grafentil f(x)= x2 + 2x + 3haretttoppunktmellom x = 2og

x = 4.Bestementilnærmingsverdiforkoordinatenetiltoppunktet. Svaretskalhaentusendelsnøyaktighet.

LØSNING

Viskriverenkodemedenløkkesomløpergjennom x-verdierfra

x = 2ogoppover.Såfortvi nneren y-verdisomerlavereenn forrigeverdi,stoppervi.

Fordiviharfåttviteatgrafentil f harnøyaktigetttoppunkt,trenger viikkefortsetteetterat y-verdieneharbegyntåavta.

Sidennøyaktighetenskalværeentusendel,velgervistegi xretningpå0,001.

TILVURDERING

Nårvikjørerprogrammet,fårvi: Toppunkteter(1.0010,4.0000).

144 KAPITTEL3
1 def f(x): 2 return ‑x**2+2*x +3 3 4 xstart =‑2 5 xsteg =0.001 6 7 x= xstart 8 y=f(x) 9 største_y =y 10 11 while y >= største_y: 12 største_y =y 13 x=x+ xsteg 14 y=f(x) 15 16 print(f'Toppunktet er({x:.4f}, {y:.4f}).')

Nullpunkter

Etnullpunkttilengraferetpunktdergrafenskjærer x-aksen.Detkalles etnullpunktfordi y-verdienipunkteternull.

Heltalligenullpunkter

Hvisvivetatgrafentilenfunksjonskjærer x-aksenakkuratderkoordinateneerheletall,kanvibrukesammeteknikksomiavsnittet omkombinasjonerpåside98:Vilarenløkkeprodusere x-verdierog undersøkerom y = 0.

::: EKSEMPEL3.9

Enfunksjonerde nertsom

f(x)= 2x4 + 15x3 21x2 23x + 15

Bestemalleheltalligenullpunkterfor x-verdiermellom 3og10.

LØSNING

Vide nerer f(x) oglar x varieremellom 3og10medsteglengde

1.Detgirheltallige x-verdier.Forhver x-verdisjekkerviom y = 0.

Hvis y = 0,såskriverviutnullpunktet. 1

Kodengirdetteresultatet:

På y-aksenharalle punkter x = 0,mens på x-aksenharalle punkter y = 0.

TILVURDERING

Funksjoneribruk 145
def
2 return ‑2*x**4+15*x**3‑21*x**2‑23*x +15 3 4 xstart =‑3 5 xslutt =10 6
8
10
f(x):
7 for x in range(xstart, xslutt +1):
y=f(x) 9 if y ==0:
print(f'({x}, {y})')
(‑1,0) (3,0) (5,0)

Nårnullpunktetikkeerethelttall

Nårvipåforhåndikkevetomgrafenskjærer x-aksenakkuratiethelttall, brukerviPythontilå nneentilnærmingsverdi.Detbetyratviskriveret programsom nneretdesimaltallsomliggerinærhetenavdetfaktiske nullpunktet.

Vitarutgangspunktifølgendesituasjon:

Viharfunksjonsuttrykkettilenfunksjon f(x)

Vikjennertotall a og b somerslikatgrafentil f skjærer x-aksenpåett stedmellom a og b

Eksempel:Grafentil f(x)= x2 2skjærer x-aksenmellom0og2,se guren.

Viprøverførstmedfølgendealgoritme:

Vistarterietpunktpågrafender x-verdiener a.Sågårvietlitestegi x-retningenlangsgrafen.

Hvisdetnyepunktetliggerpåsammesideav x-aksen,gårvividere langs x-aksen.

Hvisdetnyepunktetliggerpådenandresidenav x-aksen,vetviat nullpunktetermellomdeto x-verdiene.

TILVURDERING

Vitrengeraltsåenmåteåavgjøreomtopunkterliggerpåsammeside ellerpåmotsattsideav x-aksen.Deterdetsammesomåavgjøreom yverdieneidetopunkteneharsammefortegnellermotsattfortegn.

Produktetavtotallmedsammefortegnerpositivt,mensproduktetavto tallmeduliktfortegnernegativt.Detgirossideentildetteprogrammet:

146 KAPITTEL3
x y f 0 2

1 tall1 = float(input('Skriv inn et tall:'))

2 tall2 = float(input('Skriv inn et tall:'))

3

4 if tall1*tall2 >0:

5 print('Deto tallene har samme fortegn.')

6 elif tall1*tall2 <0:

7 print('Deto tallene har forskjellig fortegn.')

8 else:

9 print('Minst ett av tallene er null.')

Vikjørerprogrammet.Viblirbedtomåtasteinntotallunderveis.Hvisvi skriverinn3og 4,fårvidetteresultatet:

Skrivinnettall:3

Skrivinnettall:‑4

Detotalleneharforskjelligfortegn.

Nåharviklarenalgoritmeforå nneentilnærmingsverdifornullpunktet mellom a og b:

Vistarteri a ogøkermedetlitetall d.

Er f(a) f(a + d) > 0?Dafytterviossettstegtilhøyre.

Er f(a) f(a + d) < 0?Dastoppervi.

ja f(x) f(x + d) > 0 x=x+d

nei

TILVURDERING

VioversetteralgoritmentilPython:

Funksjoneribruk 147

Determuligåforkortekodenlitt.Denederstesekslinjenekanerstattes meddisse: 10 while f(x)* f(x+d)>0:

Forbedring1:Mindreogmindresteg

Foråøkenøyaktighetenikodenovenfor,kanvireduserestørrelsen påvariabelen d,stegetvitari x-retning.Menhvisvistarterlangtunna nullpunktet,vilprogrammetbrukelangtid.Kanvigjørekodenbedre?

Enmuligheteråstartemedenforholdsvisstor d,mensååredusere d når vierinærhetenavnullpunktet:

Vistarteri a ogøkermedetlitetall d.

TILVURDERING

Er f(a) f(a + d) > 0?Dafytterviossettstegtilhøyre.

Er f(a) f(a + d) < 0?Dadelervi d på10ogfortsetterdervier.

148 KAPITTEL3 1 def f(x): 2 return x**2‑2 3 4 a =0 5 b =2 6 d =0.1 7 8 x=a 9 10 while x <= b: 11 if f(x)* f(x+d)>0: 12 x=x+d 13 else: 14 print(f'{x:.1f}') 15 break
Nårvikjørerprogrammet,fårvi 1.4 tilsvar.
11 x=x+d 12 print(x)

Flytdiagrammetviseratprosessenvilgåtilevigtid.Foråhindredette, leggerviinnenekstratest:Viavslutterprogrammetnårviertilstrekkelig nærmenullpunktet,detvilsinår d ermindreennenvissgrense.

1 def f(x):

2 return x**2‑2

3 4 a =0 5 b =2 6 d =0.1

7 8 x=a

9

10 while d >0.0000000001:

11 if f(x)* f(x+d)>0:

12 x=x+d

13 else:

14 d=d/10

15

16 print(f'{x:.10f}')

Nåvikjørerprogrammetfårvitidesimalersnøyaktighet:

TILVURDERING

1.4142135623

Funksjoneribruk 149 f(x) · f(x + d) > 0 nei dx=x+d =d/10 ja

Forbedring2:Raskeresøkealgoritme(vgs)

Iavsnittetomsøkmedhalveringpåside109fantvienraskmåteå søkepå,nemligvedåbrukemidtpunktettilåavgjørehvilkenhalvdel måletliggeri.Denneideenkanvibrukeogsåher,nårvisøkeretteret nullpunkt:

Vi nnerden x-verdiensomliggermidtmellom a og b.Vikallerden m.Vi nner m med m = a + b 2 .

Såsjekkerviihvilkenhalvdelnullpunktetligger.

Hvis f(a) · f(m) < 0,liggernullpunktetmellom a og m.Dafyttervi b til m.

Hvis f(b) · f(m) < 0,liggernullpunktetmellom m og b.Dafyttervi a til m

Algoritmenovenforerillustrertifytdiagrammetnedenfor:

TILVURDERING

Ogsåhertrengervietmålpånårviskalstoppe.Vivelgeråstoppenår avstandenmellom a og b ertilstrekkeligliten,altsåmindreennetlitetall

150 KAPITTEL3
x y abm Trinn 1 x y ab bm m Trinn 2 x y ab a bm m Trinn 3
nei ja f(a) · f(m) < 0 b=ma=m m=
a+b 2

vivelger.Ikodennedenforharvikalttalletsomvisernøyaktighetenfor d.

Kodenblirda:

1 def f(x):

2 return x**2‑2

3

4 a =0

5 b =2

6 d =0.0000000001

7

8 m =(a+b)/2

9

10 while b‑a>d:

11 if f(a)* f(m)<0:

12 b=m

13 else:

14 a=m

15 m =(a+b)/2

16

17 print(f'{m:.10f}')

Nårvikjørerprogrammet,fårvi:

1.4142135624

Resultatetblirakkuratdetsammesomvi kkmedkodenpåside149, menprogrammetbrukerkorteretid.

Metodenviharbrukthererdetvanligåkalle halveringsmetoden.

Likninger

Likningermedheletallsomløsninger

Åløseenlikningvilsiå nnealledeverdieneav x somgjørlikningen sann,altsåatvenstreoghøyresideerlike.Herserduenførstegradslikning:

2x 4 = 12

TILVURDERING

Førstegradslikningerharbareénmuligløsning.Hvisvigreierå nneden x-verdiensomoppfyllerlikningen,kanvisiatviharløstlikningen.

Funksjoneribruk 151

::: EKSEMPEL3.10

Løslikningen: 2x 4 = 12

LØSNING

Viprøvervedåsetteinnalleheltalllige x-verdiermellom 10og10:

1 for x in range(‑10,11):

2 if 2*x ‑4==12: 3 print(x)

Kodenovenforgirresultatet8.Sidenvivetatlikningenharbareén løsning,harvinåløstlikningen.Svareter x = 8.

Dersomlikningenharfereløsninger,kanviutvideleteområdettilvi nnerriktigantallløsninger.

::: EKSEMPEL3.11

Løslikningen:

x2 100x = 101

LØSNING

Viprøversammeteknikksomovenforogsetterinnheltallige verdier.Vivelgeretstortintervall, x-verdiermellom 100og100:

1 for x in range(‑100,101):

2 if x**2‑100*x ==101: 3 print(x)

Vikjørerprogrammetogfår x = 1.Dennelikningenharimidlertid toløsninger.Viutviderområdet,ogseromvifårenløsningtil:

1 for x in range(‑1000,1001):

2 if x**2‑100*x ==101: 3 print(x)

TILVURDERING

Nårvikjørerprogrammetfårviat x = 1og x = 101erløsninger. Likningenkanikkehamerenntoløsningerogerderforløst.

152 KAPITTEL3

Etlineærtlikningssettmedtoukjenteharogsåkunénløsning,med mindrelinjeneerparallelle.Daerdetnokåprøvesegframtilvi nner løsningen.

::: EKSEMPEL3.12

Løslikningssettet:

4x 8y = 160

12x + y = 158

LØSNING

Viprøverallekombinasjonerav x og y tilvi nnerensompasser:

1 for x in range(‑1000,1001):

2 for y in range(‑1000,1001):

3 if 4*x ‑8*y ==‑160\

4 and ‑12*x+y ==158:

5 print(x,y)

Nårvikjørerprogrammet,fårvi

Allelikninger

Menhvagjørvinårviikkevetomløsningenerethelttall?Laossta utgangspunktidennelikningen: x2 = 3

Uansetthvormangeverdierviprøvermed,vilvialdri nneen xverdisompasser,sålengevileterblantdeheletallene.Vimå nneet desimaltallsompassersåbrasommulig.

Hvisvitrekkerfra3påbeggesiderilikningenovenfor,fårvidenne likningen: x2 3 = 0

TILVURDERING

Detbetyratløsningener x = 12og y = 4.

Åløsedennelikningenerdetsammesomå nnenullpunktenetil funksjonen f(x)= x2

3.Detvetviheldigvishvordanvigjør,seside 149.Dettegirossengenerellmåteåløselikningerpå:

Funksjoneribruk 153
‑1214

Trekkfraalleleddpåhøyreside,slikatlikningenharnullpåhøyre side.

Lavenstresideavlikningenværeenfunksjon. Løsningenavlikningenernånullpunktenetilfunksjonen.

::: EKSEMPEL3.13

Løslikningenfor x mellom0og10,medsyvriktigedesimaler.

x2 = 5

LØSNING

Vitrekkerfra5påbeggesideravlikningen.Dafårvi:

x2 5 = 0

Vilarnå f værefunksjonen f(x)= x2

5.Åløselikningenvilsiå nnenullpunktenetil f.

Vibrukermetodenderviløpergjennomintervalletmedmindreog mindresteg,sompåside149.

Nårvikjørerprogrammet,fårvi:

TILVURDERING

Løsning:x=2.2360679

154 KAPITTEL3
1 def f(x): 2 return x**2‑5 3 4 a =0 5 b =10 6 d =0.1 7 8 x=a 9 10 while d >0.0000001: 11 if f(x)* f(x+d)>0: 12 x=x+d 13 else: 14 d=d/10 15
print(f'Løsning:x={x:.7f}')
16

3.9

Lagenverditabellover y = 4x + 3for xverdiermellom 10og10.

3.10

La f værefunksjonen f(x)= x2 + 2x 3. Tegngrafentil f for x mellom 4og3.

3.11

La f værefunksjonen f(x)= x2 + 2x 3. Bestementilnærmingsverdiforkoordinatenetilbunnpunktetpågrafentil f.

3.12

La f værefunksjonen

3.13

OPPGAVER

2.Hvilketsvargirprogrammetoghva erriktigsvar?

b) Forklarhvorforkodengirfeilsvar.

c)Gjørenendringavkodenslikatfeilen ikkeoppstår.

3.15

(Eksamen1P2022H)

1 def f(x):

2 return 3*x ‑15 # Definerer funksjonen f gitt ved f(x)=3x‑ 15

3

4 x =0

5

f(x)= 2x3 + x2 + x

Bestemalleheltalligenullpunkterpågrafentil f for x mellom 100og100.

Funksjonen f(x)= x2 3haretnullpunkt mellom1og5.Bestementilnærmingsverdifornullpunktet.

3.14

Ovenforpåside151lagdevienkodesom brukerhalveringsmetodentilå nneet nullpunkt.Idenneoppgavenskalvisepå ensvakhetvedkoden.

a)Brukkodentilå nnnullpunktettil

funksjonen f(x)= x 1mellom0og

6 while x <=10:

7 if f(x)==0:

8 print(x)

9

10 x=x +1

Larsharskrevetprogramkodenovenfor.

a)Hvaønskerhanå nneut?

Hvablirresultatetnårhankjørerprogrammet?

b) Hvavilresultatetbliomhanendrer funksjonsuttrykkettil x2 6x + 8?

Larsendrerfunksjonsuttrykkettil x2 144

ogserathanmågjørenoemedprogrammet.

c)ForeslåendringerLarskangjøre.

TILVURDERING

Funksjoneribruk 155

Derivasjon(vgs)

Denderiverte f (x) avenfunksjon f(x) erde nertsomgjennomsnittlig vekstfartoveretliteintervall,altsåbrøken

0.

IPythonsetterviΔx tiletlitetallogregnerut.

::: EKSEMPEL3.14

f ergittved

Bestementilnærmingsverdifor f (3).

LØSNING

VisetterΔx = 0,0000001ogregnerutgjennomsnittligvekstfart.

9 print(f'{derivert:.4f}')

Vikjørerkodenogfårtilsvarat f (3) ≈ 2,0000.

TILVURDERING

Nåkanvikombineredettemedkodenvibruktetilåtegnegrafentilen funksjon.Dafårvitegnetgrafentil f (x).

156 KAPITTEL3
x yf xx+ ∆x f(x) f(x+ ∆x) ∆y ∆x Vibrukerat Δy = f(x + Δx) f(x)
Δy Δx nårΔx →
f(x)= x2
Enfunksjon
4x + 1
2
3
8
1 def f(x):
return x**2‑4*x +1
4
x =3
5
delta_x =0.0000001
6
delta_y =f(x+ delta_x)‑ f(x)
7 derivert = delta_y/delta_x

::: EKSEMPEL3.15

Enfunksjon f ergittved

f(x)= x2 4x + 1

Tegngrafentil f sammenmedgrafentildenderiverte f (x).

LØSNING

Vilagertrelister:Énfor x-verdier,énforfunksjonsverdierogén forverdienetildenderiverte.Såbrukervienløkketilåbyggeopp listene,førviplotterdem.

1 import matplotlib.pyplot as plt

2

3 def f(x): # Definerer funksjonen

4 return x**2‑4*x +1

5

6 xstart =‑4 # Setter opp tabellen

7 xslutt =8

8 xsteg =0.01

9 xverdier =[] # Oppretter lister til verdiene

10 yverdier =[]

11 derivertverdier =[]

12 x= xstart # Startverdier

13 delta_x =0.0000001

14 delta_y =f(x+ delta_x)‑ f(x)

15 derivert = delta_y/delta_x

16

17 while x <= xslutt:

18 xverdier.append(x) # Lagrer verdiene

19 yverdier.append(f(x))

20 derivertverdier.append(derivert)

21 x=x+ xsteg

22 delta_y =f(x+ delta_x)‑ f(x)

23 derivert = delta_y/delta_x

24

25 plt.plot(xverdier, yverdier)

TILVURDERING

26 plt.plot(xverdier, derivertverdier)

27 plt.show()

Funksjoneribruk 157

Nårvikjørerkoden,fårvidennegrafen:

Grafenviserparabelen f(x) sammenmeddenlineærefunksjonen f (x).

Denderiverteskifterfortegniekstremalpunktene.Dettekanvibruketil å nneetekstremalpunkt:Viregnerutdenderiverteihvertpunkt,og avslutternårdenderiverteskifterfortegn.

:::

EKSEMPEL3.16

Enfunksjon f ergittved

f(x)= x2 4x + 1

Bestemkoordinatenetilbunnpunktetpågrafentil f.

LØSNING

1 def f(x):

2 return x**2‑4*x +1

3

4 xstart =‑4

5 xsteg =0.01

6

7 x= xstart

TILVURDERING

8 delta_x =0.0000001

9 derivert =(f(x+ delta_x)‑ f(x))/delta_x

158 KAPITTEL3

11 while derivert <0:

12 x=x+ xsteg

13 derivert =(f(x+ delta_x)‑ f(x))/delta_x

14

15 print(x,f(x))

Nårvikjørerprogrammet,fårviatbunnpunktetpågrafentil f er omtrent (2, 3).

Teknikkenfraavsnittetomstørsteverdipåside94kanvibruketilå nne størstevekst.

::: EKSEMPEL3.17

La f værefunksjonengittved

f(x)= x3 + 3x2 10x

Bestemkoordinatenetildetpunktetpågrafenhvorvekstfartener lavest.

LØSNING

Vide nererfunksjonen,ogsetteroppkodenslikvigjørnårvi lagerverditabell.Underveisiløkkaregnerviutdenderiverte,og lagrerdenverdiensomtilenhvertiderminst,sammenmedden x-verdiensomhørertil.

1 def f(x):

2 return x**3+3*x**2‑10*x

3

4 xstart =‑7

5 xslutt =5

6 xsteg =0.01

7 delta_x =0.0001

8

9 x= xstart

10 derivert =(f(x+ delta_x)‑ f(x))/delta_x

TILVURDERING

11 minstderivert = derivert

12 tilhørendex =x

Funksjoneribruk 159

13 while x <= xslutt:

14 if derivert < minstderivert:

15 minstderivert = derivert

16 tilhørendex =x

17 x=x+ xsteg

18 derivert =(f(x+ delta_x)‑ f(x))/delta_x

19

20 print(tilhørendex,f(tilhørendex))

Nårvikjørerprogrammet,fårvi:

‑1.000000000000105712.000000000001375

Dettebetyratvekstenerminstipunktet ( 1,00, 12,00).

Integrasjon(vgs)

Utgangspunktetforåberegneintegralererønsketomåberegneareal avfaterbegrensetavkrummekurver.Viserherpåhvordanviberegner arealetavgrensetavenfunksjonsgraf,tovertikalelinjerog x-aksen,altså detmarkerteområdetpå gurentilvenstre.

TILVURDERING

Detmarkerteområdetpå gurentilhøyreersummenavrektanglene undergrafen.Vikallersummenavrektanglenefortrappesummen,siden rektangleneserutsomentrapp.Vikallerdetenvenstresidigtrappesum, sidenhøydenihvertrektangelerbestemtavfunksjonverdienivenstre kantavrektangelet.

Nårgrafenvokser,vildenvenstresidigetrappesummenblilittmindre enndetarealetviønskeråberegne.Nårgrafensynker,blirdenvenstre-

160 KAPITTEL3
x y f x y f

sidigetrappesummenlittforstor.Menhvisvilagerveldigmange rektangler,blirbreddenavhvertrektangelliten.Dablirdetomarkerte områdeneomtrentlikestore.

ViskallageetprogramiPythonsomregnerutdenvenstresidige trappesummenundergrafentilenfunksjon f(x) mellomtotall a og b.

Førstlagervienfølgeav x-verdiermellom a og b:

1 N =10

2 a =1

3 b =11

4 delta_x =(b‑a)/N

5

6 x=a

7

8 for i in range(N):

9 print(x, end='')

10 x=x+ delta_x

Nårvikjørerkoden,fårvidetteresultatet:

Nåendrervikoden:Vide nererenfunksjon f(x)= x2 .Inniløkkaregnervi utarealetavrektangeletvierpå,ogprinter.

1 def f(x):

2 return x**2

3

4 N =10

TILVURDERING

5 a =1

6 b =11

7 delta_x =(b‑a)/N

Funksjoneribruk 161
12.03.04.05.06.07.08.09.010.0
x-verdiermellom
= 1og b = 1.Avstandenmellomhver x-verdier b a N = 11 1 10 =
Viharfåttti
a
1.Detteblirbreddenavhvertrektangel.

Trappesummenblirnåsummenavdissearealene.Vileggertilenegen variabelsomvilagrersummeniunderveisiløkka:

TILVURDERING

Hvisvinåøkerantallrektangleritrappesummen,kanvisiatkoden beregnerarealetundergrafentil f fra a til b numerisk,altså nner programmetennumerisktilnærmingsverdiav b a f(x) dx.

162 KAPITTEL3 8 x=a 9 10 for i in range(N): 11 areal =f(x)*delta_x 12 print(areal, end='') 13 x=x+ delta_x Detgirdetteresultatet: 1.04.09.016.025.036.049.064.081.0100.0
1 def f(x): 2 return x**2 3 4 N =10 5 a =1 6 b =11 7 delta_x =(b‑a)/N 8 9 x=a 10 summen =0 11 12 for i in range(N): 13 areal =f(x)*delta_x 14 summen = summen + areal
x=x+ delta_x
15
16 17 print(summen)

::: EKSEMPEL3.18

Finnennumerisktilnærmingsverdiforarealetundergrafentil f(x)= x2 fra x = 1til x = 1.

LØSNING

Viberegnervenstresidigtrappesum,mensetterantallrektanglertil 10000.

1 # Vi definerer funksjonen

2 def f(x):

3 return x**2

4

5 # Startverdier for N,a,b og delta x

6 N =10000

7 a =1

8 b =11

9 delta_x =(b‑a)/N

10

11 #x starter ia

12 x=a

13 # Integralet er null når vi starter

14 summen =0

15

16 for i in range(N):

17 areal =f(x)*delta_x # Beregner arealet

18 summen = summen + areal # Summererarealene

19 x=x+ delta_x # Øker x

20

21 print(summen)

Nårvikjørerprogrammet,fårvi443,27.

Resultatetavkodenovenforerdetbestemteintegralet.Kodenberegner

altså

TILVURDERING

Funksjoneribruk 163
11 1 x2 dx

Vikan nneentilnærmingsverdiforintegraletpåferemåter.Nedenfor serduenillustrasjonav reulikemåter.

Venstresidig HøyresidigMidtpunktTrapes

BreddenavhvertarealerΔx.Denvenstresidigetrappesummenhar høyde f(x).Denhøyresidigetrappesummenharhøyde f(x + Δx). Rektangeletmedmidtpunktharhøyde f( a+b 2 )

Dagjenstårbareå nnearealetavtrapeset.Arealetavettrapesergitt vedformelen

Ikodenieksempeletovertilsvarerlinje17arealetavrektangeletien venstresidigtrappesum.Nåkanvierstattedennelinjamedpassende linjerfordetreandrealternativeutregningsmetodene:

Høyresidigtrappesum:

13 areal =f(x+ delta_x)*delta_x

Midtpunkt:

13 areal =f((2*x+ delta_x)/2)*delta_x

Trapes:

TILVURDERING

13 areal =(f(x)+ f(x+ delta_x))/2*delta_x

164 KAPITTEL3
x y f x y f x y f x y f
A = a + b 2 h Omvisetterinn a = f(x), b = f(x + Δx) og h = Δx,fårvi: A = f(x)+ f(x + Δx) 2 Δx

Løslikningen.

LØSNING

Vikanikkebrukesammekodesomieksempeletovenfor,forvivet ikkepåforhåndhvaøvregrenseer.Dakanvihellerikkeberegne

Δx fra a, b og N.IstedetsetterviΔx tiletpassendelitetall,for eksempelΔx = 0,00001.Såbytterviut for-løkkameden whileløkkesomstoppernårintegraleterblitt18.

1 import math

2

3 def f(x):

4 return math.sqrt(x)

5

6 a =0

=0.00001

=(f(x)+ f(x+ delta_x))/2*delta_x

Nårvikjørerprogrammet,fårvi x ≈ 9,00.

TILVURDERING

Funksjoneribruk 165
::: EKSEMPEL3.19
x 0 √x dx
= 18
11
Trapes
summen = summen + areal 15 x=x+ delta_x
7 delta_x
8 9 x=a 10 summen =0
12 while summen <18: 13 areal
#
14
16 17 print(x)

3.16

Enfunksjon f ergittved

3.17

OPPGAVER

SkrivetprogramiPythonsom nnertoppunktetpågrafentil f nårdufårviteat f (0) > 0.

3.19

(EksempeloppgaveS22022H)

f(x)= x2 + 6x + 2

Finnennumerisktilnærmingsverdifor arealetundergrafentil f(x)= x2 + 5x + 6 fra x = 2til x = 6.

3.18

(EksamenR12022V)

Enelevharskrevetdenneprogramkoden:

1 # Definerer funksjonen

2 #f(x)=x/(1+x^2)

3 def f(x):

4 return x/(1+ x**2)

5

6 x =0

7 h =0.001

8

10 x=x+h

11

12 print(x)

a)Forklarhvasomskjernårprogrammet kjøres?Hvaønskerelevenå nneut?

b) Gjørnødvendigeberegninger,ogbestemsvaretelevenønskerå nne.

Enelevharskrevetfølgendekode:

1 a =0

2 b =2

3 n =10000

4

5 # Definerer funksjonen

f(x)=x^2 +2

6 def f(x):

7 return x**2+2

8

9 I =0

10 h =(b‑a)/n

11

12 # Lar i gjennomløpe tallene 0, 1, ..., n‑1

13 for i in range(n):

14 I=I+f(a+i*h)*h

15

16 print(round(I,3))

a)Forklarhvaelevenønskeråregneut.

9 while f(x)<= f(x+h):

b) Hvablirdeteksaktesvaretpåoppgaven elevenønskeråløse?

TILVURDERING

166 KAPITTEL3

3.5Økonomi

Leiligheter,bilerogpengerereksemplerpåtingsomendrersegiverdi eksponentieltmedtiden.Detbetyratverdienvokserelleravtarmed enbestemtprosentpertidsenhet,foreksempelperår.Vikanberegne fremtidigeellertidligereverdiervedåmultiplisereellerdivideremeden vekstfaktor.Skalvi nneverdienavnoeomfemår,multipliserervimed vekstfaktorenfemganger.Nårviprogrammerer,kanvibrukeløkkertilå hjelpeossmedfereprosentviseendringeretterhverandre.

::: EKSEMPEL3.20

Enleiligheteridagverdt3000000kr.Viforventeratverdientil leilighetenøkermed5%perår.

a)Bestemforventetverditilleilighetendenestetreårene.

b) Hvormangeårtardetførleilighetenerverdtmerenn5000000 kroner?

LØSNING

a)Ettersomverdienavleilighetenstigermed5%hvertår, nner vivekstfaktoren:

100 %+ 5 %= 105 %= 1,05

Vilagerenløkkedervioppdatererverdientilleilighetenvedå multipliseremedvekstfaktoren1,05hvergangløkkakjører.I tilleggprinterviverdienavleilighetenhvergangløkkakjører, altsåforhvertår:

1 verdi =3000000

2 vekstfaktor =1.05

3

4 for år in range(3):

5 verdi = verdi*vekstfaktor

6 print(verdi)

Nårvikjørerkoden,viserkonsollenverdiendenestetreårene:

3150000.0

TILVURDERING

3307500.0

3472875.0

Økonomi 167

b) Vibytterut for-løkkameden while-løkke.Denkjørerså lengeverdienermindreenn5000000.Itilleggopprettervien variabel år,somtellerhvormangegangerløkkakjører:

1 verdi =3000000

4 sluttverdi =5000000

9

Nårvikjørerkoden,fårvi:

Dettaromlag11årførleilighetenerverdt merenn5millionerkroner.

Sparing

Hvisvispareretbeløphvermånedmedenfastmånedligrente, vilrenteneviharopptjentværeavhengigavhvorlengehvertav sparebeløpeneharståttpåkontoen.Itilleggvileteventueltbeløpvi alleredehaddepåkontodavistartetåspare,ogsåøkeeksponentielt medtiden.DakandetværepraktiskåbrukeprogrammeringiPythontil ågjøreberegninger.

::: EKSEMPEL3.21

Idahar20000krpåkontoogønskeråspareetfastbeløphver måned,førstegang1.januarogsistegang1.desember.Rentai bankener0,3%permånedheleåret.

TILVURDERING

a)HvormyeharIdapåkontoetteretårhvishunsparer1800kr permåned?

b) HvormyemåIdasparehvermånedforåha50000krpåkonto etteretår?

168 KAPITTEL3
2 vekstfaktor =1.05 3
5 år =0
6 while verdi < sluttverdi:
7 verdi = verdi*vekstfaktor
8 år+=1 # år = år +1
print(f'Dettar om lag {år} år før leiligheten er verdt merenn 5 millioner kroner.')

LØSNING

a)Vilagervariablerforsparebeløp,rente,vekstfaktorogsaldoog brukeren for-løkketilåregneutsaldoenforénogénmåned. Nårviskalregneutsaldoenetterénmåned,måvimultiplisere bådede20000kronenesomstårderfraførogsparbeløpethun setterinnmedvekstfaktoren.Derforskriverviinniløkka: saldo=(saldo+sparebeløp)*vekstfaktor Dettegjentarviiløkkaforalletolvmånedene.Sågårviutav løkkaogskriverutverdienavsaldoen.Kodenkanseslikut:

1 sparebeløp =1800

2 rente =0.3

3 vekstfaktor =1+ rente/100

4 saldo =20000

5 for i in range(12):

6 saldo =(saldo + sparebeløp)*vekstfaktor

7 print(f'Idahar {saldo:.2f} krpå konto etter etår.')

Nårvikjørerkoden,fårvi:

Idahar42757.87krpåkontoetteretår.

b) Vilegger for-løkkainnien while-løkke.Øversti while-løkka oppdaterervivariabelen saldo slikatvistarterpå20000hver gang while-løkkakjører.Førvigårinni for-løkka,økervi sparebeløpetmedénkrone.Nårsaldoenoverstiger50000,går viutav while-løkkaogskriverutsparebeløpet.

5 while saldo <50000:

6 saldo =20000

7 sparebeløp +=1

8 for i in range(12):

9 saldo =(saldo + sparebeløp)*vekstfaktor

TILVURDERING

10 print(f'Sparebeløpet må være {sparebeløp:.2f} kr. Daer saldo {saldo:.2f} kr.')

Økonomi 169

3.20

Nårvikjørerkoden,fårvi:

Sparebeløpetmåvære2392.00kr.Daersaldo 50001.93kr.

OPPGAVER

Annehar40000krpåkontoogønsker åspare3000krpermåneddeneste10 månedene.Førsteinnskuddgjørhunidag, ogrentenibankener0,27%ihelespareperioden.

a)Skrivetprogramsomregneruthvor myepengerAnneharpåkontoenén månedetterdettiendeinnskuddet.

b) Endreprogrammetslikatdetregnerut hvorlangtiddetgårførhunhar120000 krpåkonto.

3.21

Oleharskrevetfølgendeprogram:

1 verdi =150000

2 vf =0.88

3 for i in range(8):

4 verdi = verdi/vf

5 print(verdi)

Hvablirresultatetnårvikjørerprogrammet, oghvatrorduOleønskerå nneut?

3.22

(Eksempeloppgave2P–Y2022H)

1 beløp =10000

2 verdi = beløp

3 vekstfaktor =1.03

4 år =0

5

6 while verdi < beløp*2:

7 verdi = verdi*vekstfaktor

8 år = år +1

9

10 print(verdi)

11 print(år)

Enelevharskrevetprogramkodenovenfor. Hvaønskerelevenå nneut?Forklarhva somskjernårprogrammetkjøres.

TILVURDERING

170 KAPITTEL3

3.6Simulering

Nårvikasterenterningersannsynlighetenensjettedelforatvifåren treer.Mendetbetyrikkeatvikanværesikkerpååfåentreernårvikaster terningenseksganger.Kasterviderimotterningenveldigmangeganger, vilomlagensjettedelavkasteneværetreere.Andelenavtreerekallervi denrelativefrekvensentiltreere,ognårvikasterterningenveldigmange ganger,vildenrelativefrekvensenfortreerenærmesegsannsynligheten foråfåentreerpåettkast.

Deterherprogrammeringenkommerinnibildet.Istedenforåfysisk kasteterningenveldigmangegangerforå nneensannsynlighet,kan vibrukePythontilåsimulerekastene.

NårviskalsimulereetterningkastmedPython,kanviimportere biblioteket random ogskrive randint(1,6) foråtrekkeettilfeldig heltallfraogmed1tilogmed6.

1 import random

2

3 resultat = random.randint(1,6)

4 print(f'Terningen viser {resultat}.')

Ikonsollenkanvifå: Terningenviser2.

Herkanvifåethvilketsomhelsttallmellom1og6,avhengigavhvilket resultatvifårfra random.randint(1,6).

::: EKSEMPEL3.22

a)Skrivetprogramsomskriveruthvertavresultatenenårvi kasterenterning100ganger.

b) Utvidprogrammetsåprogrammet nnerdenrelative frekvensenforantall rereved100kast.

c)Finnentilnærmingtilsannsynlighetenforåfå rernårvikaster envanligterning.

TILVURDERING

LØSNING

a)Vilageren for-løkkesomgår100ganger.Hvergangløkkagår, skriverviutresultatettilkonsollen:

Simulering 171

3 for i in range(100): 4 resultat = random.randint(1,6)

Nårvikjørerprogrammet,fårviforeksempeldette:

b) Vioppretterenvariabel firere medstartverdiennull.Sålegger vien if-setningiløkka.Hvisresultateter re,økerviverdien tilvariabelen firere medén.Underopprettervivariabelen relativ frekvens somviserhvorstorandel rerneutgjøravalle de100kastene: 1

13 print(f'Den relative frekvensen for firere er {relativ_frekvens}.')

Ikonsollenfårviforeksempeldette:

TILVURDERING

172 KAPITTEL3
1 import random 2
5 print(resultat, end = '')
42423164222453631656325 126226154415653535463 344315566441336531634 164364351621244652132 24631125331233
2
antall_kast =100 4 firere =0
9
firere
10
12
import random
3
5 6 for i in range(antall_kast): 7 resultat = random.randint(1,6) 8 if resultat ==4:
firere =
+1
11 relativ_frekvens = firere/antall_kast
Denrelativefrekvensenforfirereer0.18.

c)Ettersomdenrelativefrekvensennærmersegsannsynligheten nårvigjørforsøketveldigmangeganger,settervivariabelen antall kast tiletstorttall,foreksempel1000000.Dakanvifå:

Denrelativefrekvensenforfirereer 0.167218.

Dettestemmerganskebranårvivetatsannsynlighetenforåfå en rerer 1 6 ≈ 0,1667

Laosssepåeteksempeldervikasterfereterninger:

::: EKSEMPEL3.23

a)Skrivetprogramsom nnersannsynlighetenforatsummenav antalløyneerseksnårvikastertoterninger.

b) Gjørforandringeriprogrammetslikatdet nner sannsynlighetenforatsummenavantalløyneerstørreenn21 nårvikasterfemterninger.

LØSNING

a)Vitarutgangspunktetidetsammeprogrammetsomidet forrigeeksempletogopprettervariabelen terning2innei for-løkka.Ilinje9leggervisummenavantalløynepådeto terningeneinnivariabelen sum_øyne.Variabelenoverløkka somtelleroppharvikalt summen_6.Verdienavdenneøkervi medénhvergangsummenavantalløyneerseks. 1

TILVURDERING

Simulering 173
import random
antall_kast =10000
summen_6 =0
for i in range(antall_kast):
terning1 = random.randint(1,6)
terning2 = random.randint(1,6)
sum_øyne = terning1 + terning2
if sum_øyne ==6:
summen_6 = summen_6 +1
2 3
4
5 6
7
8
9
10
11

12 relativ_frekvens = summen_6/antall_kast

13

14 print(f'Den relative frekvensen for summen seks er {relativ_frekvens}.')

Herharvikastettoterninger10000ganger.Nårvikjører koden,kanvifå:

Denrelativefrekvensenforsummensekser 0.1388.

Figurenunderviserallede36utfallenevikanfånårvikasterto terninger.Ihverrutestårsummenavantalløyne.Ettersomalle utfalleneerlikesannsynligeogfemavruteneviseratsummen erseks,ersannsynlighetenforsummensekslik 5 36 ≈ 0,1389.

b) Nårviskalkastefemterningersparervilittplassvedåbruke en for-løkkeinni for-løkkatilåkastefemterningerom gangen.Hvergangdeninnersteløkkagår,leggerviresultatet ivariabelen sum_øyne,somviharplassertinnidenytterste løkka.

TILVURDERING

174 KAPITTEL3
Vanlig tekst kursiv x y Terning 1 Terning 2 12 2 2 3 3 3 3 4 4 4 4 4 56 5 6 1 5 6 5 6 56 56 6 7 7 7 7 7 7 8 8 8 8 8 9 9 9 9 10 10 10 11 1112
1 import random 2 3 antall_kast =10000 4 større_enn_21 =0

5 for i in range(antall_kast):

6 sum_øyne =0

7 for i in range(5):

8 terning = random.randint(1,6)

9 sum_øyne = sum_øyne + terning

10 if sum_øyne >21:

11 større_enn_21 +=1

12 relativ_frekvens = større_enn_21/antall_kast

13 print(f'Den relative frekvensen for at summen er større enn 21er {relativ_frekvens}.')

Nårvikjørerprogrammet,kanvifåforeksempeldette:

Denrelativefrekvensenforatsummener størreenn21er0.146.

Dettebetyratsannsynlighetenforåatsummenermerenn21 eromtrent0,146.

Trekkingmedtilbakelegging

Vitrekkeretelementfraenlistemedkommandoen random.choice(). ::: EKSEMPEL3.24

De revenneneAnne,Ivar,TonjeogOdaborikollektiv.Skrivet programsomavgjørhvemsomskalvaskekjøkkenetdenneuka.

LØSNING

Vilagerenlistemedallenavneneogbrukerkommandoen random.choice():

1 import random

2 kollektiv =["Anne", "Ivar", "Tonje", "Oda"]

3 må_vaske = random.choice(kollektiv)

TILVURDERING

4 print(må_vaske)

KonsollenviseratdeterIvarsommåvaskedennegangen.

Simulering 175

Vikanogsåtrekkefereelementerfraenliste.Hvisde repersonenei kollektivetieksempletoverviltrekkehvemsomskalvaskekjøkkenet hveravdenestetreukene,kanvitrekketrenavnfralistamedkommandoen random.choices().Daleggerviinnetekstraargument,k = 3,i kommandoen.

1 import random

2 kollektiv =["Anne", "Ivar", "Tonje", "Oda"]

3 må_vaske = random.choices(kollektiv,k=3)

4 print(må_vaske)

Nårvikjørerdennekoden,fårviforeksempel

['Anne','Oda','Anne']

HerserviatAnneertrukketuttoganger.Dettekanskjefordikommandoen random.choices() leggernavnenetilbakeilistaigjenmellom hverttrekk.Deterkanskjeikkeenveldigrettferdigmåteåavgjøre vaskeansvaretpå.

Trekkingutentilbakelegging

Hvisvitrekkerfraenlisteutenåleggeelementenetilbakeilistaetter hverttrekk,kanvibrukekommandoen random.sample().

::: EKSEMPEL3.25

Skrivetprogramsomtrekkerutdetrepersonene,somdetreneste ukeneskalvaskekjøkkenetikollektivettilAnne,Ivar,TonjeogOda.

1 import random

2 kollektiv =["Anne", "Ivar", "Tonje", "Oda"]

3 må_vaske = random.sample(kollektiv,k=3)

4 print(må_vaske)

Nårvikjørerprogrammet,kanvifå:

['Tonje','Ivar','Anne']

TILVURDERING

Ettersomtrekkeneerutentilbakelegging,måingenvaske kjøkkenetmerennéngang.

176 KAPITTEL3

Enkjentproblemstillingimatematikkeråtrekkekulermedforskjellig fargeutentilbakelegging.

Ienkrukkeliggertregrønneogtoblåkuler.Trekktokulerfra krukkautentilbakeleggingogskrivresultatettilskjerm.

LØSNING

Vilagerenlistemeddefemkulenevedåskrive kuler=3*['grønn']+2*['blå']

Såbrukervikommandoen random.sample() tilåtrekketoav kulene:

1 import random

2 kuler =3*['grønn']+2*['blå']

3 trukket = random.sample(kuler,k=2)

4 print(trukket)

Resultatetikonsollenkanbli: ['blå','grønn']

Vihartrukketenblåogengrønnkule.

Situasjonersomdennebeskriverviimatematikkenmeddetvikalleren hypergeometrisksannsynlighetsfordeling.

TILVURDERING

Ieksempletovertrakkvienblåogengrønnkule.Hvoroftekommervitil åtrekkeenkuleavhverfarge?

Simulering 177

Skrivetprogramsom nnerentilnærmingtilsannsynlighetenforå trekkeénkuleavhverfargenårvitrekkertokulerfraenkrukke medtregrønneogtoblåkuler.

LØSNING

Vibrukeren for-løkketilåtrekke10000ganger.Såoppretter vivariabelen frekvens medstartverdiennull.Meden if-setning avgjørviomtrekkingeninneholderénkuleavhverfargevedå skrive iftrukket.count("blå")==1 .Hvisdettevilkåreter oppfylt,økerviverdienavvariabelen frekvens medén.

1 import random

2 N =10000

3 frekvens =0

4 for i in range(N):

5 kuler =2*["blå"]+3*["grønn"]

6 trukket = random.sample(kuler,k=2)

7 if trukket.count("blå")==1:

8 frekvens = frekvens +1

9 relativ_frekvens = frekvens/N

10 print(f'En tilnæring til sannsynligheten for å trekke en kule av hver farge er {relativ_frekvens}.')

Nårvikjørerkoden,fårviforeksempel:

Entilnærmingtilsannsynlighetenforåtrekke enkuleavhverfargeer0.5969.

Vikanogsåberegnesannsynlighetenieksempeletovermedsannsynlighetsregning:

TILVURDERING

Dettepassergodtmedresultatetfrasimuleringen.

178 KAPITTEL3 ::: EKSEMPEL3.27
grønnogblå 3 5 2 4 eller + blåoggrønn 2 5 3 4 = 6 + 6 20 = 12 20 = 6 10 = 60 %

Stokkeenliste

Vikanstokkeenlistemedkommandoen random.shuffle(). Kommandoenenlagerennylistederelementeneerstokketitilfeldig rekkefølge.

::: EKSEMPEL3.28

Skrivetprogramsombestemmerihvilkenrekkefølgedefem venneneAnne,Ivar,Tonje,MarkusogOdaskalvaskekjøkkeneti kollektivetsittdenestefemukene.

LØSNING

1 import random

2

3 kollektiv =["Anne", "Ivar", "Tonje", "Markus", "Oda"]

4

5 # Random.shufflestokker selvelista.

6 # Lista 'kollektiv' får da elementene

7 #i en annen rekkefølge.

8 random.shuffle(kollektiv)

9 print(kollektiv)

10

11 for i in range(len(kollektiv)):

12 print(f'Uke {i+1} skal {kollektiv[i]} vaske kjøkkenet.')

Nårvikjørerkoden,fårviforeksempel:

Uke1skalIvarvaskekjøkkenet.

Uke2skalAnnevaskekjøkkenet.

Uke3skalMarkusvaskekjøkkenet.

Uke4skalOdavaskekjøkkenet.

Uke5skalTonjevaskekjøkkenet.

TILVURDERING

Simulering 179

Detoførste elementeneilista frekvenser vilforbli null,sidensummenav antalløyneikkekan værenullelleren.

Sannsynlighetsfordelinger

Laosstenkeossatvikastertoterninger.Davilsummenavantalløyne varieremellomtoogtolv.

Vikan nneentilnærmingtilenbestemtsannsynlighetvedåsimulere mangekastiPython.MenvikanogsåbrukePythontilåvisehvordan sannsynlighetenforhvertavutfallenefordelerseg.Medkommandoen plt.bar() frabiblioteketMatplotlibkanvitegneoppetsøylediagram somviserderelativefrekvensenefordeenkelteutfallene.Nårvilarantall kastbliveldigstort,vildettesøylediagrammetviseentilnærmingtil sannsynlighetsfordelingen.

Foråkastedetoterningene,velgervidennegangenålageenfunksjon, to terninger(),somreturnerersummenavantalløynenårvikasterto terninger.Denkanseslikut:

4 def to_terninger():

5 return random.randint(1,6)+ random.randint(1,6)

Viønskerågjentaforsøketmangeganger,såvisetter N = 10000og oppretterenlistedervilagrerfrekvenseneavdeenkelteutfallene.I tillegglagervienlistesomskalvisesummenavantalløynelangs x-aksen nårviplotterdiagrammet.

7 N =10000

8 frekvenser =[0]*13

9 xverdier = list(range(13))

Leggmerketilatatvigangerlistamed13sidenvistarteråtellepåplass nummer0.Dablirplassnummer12densisteplassenilista.Pådenne plassenønskerviåleggefrekvensenforsummen12.Påplassnummer8 ønskerviåleggefrekvensenforsummen8ogsåvidere.Vilaren forløkkesimulere10000kastmeddetoterningene.Forhvertresultat leggervitilénpåriktigplassilista.Løkkaserdaslikut:

11 for i in range(N):

12 resultat = to_terninger()

13 frekvenser[resultat]+=1

TILVURDERING

180 KAPITTEL3

Helekodenserdaslikut:

1 import random

2 import matplotlib.pyplot as plt

3

4 def to_terninger():

5 return random.randint(1,6)+ random.randint(1,6)

6

7 N =10000

8 frekvenser =[0]*13

9 xverdier = list(range(13))

10

11 for i in range(N):

12 resultat = to_terninger()

13 frekvenser[resultat]+=1

14

15 plt.bar(xverdier, frekvenser)

16 plt.show()

Ikonsollenfårvitegnetoppsøylediagrammetoverfordelingen:

TILVURDERING

Søylediagrammetviserfordelingentilfrekvensenforhvertavutfallene, menforåkunnetilnærmeosssannsynlighetsfordelingentrenger viderelativefrekvensene.Dissekanvi nnevedådelehveravfrekvenseneilista frekvenser medtotaltantallkastogleggedemilista relative frekvenser:

Simulering 181

Tegnetsøylediagramsomviserentilnærmingtil sannsynlighetsfordelingentilsummenavantalløynenårvikaster femterningeréngang.

LØSNING

Ilinje4–11harvilagetfunksjonen terninger(n),somgiross summenavantalløynevedetkastmed n terninger.Ivårttilfelleer n = 5.Inneifunksjonenbrukervien for-løkketilåkastehverav terningene.Funksjonenreturnerersummenavantalløyne.

Ilinje15opprettervienlistetilfrekvensene.Listamåhaminst 31plasser,daplassnummer30skalvisefrekvensentilkastmed summen30.Startverdienetilalleelementeneilistaernull.Lista lagervivedåskrive frekvenser=[0]*31.

Ilinje16lagervienlistemed x-verdierfraogmednulltilogmed 30.

TILVURDERING

Ilinje20–22brukervien for-løkketilåkastefemterninger10000 ganger.Forhvertkastøkervifrekvensenmedénpådentilhørende plassenilista frekvenser.Hvisterningenforeksempelviser20øyne, økervifrekvensenmedénpåplassnummer20.

182 KAPITTEL3 1 relative_frekvenser =[] 2 for f in frekvenser: 3 rf =f/N 4 relative_frekvenser.append(rf) ::: EKSEMPEL3.29

Ilinje24–28lagervienlistemedrelativefrekvenservedådele hvertavleddeneilista frekvenser medtotaltantallkast, N. Vitegnersøylediagrammetmedkommandoen plt.bar() og skrivernavnpåaksenemed plt.xlabel() og plt.ylabel():

1 import random

2 import matplotlib.pyplot as plt

3

4 def terninger(n):

5 sum_øyne =0

6 7 for i in range(n):

8 utfall = random.randint(1,6)

9 sum_øyne += utfall

10

11 return sum_øyne

12

13 n =5

14

15 frekvenser =[0]*31 #n*6 +1

16 xverdier = list(range(31))

17

18 N =10000

19

20 for i in range(N): 21 resultat = terninger(n)

22 frekvenser[resultat]+=1 23 24 relative_frekvenser =[] 25 26 for f in frekvenser: 27 rf =f/N 28 relative_frekvenser.append(rf)

30 plt.bar(xverdier, relative_frekvenser)

31 plt.xlabel('Summen av antall øyne')

TILVURDERING

32 plt.ylabel('Relativ frekvens')

33 plt.show()

Simulering 183
29

Viharenbinomisk fordelingnår

vigjøridentiske delforsøk

detbareerto muligeutfalli hvertdelforsøk

forsøkeneer

uavhengige

sannsynlighetener konstant

Nårvikjørerkoden,fårvi: Linjene24–28ikodenoverkanviforenklevedåskrive:

24 relative_frekvenser =[f/N for f in frekvenser]

Kronogmynt

Vikasterkronogmynt50ganger.Hvordankanvi nneentilnærmingtil sannsynlighetsfordelingentilantallkron?Dennefordelingenkallervii matematikkenforbinomiskfordeling.

TILVURDERING

Vilarenfunksjon mynter(n) nnehvormangekronvifårnårvikaster kronogmynt n ganger.Idettetilfelletsettervi n = 0.Vioppretteren variabel sum kron medstartverdinull.Ien for-løkketrekkervikronog myntogtelleropphvormangekronvifår.Vilar0betykronog1bety mynt.Hvisresultateter0,altsåkron,økervivariabelen sum kron med én.Tilsluttreturnererviantallkron.Detbetyrathvergangvikallerpå funksjonenfårviettallmellom0og50.

184 KAPITTEL3

1 import random

2 import matplotlib.pyplot as plt

3

4 def mynter(n):

5 sum_kron =0

6 for i in range(n):

7 utfall = random.randint(0,1)

8 if utfall ==0:

9 sum_kron +=1

10 return sum_kron

11

12 n =50

Vioppretterenlistedervilagrerfrekvensene.Førvilagrerfrekvenseridennelista,vilalleelementeneidennelistaværenull,såvi skriver frekvenser=[0]*51.Antallkronpå50kastvilvariere mellomnullog50.Derforlagervienlistemed x-verdiervedåskrive xverdier=list(range(51)) .

13 frekvenser =[0]*51

14 xverdier = list(range(51))

Vilaren for-løkkekjøre N ganger.Forhvergangløkkakjører,bruker vifunksjonen mynter(n) tilåkastekronogmynt n ganger.Såøkervi frekvensenmedénpåtilhørendeplassilista.Blirforeksempelresultatet 17,økervifrekvensenpåplassnummer17medén:

15 N =10000

16

17 for i in range(N):

18 resultat = mynter(n)

19 frekvenser[resultat]+=1

Tilsluttlagervienlistemedderelativefrekvensene:

20 relative_frekvenser =[]

21 for f in frekvenser:

TILVURDERING

22 rf =f/N

23 relative_frekvenser.append(rf)

Simulering 185

Tilslutttegnervietsøylediagramsomviserfordelingenavderelativefrekvenseneforantallkron.Detteerdaentilnærmingtilsøylediagrammet somvisersannsynlighetsfordelingen.Helekodenserslikut:

Resultatetnårvikjørerkodenkanblislik:

TILVURDERING

186 KAPITTEL3
1 import random 2 import matplotlib.pyplot as plt 3 4 def mynter(n): 5 sum_kron =0 6 for i in range(n): 7 utfall = random.randint(0,1) 8 if utfall ==0: 9 sum_kron +=1 10 return sum_kron 11 12 n =50 13 frekvenser =[0]*51 14 xverdier = list(range(51)) 15 16 N =10000 17 for i in range(N): 18 resultat = mynter(n) 19 frekvenser[resultat]+=1 20 21 relative_frekvenser =[] 22 for f in frekvenser: 23 rf =f/N 24 relative_frekvenser.append(rf) 25 26 plt.bar(xverdier, relative_frekvenser) 27 plt.show()

Virrevandring

Erdetnoemønsterirekkefølgenpåkronogmyntnårvikasterenmynt mangeganger?Laossundersøkedettenærmere.

::: EKSEMPEL3.30

Lagenvisualiseringavresultatetnårvikasterkronogmynt1000 ganger.Finnerdunoemønster?

LØSNING

Vilar x-aksenvisekastnummeret.Vistarteriorigo.Sågårviénopp hvisvifårkronogénnedhvisvifårmynt.Vilar0betykronog1 betymynt.Vibrukerkommandoen random.randint() tilåkaste mynten.En for-løkkelarossgjentakastet1000ganger.Forhver gangløkkagår,leggervi x-og y-verdieneihversinliste.

1 import matplotlib.pyplot as plt

2 import random

3

4 N =1000

5 xverdier =[] # Lister for å plottegrafen

6 yverdier =[]

7 x =0

8 y =0 # Starter i origo

9

10 for i in range(N):

11 xverdier.append(x)

12 yverdier.append(y)

13 x=x +1 # Går én ix‑retning for hvert kast

14 resultat = random.randint(0,1) # Kaster mynten

15 if resultat ==0:

16 y=y +1 # Gåropp hvis vi får kron

17 else:

18 y=y ‑1 # Gårned hvis vi får mynt

19

TILVURDERING

20 plt.plot(xverdier, yverdier)

21 plt.show()

Simulering 187

Nårvikjørerkoden,fårvidetteresultatet:

Utifragrafenserdetikkeuttilatdeternoemønsterirekkefølgen nårvikasterkronogmynt.Vifårulikgrafhvergangvikjører programmet.Deterikkeutengrunnatdennesimuleringenkalles «virrevandring».

TILVURDERING

188 KAPITTEL3

3.23

Etlykkehjulmed8likestorefelterernummerertfraogmed1tilogmed8.Skriv etprogramsom nnerentilnærmingtil sannsynlighetenforatlykkehjuletstopper på5.

3.24

Skrivetprogramsom nnerentilnærming tilsannsynlighetenforatsummenavantall øynenårvikasteretkastmedtrevanlige terningereråtte.

3.25

(EksamenS12022V)

Enelevharskrevetdenneprogramkoden:

OPPGAVER

3.26

(EksamenS12022V)

Ietspillkasterdutreterninger.Dumultipliserersammenantalløynepåterningene. Dersomdetteprodukteterstørreenn100, vinnerdu.

Bestemsannsynlighetenforåvinnevedå kjøresimuleringer.Huskåvisehvordandu kommerframtilsvaret. 3.27

1 from random import randint

2

3 N =1000000

4 gunstige =0

5

6 for i in range(N):

7 a= randint(1,6)

8 b= randint(1,6)

9 if a+b ==9:

10 gunstige = gunstige +1

11

12 print(gunstige/N)

a)Forklarhvasomskjernårprogrammet kjøres.Hvaønskerelevenå nneut?

b) Bruksannsynlighetsregningtilåbestemmesvaretsomelevenønskerå nne.

Vikastertreterningermed relikestore sidernummerertfraogmedéntilogmed re.Resultatetersummenavtallenesom venderopppådetreterningene.Skriv etprogramsomviserentilnærmingtil sannsynlighetsfordelingentilresultatet.

3.28

(EksempeloppgaveS12021H)

Ietspillskaldukastetoterninger.Duvinnerdersomminstenavdetoterningene viserfemellerseksøyne.Bruksimuleringer tilåbestemmesannsynlighetenforåvinne idettespillet.

TILVURDERING

Simulering 189
y
Vanlig tekst kursiv x

Oppgaver TILVURDERING

Foråbliskikkeliggodtilåprogrammere, erdettreningsomgjelder.

TILVURDERING

1 (Eksamenusk2022V)

Bildetviseretdataprogram.

a = 4

b = 5

Gjenta b ganger

Tegn et linjestykke med lengde a

Snu (360 : b) grader til høyre

a)Forklarhvasomskjernårprogrammetblir kjørt.

b) Tegn gurenogsettriktigemålpå guren din.

2 (Eksamenusk2023V)

Emirautforskerstoretallslovvedåkaste terningmedsekssider.Hunlageret dataprogramsomkasterterningforhenne. NedenforvisesEmirasforslagtilenkodetilet dataprogram.

antall _terningkast = skriv inn et heltall

Gjenta antall _terningkast ganger

tall = tilfeldig tall fra og med 1 til og med 6 legg tall til liste

Skriv liste til skjerm

a)Forklarhvasomskjernårdataprogrammet blirkjørt

Emiravillageentabellforåviseatdeterlike storsannsynlighetforåfådeulikeresultatene 1, 2, 3, 4, 5og6.

b) Hvilkenverdiforantall_terningkastvildu anbefaleEmiraåvelge?Begrunnsvaret.

3 Lagetprogramsomstartermed2også doblertiganger.

Eksempelpåoutput:

2481632641282565121024

4 Skrivetprogramsomskriverutdissetallene:

371115192327313539

5 Tautgangspunktitresidelengderientrekant. Lagetprogramsomundersøkeromtrekanten errettvinklet.

Eksempel:Hvisprogrammetfårsidelengdene 3,4og5,skalprogrammetsvare:

Trekantenerrettvinklet.

6 Lagetprogramsomsjekkeromtotallhar sammefortegnellerikke.

Eksempelpåoutput:Hvisvileggerinntallene 3og 4skalprogrammetgi:

Talleneharforskjelligfortegn.

7 Lagetprogramderdusettervariabelen«tall1» til15og«tall2»til21.Skrivsånødvendigkode slikatoutputblir:

tall1ernå21 tall2ernå15

Variableneskalaltsåbytteverdi.Ikodenkan duikkeskrivenoentallpånytt.Dukanheller ikkebrukenoenmatematiskeoperasjoner, somaddisjonellersubtraksjon.

8 Likningennedenforharetheltallsomløsning:

2x + 4 = 18

Skrivetprogramsom nnerden x-verdien mellom 10og10somoppfyllerlikningen.

9 Nedenforserduenlikningmedbåde x og y

2x + 4y = 10

TILVURDERING

Det nnesmangekombinasjonerav x og y somoppfyllerlikningen.

Lagetprogramsom nnerallekombinasjoner avheletall x og y mellom 10og10som oppfyllerlikningen.

192 Oppgavesamling
x

10 Skrivutdeheletalleneunder1000somer deleligmedbåde13og17.

11 Mariaskalløpeintervaller.Hunhar4minutter dragtid,deretter2minutterpause. Lagetprogramsomskriveruthvormange minutterdethargåtthverganghunskifter mellomdragogpause.

Eksempelpåoutput:

Gårfradragtilpause:4

Gårfrapausetildrag:6

Gårfradragtilpause:10

Gårfrapausetildrag:12

Gårfradragtilpause:16

Gårfrapausetildrag:18

Gårfradragtilpause:22

Gårfrapausetildrag:24

Gårfradragtilpause:28

12 Skrivetprogramsomsjekkerometpositivt heltalleretprimtall.

Etprimtallerettallsomikkeerdeleligmed andretallenn1ogsegselv.

13 Lagetprogramsomlardegskriveinn stigningstalletogkonstantleddettilen rettlinje.Programmetskalsåsvaremed skjæringspunktenemedaksene.

14 Skrivetprogramsomregnerut absoluttverdien |x| avettall x.

Absoluttverdienertallverdien,utenfortegnet. Så | 5| = 5og |5| = 5.

15 Skrivetprogramsomtarkoordinatenetilto punktersominput.Programmetskal nne stigningenmellomdetopunktene.

16 Skrivetprogramsomtarkoordinatenetilto punktersominput.Programmetskalskrive utlikningenfordenrettelinjengjennom punktene.

17 Skrivetprogramsomberbrukerenomethelt tall.Programmetskalsåskriveutallemulige heltalligekoordinateropptilogmeddette tallet.

Eteksempelpåoutputserduher:

Skrivinnethelttall:3 (0,1)(0,2)(0,3)(1,1)(1, 2)(1,3)(2,1)(2,2)(2, 3)(3,1)(3,2)(3,3)

18 Skrivetprogramsomberbrukerenomethelt tall n ogsomsåskriverutalletallsom n er deleligmed.

19 Skrivetprogramsomberbrukerenomettog etttall.Ettersistetallskalprogrammetregne utgjennomsnittetavtallene.

20 n! leservisom«nfakultet».Viharde nert n!= 1 · 2 · 3 · 4 · · n

Detbetyratforeksempel4!= 1 · 2 · 3 · 4 = 24. Lagenfunksjonsomregnerut n!.

21 Lagetprogramsomberbrukerenomettall ogsomderetterskriverutallekvadrattallene somerlavereenndettetallet.

22 Lagetprogramsom nnerdetstørsteavtre tall.

Huskåhåndterehvisnoenavtalleneerlike store!

23 Adalageretprogramsomskalsjekkeomet tallerdeleligmed3.Itilleggskalprogrammet skriveutrestenveddivisjonen.Hererstarten avkodentilAda:

1n =42

2 if n %3==0:

3 print (f ’ tallet {n} er delelig med 3. Resten er null ’ )

4 elif :

a)FullførprogrammettilAda.

TILVURDERING

b) Gjørkodenomtilenfunksjonder programmetberenbrukerometheltall. Dettetalletskalværeargumentet ifunksjonensomskalreturnerede sammesvarsetningenesomduhaddei programmetioppgavea).

Oppgavesamling 193

24 (EksamenR12022H)

Marianneharskrevetfølgendeprogram:

1 def f(x ):

2 return (6 * x −3)/( x −1)

# Definerer funksjonen

f(x)= (6 x− 3) /( x− 1)

3h =0.00001

4 def Df (x ):

5 return (f(x+h )− f(x ))/ h

6

7a =1.5 # En startverdi

8

9 while Df (a )<−3: 10a=a +0.001

11

12b=f(a )− Df (a) * a

# Regner ut konstantleddet

26 (Eksamen2P2022V)

Adaharskrevetprogramkodennedenfor.

1 beløp =0

2 vekstfaktor =1.02

3 innskudd =20000

4 år =0

5

6 while beløp <500000:

7 beløp = beløp + innskudd

8 beløp = beløp * vekstfaktor

9 år = år +1

10

11 print ( år )

12 print ( beløp )

HvaønskerAdaå nneut?

Forklarhvasomskjernårprogrammetkjøres.

13

14 print ( ’y= −3 x+’ ,b)

Bestemverdienavvariabelen b somde neres pålinje12.

25 (Eksempeloppgave1T2021H)

Malinarbeidermedandregradslikninger ogharbegyntmedåskriveprogramkoden nedenfor.Ilinje8,10og12vilhunleggeinn kodesomgjørathunfårskrevetutpassende tekster.

1a =1

2b =2

3c =1

4

5d=b ** 2−4 * a * c

6

7 if d <0:

8

9 elif d ==0:

10

11 else :

a)Hvabørhunskriveihveravlinjene8,10 og12?

b) Forklarhvasomskjernårprogrammet kjøres.

27 (Eksamen1P2022V)

1 startverdi =2000

2 verdi = startverdi

3 vekstfaktor =1.05

4 år =0

5

6 while verdi < startverdi * 2:

7 verdi = verdi * vekstfaktor

8 år = år +1

9

10 print ( verdi )

11 print ( år )

Enelevharskrevetprogramkodenovenfor. Hvaønskerelevenå nneut?

Forklarhvasomskjernårprogrammetkjøres.

28 (EksamenR12022V)

Gitttrepunkter A(a, b), B(c, d) og C(e, f).

a)Beskrivenalgoritmedukanbruketilå avgjøreom ABC erenrettvinklettrekant.

TILVURDERING

b) Skrivenkodebasertpåalgoritmendu beskrevioppgavea).Inputskalvære koordinatene a, b, c, d, e og f.Outputskal væreénavfølgendetekster: Punktenedannerenrettvinklet trekant.

194 Oppgavesamling

29 (Eksamen1T2022H)

1 def f(x ):

2 return (1−2 * x )/( x −2)

3

4x =8

5 while x >=−8:

6 print (x,f(x ))

7x=x −1

Larsharskrevetenprogramkode.Ovenforser dukodenogresultatetLarsfårnårhankjører programmet.

Nårprogrammetharskrevetutdesekslinjene, kommerenfeilmelding.

a)HvaønskerLarsåbrukeprogrammettil, oghvorforfårhanenfeilmelding?

b) ForeslåendringerLarskangjøreikoden foråunngåfeilmeldingen.

c)SkissergrafentilfunksjonenfsomLarshar de nertilinje1og2ikoden.

30 (Eksamen1T2022V)

1 def f(x ):

2 return x ** 2 # Definerer

funksjonen f gitt ve f(x)

=x ^2

3

4x =1

5

6 while f(x )<=400:

7 print (f(x ))

8x=x +1

Forklarhvasomskjernårprogrammetovenfor kjøres.

Hvablirresultatet?

31 (EksempeloppgaveR1/S12021H)

1 def f(x ):

2 return x /(1+ x ** 2)

3

4h =0.0001

5x =0

6

7 while (f(x+h )− f(x ))/ h >0:

8x=x +0.01

9

10 print ( ’x=’ ,x)

Enelevharskrevetprogramkodenovenfor.

a)Hvaønskerelevenå nneut?

b) Forklarhvasomskjernårprogrammet kjøres.Hvablirresultatet?

32 (EksempeloppgaveR12021H)

Ensirkel C kanbeskrivesvedåoppgisentrum S(a, b) ogradius r

a)Beskrivenalgoritmesomdukanbruketil åavgjøreometgittpunkt P(s, t) liggerpå, inniellerutenforsirkelen C.

b) Skrivenkodebasertpåalgoritmenfra oppgavea).Inputskalvære a, br og s. Outputskalværeenavfølgendetekster: Punktetliggerinnenforsirkelen

Punktetliggerpåsirkelen

Punktetliggerutenforsirkelen

33 (EksempeloppgaveS12021H)

1.januarhvertårsetterHalvorinn10000 kronerpåenkontomedenfastårligrentefot på1,8%.Førsteinnskuddvar1.januar2020.

a)Hvorstortvilbeløpetpåkontoenvære31. desember2022?

Vilar B(x) værebeløpetpåkontoen x åretter

1.januar2020.

b) Er B enkontinuerligfunksjon?Begrunn svaret.

TILVURDERING

Halvorønskeråkunneregneuthvormange årdettarførbeløpethanharpåkontonåren vissstørrelse K.

c)LagetprogramHalvorkanbruke. Inputskalværerentefot,innskuddog K. Outputskalværeantallårdetgårfør

Oppgavesamling 195
Punktenedannerikkeenrettvinklet trekant.
8−2.5 7−2.6 6−2.75 5−3.0 4−3.5 3−5.0

beløpeterstørreellerlik K Dukanforeksempelstarteslik:

1 rentefot =1.8

2 innskudd =10000

3K =250000

4

34 Figurenunderviseratnårvileggersammen deførsteoddetallenefårvikvadrattall.

1 x1 = float ( input ( ’ x1 :’ ))

2 y1 = float ( input ( ’ y1 :’ ))

3 x2 = float ( input ( ’ x2 :’ ))

4 y2 = float ( input ( ’ y2 :’ ))

5

6a= # 7b= #

8

5 print ( ’ Det tar ’ , år , ’ år .’ )

9 print (f ’ Likningen for linja

gjennom {( x1 , y1 )} og {( x2 , y2 )} er :’ )

10 print (f ’y={a}x+{b}’ )

Skrivkodensomskalståilinje6og7.

13 5 7 16 =+ + +

Leggmerketilatsummenavde reførste oddetalleneerdet erdekvadrattallet. Nårvileggersammendeførstekvadrattallene fårvienpyramidemed rkantetgrunnfate.La osskalledempyramidetallene.

36 Kajaharskrevetfølgendekode.

1 tall1 =−5

2 tall2 =32

3

4 if tall1 * tall2 <0:

5 ##

6 else :

7 ##

8

5 1 14

a)Brukopplysningeneovertilå nne summenavde10førstekvadrattallene.

b) Brukopplysningeneovertilå nne summenavde10førstepyramidetallene.

35 NoraharskrevetetprogramiPython.

Nedenforserdueteksempelpåhvasomskjer nårhunkjørerprogrammet:

x1:1 y1:3 x2:6 y2:2

Likningenforlinjagjennom (1.0,3.0)og(6.0,2.0)er:

y=−0.2x+3.2

NedenforserdukodentilNora:

9 print ( ’ Tallene har forskjellig fortegn .’ )

10 print ( ’ Tallene har samme fortegn .’ )

a)HvavilKajaoppnåmedkodensin?

b) Flyttkodelinjene9og10tilriktigplassi koden.

37 Williamharskrevetprogramkodennedenfor, menhanerikkeheltferdig.

1 vekstfaktor = float ( input ( ’ Skriv inn vekstfaktoren :’ ))

2

TILVURDERING

3 if vekstfaktor >1:

4 prosent = ##

5 else :

6 prosent = ##

196 Oppgavesamling

7 print (f ’ En vekstfaktor på { vekstfaktor } tilsvarer en prosentvis endring på { prosent } prosent .’ )

a)HvaerhensiktenmedkodentilWilliam?

b) Skrivferdiglinje4og6ikoden.

38 Forklarogbeskrivkodennedenfor.Lagen skisseavresultatetdufårnårdukjørerkoden.

1 import matplotlib . pyplot as plt

2

3 def f(x ):

4 return (1/3) * x ** 3− x

5 def fder (f,x, deltax ):

6 return (f(x+ deltax )− f(x ))/ deltax

7 xstart =−3

8 xslutt =3

9 xsteg =.1

10 deltax =.001

11 xverdier =[]

12 yverdier =[]

13x= xstart

14y= fder (f,x, deltax )

15

16 while x <= xslutt :

17 xverdier . append (x)

18 yverdier append (y)

19x=x+ xsteg

20y= fder (f,x, deltax )

21

22 plt . plot ( xverdier , yverdier )

23 plt show ()

39 Forklarhvasomskjernårprogrammet nedenforkjøres.Hvaskrivesutpålinje12?

1x =0

2

3 y1 =2 * x +3

4 y2 =8 * x −5

5 teller =0

6 while y2 / y1 <2:

7x=x +1

8 y1 =2 * x +3

9 y2 =8 * x −5

10 teller = teller +1

11

12 print ( teller )

40 Sondreharkjøptenelektrisksykkeltil30000 kroner.Hanskriverkodennedenforforå beregneverdienavsykkelendeførstefem årenehanharden.

1 pris =30000

2 verditap =.1

3 vekstfaktor =1− verditap

4

5 verdi = pris

6

7 for i in range (5):

8 verdi = verdi * vekstfaktor

9 10 print ( verdi )

a)Forklarhverlinjeikoden.

b) Hvormangeprosentårligverditapregner Sondremed?

c)Sondrevilendreprogrammetslikatdet beregnerhvorlangtiddettarførverdien avsykkelenermindreennhalvpartenav prisenhanbetalte.

HvilkeendringermåSondregjøreikoden?

41 Saraharskrevetdetteprogrammet: 1

TILVURDERING

9x=x +1

HvaønskerSaraå nneut?

Forklarhvasomskjernårprogrammetkjøres.

Oppgavesamling 197
xstart =0
xslutt =10 3
xstart 5
while x <= xslutt :
x **
*
2
4x=
6
7 if
2−8
x +12==0: 8 print (x)

42 Enlistebeståravtretall.

a)Beskrivenalgoritmesomplukkerutdet midterstetallet,altsådettalletsomer hverkenstørstellerminst.

b) Skrivetprogrambasertpåalgoritmen.

43 a)Skrivenkodesomavgjøromettaller deleligmed3.

b) Utvidkodentilåavgjøreomettaller deleligmed3og5.

c)Lagetprogramsomplukkerutalletall under100somerdeleligmed3og5.

44 Skrivenkodesomundersøkeromdet nnesenheltalligløsningpålikningenfor x ∈ [ 10, 10].

3x + 6 x + 9 = 5x 3

45 Inputietprogramertotall, n og m

a)Lagenalgoritmesomundersøkeromdet enetalletkanskrivessomenpotensav detandretallet.

b) Skrivenkodesombrukeralgoritmen.

46 Vihartolistermedtall.Lagenkodesom skriverutallemuligetallpar.Førstetalliparet skalværefradenenelista,andretalliparet skalværefradenandre.

Eksempel:Medutgangspunktidetolistene {20, 15, 18} og {19, 17} skalprogrammet returnere

47 Enlineær,diofantisklikningerenlikningpå formen

ax + by = c

Herer a, b og c heletall.Viskal nnehvilke heletall x og y somoppfyllerlikningen.

a)Beskrivenalgoritmesom nneralle løsningeravlikningennedenforfor x og

y mellom 10og10.

3x + 4y = 4

b) Lagenkodebasertpåalgoritmen.

48 Skrivetprogramsom nneralletalltripler (a, b, c) somoppfyllerPytagoras’setning, altsåsomtilfredsstillerlikningen a2 + b2 = c2 . Tallene a, b og c skalværemellom1og20.

49 a)Lagenalgoritmesom nnerdetstørste talletienliste.

b) Skrivenkodesombrukerdenne algoritmen.

50 Vihartolister.Viskalsettesammenettogett tallfradenenelistamedettallfradenandre listatiletprodukt.

a)Lagenalgoritmesom nnerdetstørste produktet.

b) Skrivenkodebasertpåalgoritmen. Eksempel:Medutgangspunktilistene {3, 6, 5} og {12, 43} blirresultatet258.

51 n personermedhattståretterhverandreien ring.Personeneernummerertmed1, 2, 3og såvidere.

Dugårrundtiringen.Hvergangdustopper vedenpersontarduhattenavhvisdenerpå ogsetterdenpåhvisdenikkeerpå. Førsterundestopperduvedalle.

Andrerundestopperduvedallesomhar partallsnummer.

Tredjerundestopperduvedallesomharet nummeritregangen.

Slikfortsetterdutilduhartattlikemange rundersomdeterpersoneriringen.

Skrivetprogramsom nneruthvormange personersomharpåhattetteratduerferdig. Eksempel:Hvisdetertipersoneriringen,vil syvpersonerhahattenpånårduerferdig.

TILVURDERING

52 Firepunkterietkoordinatystemergitt.Skriv etprogramsomavgjøromde repunktene utgjøretkvadrat.

53 Torektanglerliggerietkoodinatsystem.Alle sidekanteneibeggerektangleneerparallelle medenkoordinatakse.

198 Oppgavesamling
(20,19) (20,17) (15,19) (15,17) (18,19) (18,17)

Skrivetprogramsomavgjøromdeto rektangleneoverlapper.

54 Andersharskrevetprogrammetunder.Forklar hvaprogrammetunderregnerentilnærming til:

1 teller =0

2

3 for a in range (1,7):

4 for b in range (1,7):

5 if a+b ==7:

6 teller +=1

7 rel = teller /( a *b)

8 print ( rel )

a)HvatrorduAndersvil nneut?

b) Gjørendringeriprogrammetslikat resultatetblirentilnærmingtil 1 3

55 Skrivetprogramsomberenbrukeromettall mellom1og100.Programmetskalderetter primtallfaktoriseretallet,leggefaktorene ienliste,forsååskrivedemutmeden svarsetning.

56 Skrivetprogramsomberenbrukeromet arealavensirkel.Programmetskalskriveut radienogomkretsenavsirkelen.

57 Vikangjøreommellomtemperaturergitti FahrenheitogCelsiusmedformlene:

F = 9 5 C + 32

C = 5 9 (F 32)

HererCgraderCelsiusogFergrader Fahrenheit.

a)Skrivetprogramsomberenbruker omentemperaturigraderFahrenheit. Programmetskalskriveuttemperatureni graderCelsius.

b) Skrivetprogramsomberenbrukeromen temperaturigraderCelsius.Programmet skalskriveuttemperaturenigrader Fahrenheit.

58 Olavharskrevetfølgendeprogramforå nne uthvormyehanharibankenomtiårnårhan setterinn5000kroneridag.Hanregnermed enrentepå4%perår.

1 verdi =5000 2 vekstfaktor =1.04

3

4 for i in range (10): 5 verdi = verdi * vekstfaktor 6 print ( verdi )

a)Gjørendringeriprogrammetslikatdet regneruthvormyerentamåværeperår foratOlavskalhaminst8000kronerpå kontoenomtiår.

b) Gjørendringeriprogrammetslikatdet regneruthvormyeOlavmåsetteinnidag hvishanskalha8000kroneromtiår.Vi regnermedenrentepå4%perår.

59 Skrivetprogramsomberenbrukeromtotall. Programmetskalleggesammentalleneog avgjøreomtalleteretpartallelleretoddetall.

60 Olejobber162,5timerpermånedogogfår 50%ekstralønnforovertidstimer.Hantrekkes 29%skattavlønna.Lagetprogramsomber enbrukeromåskriveinnfastmånedslønn samthvormangeovertidstimerOlehar jobbet.Programmetskalskriveuthvormange kronerOlefårutbetaltetterskatt.

61 Skrivetprogramsomberegnerhvormange gangerduminstmådobletallet3foratsvaret skalblioverenmillion.

62 Detteerkvikksortering:

TILVURDERING

Tautgangspunktiførsteelement. Løpgjennomlistaogleggdesomerstørre idenhøyredelenogrestenidenvenstre. Gjentasorteringenpådedelenedudahar. Settallebitenesammenigjen. Lagetprogramsomsorterermed kvikksortering.

Oppgavesamling 199

Løsningertiloppgavene

1.1

1.2

1.3

1.4

1.5

1.6

1.7

1.8

1.9

1 print (97.2+3 * 11.1 ** 3)

Svaretblir4200,093.

1 print (88 * 45−12 * 6)

Svaretblir3888.

1 print ( ’ Their song played They danced forever .’ )

1 print (3−(3+8)/3+5)

Svaretblir4,3333.

1 import math

2 print ( math pi * 4.5 ** 2 * 17.8)

Volumetblir1132,4cm3

1 import math

2 print ((1+ math . sqrt (5))/2)

Tilnærmingsverdiener1,618034.

1 print ((14.3+10.4)/2 * 13.6)

Svaretblir167,96cm2 .

1 svar =28

2 print (f ’ Verdien av svar er { svar }. ’ )

TILVURDERING

1 tall =45

2 tall = tall /2

3 print ( tall )

200
Løsninger

1.10

1.11

1.12

1.13

1.14

1.15

1.16

1 tall =23/7

2 print (f ’{ tall :.1 f}’ )

1a =17

2b =9

3 summen =a+b

4 differansen =a−b

5 produktet =a *b

6 print (f ’ Summen av {a} og {b} er { summen }. ’ )

7 print (f ’ Differansen mellom {a} og {b} er { differansen }. ’ )

8 print (f ’ Produktet av {a} og {b} er { produktet }. ’ )

1 timer =17

2 bensinforbruk = timer * 7

3 kostnad = bensinforbruk * 26

4

5 print (f ’ Johanne bruker omtrent { kostnad } kroner til bensin .’ )

1 tall =5

2 tall =10

3 tall = tall +11

4 tall = tall +6

5 tall = tall *2

6

7 print ( tall )

1 navn = input ( ’ Skriv inn et navn :’ )

2 print (f ’ Hei ,{ navn }! ’ )

1 tall = input ( ’ Skriv inn et tall :’ )

2 tall = float ( tall )

3 svar = tall /2

4 print (f ’ Halvparten av { tall } er { svar }. ’ )

1 import math

2

TILVURDERING

3 radius = float ( input ( ’ radius =’ ))

4 areal = math pi * radius ** 2

5

6 print (f ’ Arealet av en sirkel med radius { radius } er { areal }. ’ )

Løsninger 201

1.17

1.18

1.19

1.20

1.21

1 lengde = float ( input ( ’ lengde =’ ))

2 bredde = float ( input ( ’ bredde =’ ))

3

4 areal = lengde * bredde

5 omkrets =2 * lengde +2 * bredde

6

7 print (f ’ Et rektangel med lengde { lengde } og bredde { bredde } har omkrets { omkrets } og areal { areal }. ’ )

a)

1 tall = float ( input ( ’ Skriv inn ett tall :’ ))

2 svar =2 * tall +7

3 print (f ’ Syv mer enn det dobbelte av { tall } er { svar }. ’ )

b)

1 grunnlinje = float ( input ( ’ grunnlinje :’ ))

2 høyde = float ( input ( ’ høyde :’ )) 3

4 areal =.5 * grunnlinje * høyde

5

6 print (f ’ Arealet av trekanten er { areal }. ’ )

1 tall1 = float ( input ( ’ Skriv inn et tall :’ ))

2 tall2 = float ( input ( ’ Skriv inn et tall :’ ))

3

4 if tall1 > tall2 :

5 print (f ’{ tall1 } er større enn { tall2 }’ )

6 elif tall2 > tall1 :

7 print (f ’{ tall2 } er større enn { tall1 }’ )

8 else :

9 print ( ’ De to tallene er like .’ )

1 tall1 = float ( input ( ’ Skriv inn et tall :’ ))

2 tall2 = float ( input ( ’ Skriv inn et tall :’ ))

3

4 if tall1 * tall2 >0:

5 print ( ’ De to tallene har samme fortegn .’ )

6 elif tall1 * tall2 <0:

7 print ( ’ De to tallene har motsatt fortegn .’ )

8 else :

TILVURDERING

9 print ( ’ Minst ett av tallene er null .’ )

202 Løsninger

1.22

1.23

1.24

1.25

a)

1 tall = int ( input ( ’ Skriv inn et tall :’ ))

2 if tall %5==0:

3 print (f ’ Ja ,{ tall } er delelig med 5. ’ )

4 else :

5 print (f ’ Nei ,{ tall } er ikke delelig med 5. ’ )

b)

1 tall = int ( input ( ’ Skriv inn et tall :’ ))

2 if tall %5==0:

3 print (f ’ Ja ,{ tall } er delelig med 5. ’ )

4 else :

5 print (f ’ Nei ,{ tall } er ikke delelig med 5. ’ )

6 print (f ’5 går { tall //5} ganger opp i{ tall }. ’ )

1 tall = float ( input ( ’ Skriv inn et tall :’ ))

2 if tall >0:

3 print (f ’{ tall } er positivt ’ )

4 elif tall <0:

5 print (f ’{ tall } er negativt ’ )

6 else :

7 print ( ’ Du har tastet inn null .’ )

1 tall = int ( input ( ’ Skriv inn et tall :’ ))

2 if tall %2==0:

3 print (f ’{ tall } er et partall ’ )

4 else :

5 print (f ’{ tall } er et oddetall ’ )

1 tall1 = float ( input ( ’ Skriv inn et tall :’ ))

2 tall2 = float ( input ( ’ Skriv inn et tall :’ ))

3

4 if tall1 == tall2 :

5 print ( ’ De to tallene er like .’ )

6 else :

7 print ( ’ De to tallene er forskjellige .’ )

TILVURDERING

Løsninger 203

1.26

1 antall_egg =3 # stk

2 volum_sukker =2.5 # dL

3 volum_mel =3.5 # dL

4 pris_egg =32 # for 6 egg

5 pris_mel =15 # for 1L

6 pris_sukker =12 # for 1L

7

8 antall_sukkerbrød =12

9 antall_egg = antall_egg * antall_sukkerbrød

10 volum_sukker = volum_sukker * antall_sukkerbrød

11 volum_mel = volum_mel * antall_sukkerbrød

12

13 # Behov

14 if antall_egg %6==0:

15 eggekartonger = antall_egg /6

16 else :

17 eggekartonger = antall_egg //6+1

18 if volum_mel %10==0:

19 melposer = volum_mel /10

20 else :

21 melposer = volum_mel //10+1

22 if volum_sukker %10==0:

23 sukkerposer = volum_sukker /10

24 else :

25 sukkerposer = volum_sukker //10+1

26

27 # Pris

28 egg = eggekartonger * pris_egg

29 mel = melposer * pris_mel

30 sukker = sukkerposer * pris_sukker 31 totalpris = egg + mel + sukker 32

33 print (f ’ Totalt koster det { totalpris } kroner .’ )

1.27 Hankanskriveut«Pytagorassetningeroppfyltforentrekantmeddissesidene.»

1.28

1.29 a)

1 teller =0

2 while teller <5:

3 print ( ’ Jeg liker å programmere .’ )

4 teller = teller +1

1 tall =2

TILVURDERING

2

3 while tall <5000:

4 print ( tall , end= ’’ )

5 tall = tall *2

204 Løsninger

1.30

1.31

1.32

b)

1 tall =2

2 summen =0

3

4 while tall <5000:

5 print ( tall , end= ’’ )

6 summen += tall

7 tall = tall *2

8

9 print ()

10 print (f ’ Summen av tallene er { summen }. ’ )

1 tall =5

2

3 summen =0

4

5 while tall <=10000:

6 summen += tall

7 tall +=5

8

9 print ( summen )

1 xstart =−3.0

2 xslutt =3.0

3 xsteg =.5

4

5x= xstart

6y =4* x −2

7

8 while x <= xslutt :

9 print (f ’{x :5.1 f}{y :5.1 f}’ )

10x += xsteg

11y =4 * x −2

1 tall =3

2

3 teller =0 4

5 while tall <=1000:

6 tall =2 * tall

7 print ( tall )

8 teller = teller +1

TILVURDERING

9 print ( teller )

Løsninger 205

1.33

1.34

1.35

1.36

1.37

1.38 –

1.39

1 tall =7

2 summen =0

3 teller =0

4 while tall <=70:

5 summen = summen + tall

6 teller = teller +1

7 if summen ==105:

8 print (f ’ Vi har lagt sammen de { teller } første tallene i

7− gangen .’ )

9 break

10 tall = tall +7

11

12 print (f ’ Summen er { summen }. ’ )

1 fortsett = ’ ja ’

2 hilsen = ’ Hei !’

3

4 while fortsett == ’ ja ’ :

5 print ( hilsen )

6 svar = input ( ’ Vil du se hilsenen en gang til ?( ja / nei )’ )

7 if svar == ’ nei ’ :

8 fortsett = ’ nei ’

1 for i in range (10):

2 print ( ’ Vi programmerer i Python .’ )

1 tall =6

2 for i in range (10):

3 print ( tall , end= ’’ )

4 tall +=6

1 for odd in range (19,0,−2):

2 print ( odd , end= ’’ )

1 summen =0

2 for tall in range (2,1001,2):

3 summen += tall

TILVURDERING

4 print ( summen )

206 Løsninger

1.40

1.41

1.42

1.43

1 for i in range (1,8,2):

2 print ( ’+’ * i)

1n= input ( ’ Skriv inn et helt tall :’ )

2n= int (n)

3 for i in range (n ,10 * n +1, n ):

4 print (i, end= ’’ )

1 for i in range (1,11,2):

2 for j in range (2,11,2):

3 print (f ’ ({ i }, {j }) ’ , end= ’’ )

1 import turtle as t

2

3 for i in range (5):

4t. forward (50)

5t. right (72)

1.44 a)–

b) Viendrerlinje5tilhenholdsvist.left(71),t.left(89)ogt.left(119).

c)Viskrivert.right()istedenfort.left()ilinje5.

1.45 a)

1 import turtle

2

3 antall_spisser =14

4 inn_vinkel =160

5 vinkelred =360/ antall_spisser

6 ut_vinkel = inn_vinkel vinkelred

7

8

9 for i in range ( antall_spisser ):

10

turtle . forward (40)

11 turtle right ( inn_vinkel )

12 turtle . forward (40)

13 turtle left ( ut_vinkel )

b) Byttutlinje3ikodemed:

antall_spisser=int(input('Hvormangearmerskalstjernenha?')) .

c)Gjørvariabelen inn_vinkel ikodenia-oppgavenmindre.

TILVURDERING

Løsninger 207

1.46

1.47

1.48

1.49

1 # Importerer turtle biblioteket

2 import turtle as t

3 # Setter opp startverdier

4 xstart =0

5 xslutt =70

6 xsteg =10

7

8x= xstart

9y =50− x

10

11 # Løfter pennen , så den ikke tegner mens den beveger seg

12t. penup ()

13

14 while x <= xslutt :

15t. goto (x,y) # Går til angitt posisjon

16t. dot () # Tegner en prikk her

17x=x+ xsteg

18y =50− x

a)

1 liste =[ ’ sykkel ’ , ’ båt ’ , ’ kjelke ’ , ’ bil ’ , ’ tog ’ ]

2 valg_a = liste [1]

3 valg_b = liste [2]

4

b)

5 print ( valg_a , valg_b )

1 liste =[ ’ sykkel ’ , ’ båt ’ , ’ kjelke ’ , ’ bil ’ , ’ tog ’ ]

2

3 liste [1]= ’ fly ’

1 frukt =[ ’ eple ’ , ’ pære ’ , ’ plomme ’ , ’ appelsin ’ , ’ klementin ’ , ’ ananas ’ ,

2

’ kiwi ’ ]

3 for i in range ( len ( frukt )):

4 if i %2==0:

5 print ( frukt [i ])

1 oddetall =[]

2 for tall in range (1,50,2):

3 oddetall append ( tall )

4 print ( oddetall )

TILVURDERING

208 Løsninger

1.50

1.51

1.52

1.53

1 import turtle as t

2 porter =[(10,50),(14,50),(30,40),(34,40),(70,50),(74,50)]

3

4t. penup ()

5t. dot ()

6

7 for punkt in porter :

8t. goto ( punkt )

9t. dot ()

10

11t. goto (0,0)

12 # ####

13t. pendown ()

14t. goto (12,40)

15t. left (90)

16t. forward (20)

17t. goto (32,50)

18t. right (180)

19t. forward (30)

20t. left (90)

21t. goto (72,40)

22t. left (90)

23t. forward (30)

1 liste1 =[ ’ brød ’ , ’ rundstykke ’ , ’ knekkebrød ’ , ’ pannekake ’ ]

2 liste2 =[ ’ ost ’ , ’ syltetøy ’ , ’ agurk ’ , ’ egg ’ ]

3

4 for bunn in liste1 :

5 for topp in liste2 :

6 print (f ’{ bunn } med { topp }’ )

1 def produkt (n,m):

2 return n *m

1 def differanser ( liste ):

2 utliste =[]

3 for i in range ( len ( liste )−1):

4 differanse = liste [i +1]− liste [i]

5 utliste append ( differanse )

6 return utliste

7

TILVURDERING

8 print ( differanser ([1,4,9,16,25,36,49]))

Løsninger 209

1.54

1.55

1.56

1.57

1 def summer (n ):

2 summen =0

3 for i in range (1, n +1):

4 summen += i

5 return summen

6

7 print ( summer (6))

1 def summer ( liste ):

2 summen =0

3 for tall in liste :

4 summen += tall

5 return summen

6

7 print ( summer ([1,2,3,4,5,6]))

1 def f(x ):

2 return x ** 2+3 * x −1

3

4 xstart =−5

5 xslutt =5

6 xsteg =1

7

8x= xstart

9y=f(x)

10

11 while x <= xslutt :

12 print (x,y)

13x=x+ xsteg

14y=f(x)

1 import turtle as t

2

3 def tegnsirkler (n ):

4 for i in range (4):

5 t. forward (n)

6 t. circle (n)

7

8 for i in range (10,31,10):

9 tegnsirkler (i)

10t. forward(2 * i)

TILVURDERING

210 Løsninger

1.58

1.59

1.60

1.61

1 def BingBang (n ):

2 if (n %3==0) and (n %4==0):

3 return ” BingBang ”

4 if n %3==0:

5 return ” Bing ”

6 if n %4==0:

7 return ” Bang ”

8 else :

9 return n 10

11n= int ( input ( ’ Skriv inn et heltall :’ )) 12

13 print ( BingBang (n ))

1 for tall in range (1,101):

2 if tall %3==0:

3 if tall %10==0:

4 print (f ’{ tall :3} ’ )

5 else :

6

print (f ’{ tall :3} ’ , end= ’’ )

7 else :

8 if tall %10==0:

9 print ( ’’ )

10 else :

11

print ( ’’ , end= ’’ )

1 for tall in range (1,101):

2 if tall %2==0 or tall %3==0:

3 if tall %10==0:

4

print (f ’{ tall :3} ’ )

5 else :

6

print (f ’{ tall :3} ’ , end= ’’ )

7 else :

8 if tall %10==0:

9

10 else : 11

print ( ’’ )

print ( ’’ , end= ’’ )

1 teller =1

2

TILVURDERING

3 for i in range (1,11):

4 for j in range (1,11):

5 if teller %10==0:

6

print (f ’{i * j :3} ’ )

Løsninger 211

1.62

1.63

1.64

1.65

7 else :

8 print (f ’{i * j :3} ’ , end= ’’ )

9 10 teller +=1

1 for i in range (1,11):

2 tall =i ** 3

3 print ( tall , end= ’’ )

a)Vilarantallprikkertilsvaretallet.

Tallfølgendannerdetsomgjernekallestrekanttallene.

b) Vibegynnermed1ogendiferansepå2.Diferansenøkermedénhvergang.

1 tall =1

2 differanse =2

3

4 for i in range (15):

5 print ( tall , end= ’’ )

6 tall += differanse

7 differanse +=1

1 tall =256

2

3 for i in range (10):

4 print ( tall , end= ’’ )

5 tall /=2

1 tall1 =2

2 tall2 =1

3 print ( tall1 , end= ’’ )

4

5 for i in range (10):

6 print ( tall2 , end= ’’ )

7 minne = tall2

TILVURDERING

8 tall2 = tall1 + tall2

9 tall1 = minne

212 Løsninger
T1 T4 T3 T2

1.66

1 import turtle as t

2t. speed ( speed =0)

3

4 def delopp ( trekant ):

5 nytrekant = ’’

6 for tegn in trekant :

7 if tegn == ’h’ :

8 nytrekant += ’ hvhv ’

9 else : 10 nytrekant += ’ vvhv ’

11 return nytrekant 12

13

antall_iterasjoner =4

14 lengde =5

15 trekant = ’ hhh ’

16

17 for i in range ( antall_iterasjoner ):

18 trekant = delopp ( trekant )

19

20 for instruks in trekant :

21 if instruks == ’h’ :

22

23

24 else :

25

26

t. right (120)

t. forward ( lengde )

t. left (60)

t. forward ( lengde )

Med reiterasjonerfårvidenne guren:

Vanlig tekst kursiv x

TILVURDERING

Løsninger 213
y

2.1

1 liste =[1,1,2,3,5,8,13,21]

3 produkt =1

4 for x in liste : 5 produkt = produkt * x

( produkt ) 2.2 a)

2.3

2.4

1 liste =[1,1,2,3,5,8,13,21] 2

3 for i in range ( len ( liste )−1):

4a= liste [i]

5b= liste [i +1]

6m =( a+b )/2

7 8 print (m, end= ’’ )

1 liste =[1,1,2,3,5,8,13,21]

3 summen =0 4 for x in liste : 5 summen = summen +x

gjennomsnitt = summen / len ( liste )

print ( gjennomsnitt )

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

2 vekter =[1,1,1,1.5,2,2] 3 4 summen =0

5 for i in range ( len ( liste )):

6x= liste [i]

7 vekt = vekter [i]

8 produkt =x * vekt

9 summen = summen + produkt 10

11 vektet_gjennomsnitt = summen / len ( liste ) 12 print ( vektet_gjennomsnitt )

TILVURDERING

214 Løsninger
2
2
6 7 print
a + b
b)
2
6 7
8 9

2.5

2.6

2.7

1 karakter =[1,2,3,4,5,6]

2 frekvens =[1,4,7,9,6,2]

3

4 summen =0

5 sum_frek =0

6

7 for i in range ( len ( karakter )):

8 delsum = karakter [i] * frekvens [i]

9 summen += delsum

10 sum_frek += frekvens [i]

11

12 gjennomsnitt = summen / sum_frek

13 print (f ’{ gjennomsnitt :.2 f}’ )

1n =45

2m =3

3 4 if n>m:

5 print (n, ’ er størst ’ )

6 else :

7 print (m, ’ er størst ’ )

1 print ( ’ Skriv inn hva spillerne har valgt .’ )

2 print ( ’ Skriv inn «stein» , «saks» eller «papir» .’ )

3

4 def spill ():

5 spiller1 = input ( ’ Skriv inn valg :’ )

6 spiller2 = input ( ’ Skriv inn valg :’ )

7

8 if spiller1 == spiller2 :

9 vinner =0

10 elif spiller1 == ’ stein ’ and spiller2 == ’ saks ’ :

11 vinner =1

12

elif spiller1 == ’ saks ’ and spiller2 == ’ papir ’ :

13 vinner =1

14 elif spiller1 == ’ papir ’ and spiller2 == ’ stein ’ :

15 vinner =1

16 else :

17 vinner =2

18

return vinner

TILVURDERING

19 spiller1 =0

20 spiller2 =0

21 uavgjort =0

22 fortsett = True

Løsninger 215

2.8

23 while fortsett :

24 vinner = spill ()

25 if vinner ==1:

26 spiller1 +=1

27 elif vinner ==2:

28 spiller2 +=1

29 else : 30 uavgjort +=1

31 svar = input ( ’ Vil du spille igjen ?(j/n):’ ) 32 fortsett = svar == ’j’ 33 antall_spill = spiller1 + spiller2 + uavgjort

35 print (f ’ Dere spilte { antall_spill } ganger .’ )

36 print (f ’ Det ble uavgjort { uavgjort } ganger .’ )

37 print (f ’ Spiller 1 vant { spiller1 } ganger .’ )

38 print (f ’ Resten ,{ spiller2 } ganger , vant spiller 2. ’ )

1 mål = int ( input ( ’ Skriv inn det spiller 1 roper :’ ))

2 tall1 = int ( input ( ’ Hvor mange fingre holder spiller 1 fram ?’ ))

3 tall2 = int ( input ( ’ Hvor mange fingre holder spiller 2 fram ?’ ))

4

5 if tall1 + tall2 == mål :

6 print ( ’ Spiller 1 har vunnet .’ )

7 else :

8 print ( ’ Spiller 2 har vunnet .’ )

3 størst = liste [0]

4 for x in liste :

5 if x> størst : 6 størst =x 7 8 print ( størst )

TILVURDERING

216 Løsninger
34
2.9 a)–b) 1 liste
28,28,13,33,35]
=[12,43,27,46,49,25,49,11,10,35,48,36,4,34,50,
2
c) 1 liste =[12,43,27,46,49,25,49,11,10,35,48,36,4,34,50,
2
28,28,13,33,35]
3 størst = liste [0] 4 minst = størst

4 størst_y = yverdier [0]

5 størst_indeks =0 6

7 for i in range ( len ( yverdier )): 8 if yverdier [i ]> størst_y :

størst_y = yverdier [i]

12x= xverdier [ størst_indeks ] 13y= størst_y

15 print (f ’ ({ x }, {y }) ’ )

3

4 for i in range ( len ( xverdier )):

5x= xverdier [i]

6y= yverdier [i]

7 differanse =y −3 * x 8 print (f ’{ differanse :.1 f}’ ) b)

4 kvadratsum =0

5 for i in range ( len ( xverdier )):

6x= xverdier [i]

7y= yverdier [i]

8 differanse =y −3 * x

9 kvadratsum = kvadratsum + differanse ** 2

TILVURDERING

Løsninger 217
6
7
8 if x< minst
9 minst
10 11 print
2.10 1 xverdier =[−6,−5,−4,−3,−2,−1,0,1,2,3,4,5] 2 yverdier =[−11,−4,1,4,5,4,1,−4,−11,−20,−31,−44] 3
5 for x in liste :
if x> størst :
størst =x
:
=x
(f ’ Minst :{ minst }, størst :{ størst }. ’ )
9
størst_indeks
10
=i 11
14
2.11 a) 1 xverdier =[1,2,3,4,5,6,7,8,9,10] 2 yverdier =[2.5,9.3,10.9,13.6,14.1,19.9,21.5,25.2,32.1,31.3]
1 xverdier =[1,2,3,4,5,6,7,8,9,10] 2 yverdier =[2.5,9.3,10.9,13.6,14.1,19.9,21.5,25.2,32.1,31.3]
3

2.12

3

4a =3

5 minst =10 ** 10

6 minste_a =a

7

8 while a <=4:

9 kvadratsum =0

10 for i in range ( len ( xverdier )):

11 x= xverdier [i]

12 y= yverdier [i]

13 differanse =y−a * x

14 kvadratsum = kvadratsum + differanse ** 2

15 if kvadratsum < minst :

16 minst = kvadratsum

17 minste_a =a

18a=a +.1

19 20 print ( minste_a )

1 brød =[ ’ loff ’ , ’ kneipp ’ , ’ rundstykke ’ , ’ knekkebrød ’ ]

2 pålegg =[ ’ syltetøy ’ , ’ ost ’ , ’ kaviar ’ , ’ egg ’ , ’ skinke ’ , ’ makrell ’ ]

3

4 for i in range ( len ( brød )):

5 for j in range ( len ( pålegg )):

6 nederst = brød [i]

7 øverst = pålegg [j]

8 print (f ’{ nederst } med { øverst }’ )

2.13 Vibrukerénløkkeforhverliste,altsåtoløkker,innihverandre:

1 liste1 =[ ’a’ , ’b’ , ’c’ , ’d’ , ’e’ , ’f’ ]

2 liste2 =[ ’f’ , ’g’ , ’h’ , ’i’ ]

3 liste3 =[] 4

5 for x in liste1 :

6 for y in liste2 :

7 liste3 append (x+y)

8

9 print ( liste3 )

Vikjørerkodenogfårfølgenderesultat:

TILVURDERING

[’af’,’ag’,’ah’,’ai’,’bf’,’bg’,’bh’,’bi’,’cf’,’cg’,’ch’,’ci’, ’df’,’dg’,’dh’,’di’,’ef’,’eg’,’eh’,’ei’,’ff’,’fg’,’fh’,’fi’]

218 Løsninger c)
1 xverdier =[1,2,3,4,5,6,7,8,9,10] 2 yverdier =[2.5,9.3,10.9,13.6,14.1,19.9,21.5,25.2,32.1,31.3]

2.14

2.15

2.16

2.17

2.18

1 for x in range (1,11):

2 for y in range (1,11):

3 for z in range (1,11):

4 if x ** 2+ y ** 2== z ** 2:

5 print (x,y,z)

a)

1 for i in range (1,7):

2 for j in range (1,7):

3 print (f ’ ({ i }, {j }) ’ )

b)

1 liste =[]

2 for i in range (1,7):

3 for j in range (1,7):

4 if (j,i) not in liste :

5 liste append (( i,j ))

6

7 for x in liste :

8 print (x)

1 print ( ’x’ , ’y’ )

2

3 for x in range (−10,11):

4 for y in range (−10,11):

5 if 2* x +3* y ==24: 6 print (x,y)

1n =5 2

3 for i in range (n +1):

4 for j in range (i ,0,−1):

5 print (j, end= ’’ )

6 print ()

1 tallene =[14,56,84,133,122,28,77]

TILVURDERING

2 delelig = True

3 for tall in tallene :

4 if tall %7!=0:

5 delelig = False

Løsninger 219

2.19

2.20

2.21

6 if delelig == True :

7 print ( ’ Alle tallene er delelige med 7. ’ )

8 else : 9 print ( ’ Minst ett av tallene er ikke delelig med 7. ’ )

1 tall =[3,7,6,13,31,15,55,97,13,11,3,5,10]

2

3 oddetall = True

4 for x in tall : 5 if x %2==0: 6 oddetall = False 7 8 if oddetall : 9 print ( ’ Alle tallene er oddetall .’ ) 10 else : 11 print ( ’ Det finnes partall blant tallene .’ )

1 tall =[5,7,4,6,−3,16,−18,2,3,17]

2

3 OK = True

4

5 for x in tall :

6 if 10− x >5 or x −10>5: 7 OK = False 8

9 if OK == True :

print ( ’ Ja , alle talleneligger nærmereenn 5 fra 10. ’ ) 11 else : 12 print ( ’ Nei , det finnes tall som har større avstand til 10 enn 5. ’ )

1 liste =[6,3,5,1,8,79,43]

2

3 def bytt ( liste ,n,m):

4 minne = liste [n]

5 liste [n ]= liste [m]

6 liste [m]= minne 7

TILVURDERING

fortsett = True

while fortsett == True :

byttet = False

220 Løsninger
10
8
11
9
10

2.22

2.23

13 for i in range ( len ( liste )−1):

14 if liste [i ]> liste [i +1]:

15 bytt ( liste ,i,i +1)

16 byttet = True

17

18 if byttet == False : 19 fortsett = False

20 print ( liste )

1 liste =[45,2,35,43,87,1,4,65,12,60] 2

3 def bytt ( liste ,n,m):

4 minne = liste [n]

5 liste [n ]= liste [m]

6 liste [m]= minne

7

8 for i in range ( len ( liste )−1):

9 for j in range (i ,−1,−1):

10 if liste [j ]> liste [j +1]: 11 bytt ( liste ,j,j +1) 12 print ( liste )

3 sortert =[ liste [0]] 4

5 for x in liste [1:]:

6 plassert = False

7 for i in range ( len ( sortert )): 8 if x< sortert [i ]: 9 sortert = sortert [: i ]+[ x ]+ sortert [i :]

plassert = True

break 12 if not ( plassert ):

sortert . append (x)

TILVURDERING

2 mål =9

start =0 5 slutt = len ( liste )

Løsninger 221
1
liste =[30,10,86,68,69,31,77,3,14,23,99,6,66,2,27,84, 16,81,99,31] 2
13
14
10
11
15 print ( sortert )
2.24 a)–b) 1 liste =[1,4,5,7,8,9,14,16,17]
3 4

2.25

6 m1 = start +( slutt start )//3

7 m2 = start +2 * ( slutt start )//3

8 9 funnet = False

10

11 while funnet == False :

12 if liste [ m1 ]== mål :

13 svar = m1

14 funnet = True

15 elif liste [ m2 ]== mål :

16 svar = m2

17 funnet = True

18 elif mål < liste [ m1 ]:

19 slutt = m1

20 m1 = start +( slutt start )//3

21 m2 = start +2 * ( slutt start )//3

22 elif mål < liste [ m2 ]:

23 start = m1

24 slutt = m2

25 m1 = start +( slutt start )//3

26 m2 = start +2 * ( slutt start )//3

27 else :

28 start = m2

29 m1 = start +( slutt start )//3

30 m2 = start +2 * ( slutt start )//3 31

32 print (f ’ Indeksen til { mål } er { svar }. ’ )

1 def finn ( liste , mål ):

2 start =0

3 slutt = len ( liste )

4 midtpunkt =( start + slutt )//2 5

6 funnet = False 7

8 while funnet == False :

9 if liste [ midtpunkt ]== mål : 10 svar = midtpunkt 11 funnet = True 12 elif liste [ midtpunkt ]> mål : 13 slutt = midtpunkt 14 midtpunkt =( start + slutt )//2 15 else :

TILVURDERING

start = midtpunkt 17 midtpunkt =( start + slutt )//2 18 return svar

222 Løsninger
16
2.26 Vistartermedenenkelt«*»ienstreng.Forhverrundeiløkkaleggervitilén.

2.28

1 svar = ’ * ’

2 for i in range (4):

3 print ( svar )

4 svar = svar + ’ * ’

2.27 a)–

2.29

2.30

b) Viskriverutde50førstesvarene:

1n =50

2

3 for x in range (1, n +1):

4 svar =x

5 if x%3==0 or x%4==0:

6 svar = ’ biip ’

7 print ( svar )

1 def baklengs (n ):

2 streng = str (n)

3 lengde = len ( streng )

4 resultat = ’’

5

6 for i in range ( lengde ):

7 resultat += streng [ lengde −i −1]

8 return int ( resultat )

1n =6

2

3 for i in range (1, n +1):

4 streng = ””

5 for j in range (1, i +1):

6 streng += str (j)

7 streng = streng + streng [:−1][::−1]

8 print ( streng )

1 tall =1468

2

3 streng = str ( tall )

4 lengde = len ( streng )

5

TILVURDERING

6 svar = True

7 for i in range ( lengde −1):

8 if int ( streng [i ])>= int ( streng [i +1]):

9 svar = False

Løsninger 223

2.31

10 if svar : 11 print ( ’ Sifrene i tallet er i stigende rekkefølge .’ ) 12 else :

print ( ’ Sifrene i tallet er ikke i stigende rekkefølge .’ )

1n= int ( input ( ’ Skriv inn et heltall :’ ))

+1 7 8 while differanse > presisjon :

)/2

differanse = abs ( forrige_n n_0 ) 12 13 print ( n_0 )

1a =7

2 for i in range (10):

3 print (a, end= ’’ )

4a=a +4

TILVURDERING

Nårvikjørerkoden,fårvidetiførsteleddeneidenmidterstetallfølgen: 7111519232731353943

224 Løsninger
13
2
6
else
8
9 10 print (n,
11 teller +=1 12 13 print () 14 print () 15 print ( teller )
3 teller =0 4 while n !=1: 5 if n%2==0:
n=n //2 7
:
n =3* n +1
end= ’’ )
2
4
2.32 1n =42
3 presisjon =.01
5 n_0 =1 6 differanse = presisjon
9 forrige_n = n_0 10 n_0 =( n_0 +n/ n_0
11
3.1 a)Vi nnerleddeneidenmidterstefølgenvedåstartemed a = 7ogsåleggetil4.

3.2

Leddeneitallfølgenerdiferansenemellomleddeneidennederstefølgen.Vi nnerleddeneiden nederstefølgenvedåstartemed b = 4forsååleggetil a1 forå nne b2 , a1 + a2 forå nne b3 osv:

1 # Det første leddet i den midterste følgen

2a =7

3 # Det første leddet i den nederste følgen

4b =4

5 # Legger til summen av stadig flere ledd i den midterste følgen for å finne leddene i den nederste følgen

6 for i in range (12):

7 print (b, end= ’’ )

8b=b+a

9a=a +4

Nårvikjørerkoden,fårvidetolvførsteleddeneidennederstetallfølgen.

41122375679106137172211254301

Dettolvteleddeter301.Detbetyratvitrenger301klosserforålage gurnummer12.

b) Viopprettervariablene summen og teller.Vigjørløkkaomtilen while-løkkeoglarløkkagåså lengesummenermindreenn6000.Vioppdatererverdienavsummenvedåleggeettogettleddi tallfølgeninnivariabelen.

1a =7

2b =4

3 summen =0

4 teller =0

5 while summen <=6000:

6 summen = summen +b

7 teller = teller +1

8b=b+a

9a=a +4

10 print (f ’ Vi kan lage { teller 1} figurer .’ )

Nårvikjørerkoden,fårvi: Vikanlage20figurer.

1 def ledd (n ):

2a =11

3b =7

TILVURDERING

4 for i in range (n −1):

5b=b+a

6a=a +4

7 return b

Løsninger 225

3.3

3.4

3.5

3.6

8 print (f ’ Ledd nummer 20 er { ledd (20) }. ’ )

Nårvikjørerkoden,fårvi:

Leddnummer20er900.

a)

1 import matplotlib pyplot as plt

2

3 xverdier =[0,4,5,10,14,16,20]

4 yverdier =[3,8,2,5,16,14,15]

5

6 plt plot ( xverdier , yverdier )

7 plt . show ()

b)

1 import matplotlib . pyplot as plt

2

3 xverdier =[0,4,5,10,14,16,20]

4 yverdier =[3,8,2,5,16,14,15]

5

6 plt . plot ( xverdier , yverdier , ’x’ )

7 plt show ()

1 import matplotlib pyplot as plt

2

3 xverdier =[0,1,2,3,4,5,6,7,8,9]

4 yverdier =[16,6,20,14,20,18,10,0,5,3]

5

6 plt plot ( xverdier , yverdier , ’o’ )

7 plt show ()

1 import matplotlib pyplot as plt 2

3 xverdier =[0,2,4,5,8,10,15,16]

4 yverdier =[9,−7,−10,−3,−3,7,6,−6]

5

6 plt plot ( xverdier , yverdier , ’o’ )

7 plt . show ()

TILVURDERING

1 import matplotlib . pyplot as plt

2

3 xverdier =[4,6,7,8,9,10,12]

4 y1verdier =[−3,−3,−5,9,−6,−7,−1]

226 Løsninger

3.7

3.8

3.9

5 y2verdier =[−10,−7,8,−1,−8,1,−10]

6

7 plt . plot ( xverdier , y1verdier , label = ’ y1 ’ )

8 plt plot ( xverdier , y2verdier , label = ’ y2 ’ )

9 plt . legend ()

10 plt . show ()

1 import matplotlib . pyplot as plt

2 import pandas as pd 3

4 fil = ’ norges befolkning . csv ’

5

6 df = pd . read_csv ( fil , sep = ’;’ )

7

8 år = df [ ’ Aar ’ ]. tolist ()

9 innbyggere = df [ ’ Innbyggere ’ ]. tolist ()

10

11 plt . plot ( år , innbyggere )

12 plt . show ()

1 import matplotlib . pyplot as plt

2 import pandas as pd 3

4 fil = ’ lonn . csv ’

5

6 df = pd . read_csv ( fil , sep = ’;’ )

7

8 år = df [ ’ Ar ’ ]. tolist ()

9 lønn = df [ ’ Lonn ’ ]. tolist () 10

11 plt . plot ( år , lønn , ’x’ ) # Spredningsdiagram

12 plt . show () 13

14 plt . plot ( år , lønn ) # Linjediagram

15 plt show () 16

17 plt . bar ( år , lønn ) # Søylediagram

18 plt show ()

1 def f(x ):

2 return 4 * x +3

TILVURDERING

3

4 xstart =−10

5 xslutt =10

6 xsteg =0.5

Løsninger 227

3.10

3.11

3.12

7x= xstart

8

9 while x <= xslutt : 10 print (x,f(x ))

11x=x+ xsteg

1 import matplotlib pyplot as plt

2

3 def f(x ):

4 return x ** 2+2 * x −3

5

6 xstart =−4

7 xslutt =3

8 xsteg =0.01

9

10 xverdier =[]

11 yverdier =[]

12

13x= xstart

14

15 while x <= xslutt :

16 xverdier append (x)

17 yverdier append (f(x ))

18x=x+ xsteg

19

20 plt . plot ( xverdier , yverdier )

21 plt show ()

1 def f(x ):

2 return x ** 2+2 * x −3

3

4 xstart =−4

5 xsteg =0.001

6

7x= xstart

8

9 while f(x )> f(x+ xsteg ):

10x=x+ xsteg 11

12 print (x,f(x ))

TILVURDERING

1 def f(x ):

2 return 2 * x ** 3+ x ** 2− x

228 Løsninger

3.13

3.14

3 for x in range (−100,101):

4 if f(x )==0:

5 print (f ’ ({ x }, {f(x) }) ’ )

Kodengirtonullpunkter.Sidendetteerentredjegradsfunksjon,kandethendeatgrafenhartre nullpunkter.Utfradetkodengirossvetviikkeomgrafenharbaretonullpunkterelleromdeteret nullpunkttil.Ettredjenullpunktliggerdaentenutenforintervalletfra 100til100ellersåhardetikke heltalligekoordinater.

1 def f(x ):

2 return x ** 2−3

3

4a =1

5b =5

6d =0.0000000001

7

8m =( a+b )/2

9

10 while b−a>d:

11 if f(a) * f(m)<0: 12 b=m

13 else : 14 a=m

15m =( a+b )/2 16

17 print (f ’{m :.10 f}’ )

a)Programmetsvarerat x ≈ 2eretnullpunkt,mensnullpunkteter x = 1.

b) Vedførstehalveringblir m = 1,altsånullpunktet.Daliggerikkenullpunktetinoenavdeto halvdelene.

c)Vileggertilentestistartenavløkkaom f(m)= 0:

1 def f(x ):

2 return x −1

3

4a =0

5b =2

6d =0.0000000001

7 8m =( a+b )/2

TILVURDERING

9 10 while b−a>d: 11 if f(m)==0: 12 break

Løsninger 229

13 elif f(a) * f(m)<0:

14 b=m

15 else : 16 a=m

17m =( a+b )/2

18

19 print (f ’{m :.10 f}’ )

3.15 a)Larsønskerå nnenullpunktenetilfunksjonen f(x) Programmetstartermed x = 0.Forhver x sjekkerprogrammetom f(x)= 0.Hvisprogrammet nneretnullpunkt,blir x-verdienskrevetut.Såøkerprogrammet x med1ogsjekkerigjen.Slik fortsetterdettil x er10.

b) Viløserlikningen x2 6x + 8 = 0ogfår x = 2eller x = 4. Deto x-verdiene2og4blirskrevetikonsollen.

c)Likningen x2 144 = 0harløsningene x = ±12.DersomLarssetter f(x)= x2 144måhansørge forat x harmulighetentilå nnedetoløsningene.DerformåLarsilinje4sette x tilenverdilavere enn 12,foreksempel 20.Itilleggkanikkeløkkastoppesfør x erstørreenn12.10-talletilinje6 måerstattesmedforeksempel20. 3.16

TILVURDERING

230 Løsninger
1 def f(x
2 return
3 4 xstart =0 5 xsteg =0.001 6 7x= xstart 8 delta_x =0.0000001 9 derivert =( f(x+ delta_x )− f(x ))/ delta_x 10 11 while derivert >0: 12x=x+ xsteg 13 derivert =( f(x+ delta_x )− f(x ))/ delta_x 14 15 print (f ’ ({ x :.2 f }, {f(x) :.2 f }) ’ )
):
−x ** 2+6 * x +2
3.17 1 def f(x ): 2 return −x ** 2+5 * x +6 3 4 xstart =2 5 xslutt =6 6 delta_x =0.01 7 8x= xstart
Nårvikjørerkoden,fårviattoppunkteter (3, 11)

3.19

9 integral =0 10

11 while x <= xslutt : 12 rektangel =f(x) * delta_x

3.18 a)Nårprogrammetkjøres,settes x til0.Deretterkjøresenløkkesomgjentattegangerøker x medet litetillegg h = 0,001.Løkkakjøressålenge f(x) ≤ f(x + Δx),altsåsålengefunksjonen f vokser.

3.20

Elevenønskerå nneførstetoppunktetter x = 0.

b) f (x)= x2 + 1 x 2x (x2 + 1)2 = 1 x2 (x2 + 1)2

Viløserlikningen f (x)= 0ogfår x ± 1.

Nevnereni f (x) eralltidpositiv,såtellerenavgjørfortegnet.Tellerenerenandregradsfunksjon medtoppunkt. f (x) erderfornegativframtil x = 1,positivfor x ∈ −1, 1 ognegativfor x > 1.

Detbetyrat f stigerframtil x = 1,synkerfor x ∈ −1, 1 ogstigerfor x > 1.

Førstetoppunktetter x = 0erderfor x = 1,somerden x-verdienelevenønskerå nne.

a)Programmetde nererfunksjonen f(x)= x2 + 2.Istartener I = 0og x = 0.Forhvergang

løkkakjøreradderesproduktetav h,nemlig 1 10000 avintervallet [0, 2],medfunksjonsverdien av x.Deretterøkes x med h ogløkkagjentas.Detteblirenvenstresidigtrappesumogen tilnærmingsverdiforintegralet.

Elevenønskeråberegne 2 0 x2 + 2dx.

b) 20 3

a)

1 saldo =40000

2 sparebeløp =3000

3 rentesats =0.27

4 vekstfaktor =1+ rentesats /100

5

6 for i in range (10):

7 saldo =( saldo + sparebeløp ) * vekstfaktor

8 print ( saldo )

b)

TILVURDERING

1 saldo =40000

2 sparebeløp =3000

3 rentesats =0.27

4 vekstfaktor =1+ rentesats /100

Løsninger 231
13 integral = integral + rektangel 14x=x+ delta_x 15 16 print ( integral )

5 måneder =0

6 while saldo <=120000:

7 saldo =( saldo + sparebeløp ) * vekstfaktor

8 måneder = måneder +1

9 print ( måneder )

3.21 Resultatetikonsollenblir:

170454.54545454544

193698.347107438

220111.75807663408

250126.9978143569

284235.2247890419

322994.57362391124

367039.28820899007

417090.1002374887

Hanønskerforeksempelå nneverdienavbilensindeåtteforegåendeårene.

3.22 Elevenønskerå nneuthvorlangtiddettarådoble10000nårbeløpetvoksermed3%hvertår. Nårprogrammetkjøres,blirvariabelen«beløp»satttil10000.Såøkerverdienmedenvekstfaktor på1,03,engangforhvergangløkkakjører.Løkkakjørertilverdienerdetdobbelteavbeløpet,altså 20000.Linje10printerutverdien,menslinje11printerutantallårdettar. 3.23

TILVURDERING

stopper på fem er tilnærmet

232 Løsninger
1 import random 2 3N =100000 4 femmere =0 5 6 for i in range (N ): 7 resultat = random randint (1,8) 8 if resultat ==5: 9 femmere +=1 10
relativ_frekvens = femmere /N
print (f ’ Sannsynligheten for at
lik { relativ_frekvens }. ’ )
import random 2
=100000 4 sum_øyne =0
11
12
lykkehjulet
3.24 1
3N

5 for i in range (N ):

6 t1 = random randint (1,6)

7 t2 = random . randint (1,6) 8 t3 = random randint (1,6)

9 resultat = t1 + t2 + t3 10 if resultat ==8: 11 sum_øyne +=1

13 relativ_frekvens = sum_øyne /N

15 print (f ’ En tilnærming til sannsynligheten for summen 8 er { relativ_frekvens }. ’ )

3.25 a)Programmetsimulerer1000000kastmedtoterningerogtelleropphvormangegangersummen avkasteneblir9.Outputfraprogrammeterdenrelativefrekvensenforatdetblir9.

Elevenønskeråsimuleresannsynlighetenforatsummenavantalløynenårdukastertoterninger erni.

b) Sidensannsynligheteneruniformtfordeltvedkastavtoterninger,kanviberegnesannsynlighetenvedååberegneandelenavgunstigeutfallavantallmuligeutfall:

3.26 ViskriveretprogramiPythonsomsimulerer1000000runderavspillet.Enløkkekjøres1000000 ganger.Hvergangtrekkerprogrammetetheltallmellom1og6treganger.Dersomproduktetav talleneblirover100,tellerviomgangensomvinst.Outputfraprogrammeterdenrelativefrekvensen foratprodukteterover100.

TILVURDERING

Løsninger 233
12
14
4 36 = 1 9 ≈ 0,111
random 2
4
antall_vinst =0
i in range (N ): 7 terning1
random randint (1,6) 8 terning2
random . randint (1,6) 9 terning3 = random . randint (1,6) 10 resultat
terning1
terning2
terning3 11 if resultat >100: 12 antall_vinst
antall_vinst +1 13 14 print
antall_vinst /N)
1 import
3N =1000000
5
6 for
=
=
=
*
*
=
(

3.27

1 import random

2 import matplotlib . pyplot as plt

3

4 def terninger (n ):

5 resultat =0

6 for i in range (n ):

7 terning = random . randint (1,4)

8 resultat = resultat + terning

9 return resultat

10

11n =3

12N =1000000

13 xverdier = list ( range (13))

14 frekvenser =[0] * 13

15

16 for i in range (N ):

17 utfall = terninger (n)

18 frekvenser [ utfall ]+=1

19

20 relative_frekvenser =[] 21

22 for f in frekvenser : 23 rf =f/N

24 relative_frekvenser append ( rf ) 25

26 plt bar ( xverdier , relative_frekvenser ) 27 plt show ()

1 import random 2

3N =100000 4

5 teller =0 6

7 for i in range (N ):

8 terning1 = random randint (1,6)

9 terning2 = random randint (1,6)

10 if terning1 >=5 or terning2 >=5:

11 teller +=1

12

13 relativ_frekvens = teller /N

14

TILVURDERING

15 print (f ’ Sannsynligheten for å vinne er { relativ_frekvens }. ’ )

Nårvikjørerprogrammet,kanviforeksempelfå«Sannsynlighetforåvinneer0.55553.».Detbetyrat sannsynlighetenforåvinneeromtrent0,56.

234 Løsninger
3.28 ViskriveretprogramiPythonsomsimulererspillet.

1

2

a)Hvergangløkkagårtegnerprogrammetetlinjestykkemedlengde4,ettersom a = 4.Såsnurman

360 5 = 72◦ tilhøyre.Detbetyratdetnyelinjestykketmanskaltegnedannerenvinkelpå108◦ med linjestykketmanalleredehartegnet,ettersom180◦ 72◦ = 108◦ .Sågårløkkaengangtil.Det sammeskjeraltsåfemgangeretterhverandre.Daermantilbakepådetsammestedetderman startet,ogmanharlagetenregulærfemkant.

a)Enbrukerblirbedtomåskriveinnetheltall.Dettetalletfortellerhvormangegangerenløkkeskal kjøre.Hvergangløkkakjørerkastesenterningogresultatetleggesivariabelentall.Verdienav dennevariabelenleggeshvergangtilenliste.Etteratløkkaerferdigågåskriverprogrammetut listatilskjerm.

b) Deterikkenoefasitpåakkurathvormangeterningkastmanmåkaste,mennårmankasterveldig mangeganger,vildenrelativefrekvensenforenhendelsegåmotsannsynligheten.Detvilsiat omtrentensjettedelavkasteneviserhveravdeseksresultatene.

TILVURDERING

Løsninger 235
b) 108 o 4 108 o 108 o 108 o 108 o 4 4 4 4
3 1x =2 2 3 for i in range (10): 4 print (x, end= ’’ ) 5x =2 * x 4 1x =3 2 for i in range (10): 3 print (x, end= ’’ ) 4x=x +4 5 1a =3 2b =4 3c =5 4 5 if a ** 2+ b ** 2== c ** 2 or b ** 2+ c ** 2== a ** 2 or a ** 2+ c ** 2== b ** 2: 6 print ( ’ Trekanten er rettvinklet .’ ) 7 else : 8 print ( ’ Trekanten er ikke rettvinklet .’ )

8

1 tall1 =3

2 tall2 =0

3

4 if tall1 ==0 or tall2 ==0:

5 print ( ’ Minst ett av tallene er null .’ )

6 elif tall1 * tall2 >0:

7 print ( ’ Tallene har samme fortegn .’ )

8 else :

9 print ( ’ Tallene har forskjellig fortegn .’ ) 7

9

1 tall1 =15

2 tall2 =21 3

4m= tall2

5 tall2 = tall1

6 tall1 =m

7

8 print (f ’ tall1 er nå { tall1 }’ )

9 print (f ’ tall2 er nå { tall2 }’ )

1 for x in range (−10,10):

2 if 2* x +4==18:

3 print (f ’x={x} er en løsning ’ )

1 start =−10

2 slutt =− start 3

4 for x in range ( start , slutt ):

5 for y in range ( start , slutt ):

6 if 2* x +4 * y ==10: 7 print (x,y) 10

11

1 for i in range (1,1001):

2 if i %13==0 and i %17==0:

3 print (i)

1 antall_drag =0

TILVURDERING

2 dragtid =4

3 pausetid =2

4 total_dragtid =0

5 totaltid =0

236 Løsninger
6

14

6 aktivitet = ’ drag ’

7

8 while antall_drag <10:

9 if aktivitet == ’ drag ’ :

10 print ( ’ Går fra drag til pause .’ )

11 totaltid += dragtid

12 aktivitet = ’ pause ’

13 total_dragtid += dragtid

14 antall_drag +=1

15 else :

16 print ( ’ Går fra pause til drag .’ )

17 totaltid += pausetid 18 aktivitet = ’ drag ’ 19 print ( totaltid )

1n= int ( input ( ’ Skriv inn et tall :’ ))

2

3 funnet = False

4 for i in range (2, n ):

5 if n%i ==0:

6 funnet = True

7 break

8 if not ( funnet ):

9 print ( ’ primisk !’ )

10 else : 11 print ( ’ nei ’ ) 13

1a= float ( input ( ’ Skriv inn stigningtallet :’ ))

2b= float ( input ( ’ Skriv inn konstantleddet :’ ))

3x =0

4y=b

5 print (f ’ Skjæringspunktet med y− aksen er ({ x :.3 f }, {y :.3 f }) .’ )

6x =−b/a

7y =0

8 print (f ’ Skjæringspunktet med x− aksen er ({ x :.3 f }, {y :.3 f }) .’ )

1 def absoluttverdi (n ):

2 if n >=0:

3 return n

TILVURDERING

4 else :

5 return −n

Løsninger 237
21
20 print ()
22 print ( total_dragtid ) 12

16

17

1 x1 = float ( input ( ’ Skriv inn første x− verdi :’ ))

2 y1 = float ( input ( ’ Skriv inn første y− verdi :’ ))

3 x2 = float ( input ( ’ Skriv inn andre x− verdi :’ ))

4 y2 = float ( input ( ’ Skriv inn andre y− verdi :’ ))

5

6 deltax = x2 x1

7 deltay = y2 y1

8

9 if deltax !=0:

10a= deltay / deltax

11 print (f ’ Stigningen mellom punktene ({ x1 }, { y1 }) og ({ x2 }, { y2 }) er

{a :.3 f }. ’ )

12 else :

13 print (f ’ De to punktene ligger på linjen x={ x1 }. ’ )

1 x1 = float ( input ( ’ Skriv inn første x− verdi :’ ))

2 y1 = float ( input ( ’ Skriv inn første y− verdi :’ ))

3 x2 = float ( input ( ’ Skriv inn andre x− verdi :’ ))

4 y2 = float ( input ( ’ Skriv inn andre y− verdi :’ ))

5 print ()

6

7 deltax = x2 x1

8 deltay = y2 y1

9

10 if deltax !=0:

11a= deltay / deltax

12b= y1 −a * x1

13 if a ==0:

14

print (f ’ Linjen gjennom punktene ({ x1 }, { y1 }) og ({ x2 }, { y2 }) er y

={b :.3 f }. ’ )

15 elif b ==0:

16

print (f ’ Linjen gjennom punktene ({ x1 }, { y1 }) og ({ x2 }, { y2 }) er y

={a :.3 f}x.’ )

17 else :

18

19 else :

20

print (f ’ Linjen gjennom punktene ({ x1 }, { y1 }) og ({ x2 }, { y2 }) er y

={a :.3 f}x+{b :.3 f }. ’ )

print (f ’ Linjen gjennom punktene ({ x1 }, { y1 }) og ({ x2 }, { y2 }) er x= { x1 :.3 f }. ’ )

1n= int ( input ( ’ Skriv inn et helt tall :’ ))

2 for i in range (0, n +1):

3 for j in range (1, n +1):

TILVURDERING

4 print (f ’ ({ i }, {j }) ’ , end= ’’ )

238 Løsninger 15

19

1n= int ( input ( ’ Skriv inn et helt tall :’ ))

2

3 for i in range (1, n ):

4 if n%i ==0:

5 print (i)

1 fortsett = True

2 summen =0

3 antall_tall =0

4

5 while fortsett :

6 svar = input ( ’ Skriv inn neste tall :’ )

7 if svar == ’q’ :

8 fortsett = False

9 else :

10 tall = float ( svar )

11 antall_tall +=1

12 summen += tall

13

14 print ( summen / antall_tall ) 20

1 def fakultet (n ):

2 produkt =1

3 for i in range (2, n +1):

4 produkt *=i

5 return produkt 21

1n= int ( input ( ’ Skriv inn et heltall :’ )) 2

3 kvadrattall =[]

4

5 for i in range (1, n ):

6 for j in range (1, i +1):

7 if j ** 2== i:

8 kvadrattall . append (i)

9

10 print ( kvadrattall )

1 tall1 = float ( input ( ’ Skriv inn et tall :’ ))

2 tall2 = float ( input ( ’ Skriv inn et tall :’ ))

TILVURDERING

3 tall3 = float ( input ( ’ Skriv inn et tall :’ )) 4

5 if tall1 == tall2 == tall3 :

6 print ( ’ Tallene er like store .’ )

Løsninger 239 18
22

23 a)

7 elif tall1 == tall2 or tall2 == tall3 or tall1 == tall3 :

8 if tall1 == tall2 and tall1 > tall3 :

9 print (f ’{ tall1 } er størst ’ )

10 elif tall1 == tall2 and tall1 < tall3 :

11 print (f ’{ tall3 } er størst ’ )

12 elif tall1 == tall3 and tall1 > tall2 :

13 print (f ’{ tall1 } er størst ’ )

14 elif tall1 == tall3 and tall1 < tall2 :

15 print (f ’{ tall3 } er størst ’ )

16 elif tall2 == tall3 and tall2 > tall1 :

17 print (f ’{ tall2 } er størst ’ )

18 elif tall2 == tall3 and tall2 < tall1 :

19 print (f ’{ tall1 } er størst ’ )

20 elif tall1 > tall2 and tall1 > tall3 :

21 print (f ’{ tall1 } er størst ’ )

22 elif tall2 > tall1 and tall2 > tall3 :

23 print (f ’{ tall2 } er størst ’ )

24 elif tall3 > tall2 and tall3 > tall2 : 25 print (f ’{ tall3 } er størst ’ )

1n =42

2 if n %3==0:

3 print (f ’ Tallet {n} er delelig med 3. Resten er 0. ’ )

4 elif n %3==1:

5 print (f ’ Tallet {n} er ikke delelig med 3. Resten er 1. ’ )

6 else :

7 print (f ’ Tallet {n} er ikke delelig med 3. Resten er 2. ’ )

b)

1 def delelig_med_tre (n ):

2 if n %3==0:

3 return f ’ Tallet {n} er delelig med 3. Resten er 0. ’

4 elif n %3==1:

5 return f ’ Tallet {n} er ikke delelig med 3. Resten er 1. ’

6 else :

7 return f ’ Tallet {n} er ikke delelig med 3. Resten er 2. ’

8

9n= int ( input ( ” Skriv inn et heltall :” ))

10

11 print ( delelig_med_tre (n ))

24 Programmetde nererfunksjonen f til

f(x)= 6x 3 x 1

TILVURDERING

Itilleggde neresfunksjonen Df(x) somerennumerisktilnærmingsverdifordenderiverte f (x)

Programmetstartersåmed x = 1,5.Programmetregnerutverdienavdenderiverteidenne x-verdien.

Dersom f (x) < 3økerprogrammet x med0,001.Slikfortsetterdettildenderiverteikkeermindre

240 Løsninger

enn 3.Denne x-verdienlagresivariabelen a Likningentiltangententil f ergittsom

y = f (x) x + b

Foretpunkt (x0 , f(x0 )) pålinjaharvi

f(x0 )= f (x0 ) x0 + b

Med x0 = a fårvi

f(a)= f (a) a + b

Detgir b = f(a) f (a) a.Detbetyratlinje12regnerutkonstantleddet b tildenførstetangententil f medstigningstall 3med x-verdistørreenn1,5. Viderivererogfår

f (x)= 6(x 1) (6x 3) (x 1)2 = 3 (x 1)2

Viløserlikningen f (x)= 3:

f (x)= 3 3 (x 1)2 = 3 3 = 3 (x 1)2 x 1 = ±1 x = 0 ∨ x = 2

Første x-verdistørreenn1,5blirda2,somerverdientil a ikoden. Detgir b = f(a) f (a) ·

25 a)Ilinje8børhunskriveatdetikkeblirnoenløsning.Ilinje10børhunregneut x = b 2a ogilinje12

1a =1

=1

5d=b ** 2−4 * a * c 6

7 if d <0:

8 print ( ’ Likningen har ingen løsning .’ )

9 elif d ==0:

10x =−b /(2 * a)

11 print (f ’ Likningen har løsning x={x }. ’ )

TILVURDERING

12 else :

13 x_1 =(− b+d ** (1/2))/(2 * a)

14 x_2 =(− b−d ** (1/2))/(2 * a)

15 print (f ’ Likningen har løsningen x={ x_1 } eller x={ x_2 }. ’ )

Løsninger 241
= f(2) f (2) · 2 = 9 ( 3) · 2 = 9
6
15.
a
+
=
børhunregneut x
b
√b2 4ac 2a
3c
4
=
±
2b =2

b) Nårprogrammetkjøresblir a, b og c satttilhenholdsvis1,2og1.Programmetsetter d = b2 4ac Restenavprogrammetbeståravenif-test.Ilinje8skaldetståhvasomskalskjeomdiskriminanten ernegativ,altsåatlikningenikkeharnoenløsning.Ilinje10skaldetståhvasomskalskjehvis diskriminantenernull,altsåat x = b 2a .Ilinje12skaldetståhvasomskalskjenårdiskriminantener positiv,altsånårlikningenhartoløsninger.Nårdettegjøres,løserprogrammetandregradslikningen medkoefsientene a, b og c.Medverdieneiprogarmmetblirdiskriminantennull,ogprogrammet svarer x = 1.

26 Adaønskerå nneuthvormangeårdettarførhunhar500000kronerpåkontoendersomhunhvertår sparer20000kronerogrentaer2%perår.

Nårprogrammetkjøres,settesførstnoenstartverdier.Deretterkjøresenløkkesomøkersaldoenpå 20000kronerogleggertil2%rente.Telleren år økesmedén.Nårløkkaerferdigskrivesverdienav år og beløp ut.

27 Elevenønskeråberegnehvormangeårdettarfør2000kronervoksertildetdobbeltenårdetøkermed 5%perår.

Nårprogrammetkjøres,økesvariabelen«verdi»med5%gjentatteganger,helttilverdienoverstiger detdobbelteavstartverdien.Tilsluttskrivesverdienut,sammenmedantallår.

2)Beregnskalarproduktene −→ AB

BC.

3)Hvisenavskalarprodukteneer0,såertrekantenrettvinklet.

b)

1 # Funksjon som sjekker om to vektorer står vinkelrett på hverandre

2 def vinkelrett ( vektor1 , vektor2 ):

3 if vektor1 [0] * vektor2 [0]+ vektor1 [1] * vektor2 [1]==0:

4 return True

5 else :

6 return False

7

8a =0

9b =0

10c =1

11d =0

12e =0

13f =1

14

15 # Bestemmer vektorene mellom punktene .

16 AB =[ c−a,d−b]

17 BC =[ e−c,f−d]

18 AC =[ e−a,f−b]

19

TILVURDERING

20 if vinkelrett ( AB , AC ) or vinkelrett ( AB , BC ) or vinkelrett ( AC , BC ):

21 print ( ’ Punktene danner en rettvinklet trekant .’ )

22 else :

23 print ( ’ Punktene danner ikke en rettvinklet trekant .’ )

242 Løsninger
b], −→ BC =[e c, f d] og −→ AC =[e a, f b]
28 a)1)Regnutvektorene −→ AB =[c a, d
−→
−→ AB −→ BC
−→ AC −→
AC,
og

29

30

31

a)Larsønskerålageenverditabelltilfunksjonen.De nisjonsmengdentil f eralletallunntatt2.Når programmetprøveråregneut f(2) blirnevnerennull,ogprogrammetgirenfeilmelding.

b) DersomLarsstoppertabellenfør x = 2,vilhanikkefåfeilmelding. AlternativtkanLarsskriveomprogrammet,slikatdettesteromnevnerenernullførdetregnerut funksjonsverdien.

1 def f(x ):

2 teller =(1−2* x)

3 nevner =( x −2)

4 if nevner ==0:

5 return ’ udefinert ’

6 else :

7 return teller / nevner

8 9x =8

10 while x >=−8:

11 print (x,f(x ))

12x=x −1

Nårvikjørerprogrammet,fårvidenneoutputen:

−2−1.25

−3−1.4

−4−1.5

−5−1.5714285714285714

−6−1.625

−7−1.6666666666666667

−8−1.7

c)–

Programmetregnerutfunksjonsverdierfor x ∈ {1, 2, 3,...} helttilfunksjonsverdienoverstiger400.

Resultatetblirkvadrattallene1, 4, 9, 16,..., 400.

TILVURDERING

a)Elevenønskerå nneførste x-verdistørreenn x = 0hvordenderiverteav f skifterfrapositivttil negativtfortegn,altså x-verdientiletmuligtoppunkt.

b) Førstde neresfunksjonsuttrykkket f(x)= x 1 + x2 .Derettersettes h tiletlitetall(0,0001).Så

Løsninger 243
8−2.5 7−2.6 6−2.75 5−3.0 4−3.5 3−5.0 2udefinert 11.0 0−0.5 −1−1.0

lengetilnærmingsverdienfordenderiverte f(x+h) f(x) h erpositiv,såøkervi x med h.Nårbrøkenblir negativ,skriverviut h.

Siden f (x)= 0for x = 1,vilprogrammetskriveut«x=1.0».

1)RegnutavstandenfrasentrumtilP.

2)Sammenliknemed r.Hvisavstandenerlik r,liggerpunktetpåsirkelen.Hvisavstandenerstørre enn r,liggerpunktetutenforsirkelen.Ellersliggerdeninni.

b) ViskriveralgoritmeniPython:

1 import math

2

3 # Sentrum S(a,b).

4 # Radius r

5 # Punkt P(s,t)

6

7a =3

8b =−4

9r =2

10s =6

11t =8

12

13 # Finner avstanden mellom S og P:

14d= math . sqrt (( s−a) ** 2+( t−b) ** 2)

15

16 if d>r:

17 print ( ’ Punktet ligger utenfor sirkelen .’ )

18 elif d == r:

19 print ( ’ Punktet ligger på sirkelen .’ )

20 else :

21 print ( ’ Punktet ligger innenfor sirkelen .’ )

1 innskudd =10000

2 rentefot =1.8

3

4 årstall =2020

5 saldo =0

6

7 for i in range (3):

TILVURDERING

8 print (f ’ Saldo 1. januar { årstall }: { saldo :.2 f}’ )

9 print (f ’ Innskudd :{ innskudd }’ )

10 # Foretar nytt innskudd .

11 saldo += innskudd

244 Løsninger
32 a)Muligalgoritme: 33 a)Viskriveretprogramsomregnerutsaldopåkontoenhvertår.

34

12 # Regner ut rentene

13 renter = saldo * rentefot /100

14 print (f ’ Renter :{ renter :.2 f}’ )

15 # Legger til renter

16 saldo += renter

17 print (f ’ Saldo 31. desember { årstall }: { saldo :.2 f}’ )

18 print ()

19 # Øker årstallet med en .

20 årstall +=1

b) B(x) ersamletbeløppåkontoenetter x år,medinnskuddhvertår.Dablirdetetsprangifunksjonsverdienvedhvertinnskudd,ogfunksjonenerikkekontinuerligder.

c)Viskriveretprogramsomleggertilrenterogforetarinnskuddhvertår:

1 rentefot =1.8

2 innskudd =10000

3K =250000

4

5 saldo = innskudd # Beløpet på kontoen

6 år =0 # Antall år .

7

8 while saldo <K:

9 saldo *=(100+ rentefot )/100 # Legger til renter

10 saldo += innskudd # Foretar innskudd

11 år +=1

12

13 print (f ’ Det tar { år } år .’ )

a)

# Øker antall år med 1.

14 print (f ’ Etter { år } år er saldoen { saldo :.2 f }. ’ )

1 antall =10

2 summen =0

3 for i in range (1, antall +1):

4n =1

5 kvadrattall =0

6 for j in range (i ):

7 kvadrattall += n

8 n +=2

9 summen += kvadrattall

10

11 print ( summen )

Summenblir385.

TILVURDERING

b)

1 antall =10

2

3 summen =0

Løsninger 245

4 for k in range (1, antall +1):

5 pyramidetall =0

6 for i in range (1, k +1):

7 n =1

8 kvadrattall =0

9 for j in range (i ):

10 kvadrattall += n

11 n +=2

12 pyramidetall += kvadrattall

13

14 summen += pyramidetall

15 print ( summen )

Vifåratsummenavde10førstepyramidetalleneer1210. 35

6a =( y2 y1 )/( x2 x1 )

7b= y1 −a * x1

36 a)Kajavilatkodenskalsjekkeomdetotalleneharsammefortegn.

b)

1 tall1 =−5

2 tall2 =32

3

4 if tall1 * tall2 <0:

5 print ( ’ Tallene har forskjellig fortegn .’ )

6 else :

7 print ( ’ Tallene har samme fortegn .’ )

37 a)Kodenskalregneomfraenvekstfaktortilprosentvisendring.

b)

1 vekstfaktor = float ( input ( ’ Skriv inn vekstfaktoren :’ ))

2

3 if vekstfaktor >1:

4 prosent =( vekstfaktor −1) * 100

5 else :

6 prosent =(1− vekstfaktor ) * 100

7

38 Kodentegnergrafentildenderiverteav f(x)= 1 3 x3 x for x mellom 3og3. Førstblirfunksjonenogdenderivertede nert.Deretteretableresverditabellen,førenløkkeleggerinn verdierfor x ogdenderiverte.Tilsluttblirgrafentildenderivertetegnet,altsåparabelengittvedgrafen til f (x)= x2 1.

TILVURDERING

8 print (f ’ En vekstfaktor på { vekstfaktor } tilsvarer en prosentvis endring på { prosent } prosent .’ )

39 Programmetregnerutverdienav y1 = 2x + 3og y2 = 8x 5helttilforholdet y2 y1 erstørreennellerlik

246 Løsninger
2.Løkkakjørertregangerførdetteskjer,såilinje14blirtallet«3»skrevetut.

40 a)–

b) 10%

c)

43 a)

1 pris =30000

2 verditap =.1

3 vekstfaktor =1− verditap 4

5 verdi = pris 6 7 teller =0 8 9 while verdi >= pris /2: 10 verdi = verdi * vekstfaktor

1 def midterst ( liste ):

2a= liste [0]

3b= liste [1]

4c= liste [2]

5 if a<b: 6 if b<c: 7 return b 8 elif a<c: 9 return c 10 else : 11 return a 12 elif a>b:

13 if a<c:

14 return a

15 elif b<c:

16 return c

17 else : 18 return b

1n =46

2

TILVURDERING

3 if n%3==0:

4 print ( ’ Tallet er delelig med 3. ’ )

5 else :

6 print ( ’ Tallet er ikke delelig med 3. ’ )

Løsninger 247
12
41 2 6 42
11 teller +=1
13 print ( teller )

b)

1n =45

2

3 if n%3==0 and n%5==0:

4 print ( ’ Tallet er delelig med 3 og 5. ’ )

5 else :

6 print ( ’ Tallet er ikke delelig med 3 og 5. ’ )

c)

1 for n in range (0,101):

2 if n%3==0 and n%5==0:

3 print (n)

1 for x in range (−10,11):

2 if 3* x +6− x +9==5 * x −3:

3 print (x) 45 1n =3 2m =81

3

4 def sjekkpotens (n,m):

5 produkt =1

6 while produkt <m:

7 produkt = produkt * n

8 if produkt == m: 9 return True 10 return False 11

12 if n<m:

13 svar = sjekkpotens (n,m) 14 else : 15 svar = sjekkpotens (m,n) 16

17 if svar : 18 print ( ’ Ja , det ene tallet er en potens av det andre .’ )

19 else : 20 print ( ’ Nei , ingen av de tallene kan skrives som en potens av det andre tallet .’ )

1 l1 =[20,15,18,9,5,11,14,14,9,3]

TILVURDERING

2 l2 =[19,17,11,20,2,10,6,10,7,8] 3

4 for x in l1 :

5 for y in l2 :

6 print (f ’ ({ x }, {y }) ’ )

248 Løsninger
44
46

1 xmin =−10

2 xmaks =10

3 ymin =−10

4 ymaks =10

5

6 for x in range ( xmin , xmaks +1):

7 for y in range ( ymin , ymaks +1):

8 if 3* x +4 * y ==4:

9 print (x,y)

1 for a in range (1,21):

2 for b in range (1,21):

3 for c in range (1,21):

4 if a ** 2+ b ** 2== c ** 2:

5 print (a,b,c) 49

1 liste =[3,6,5,4,4,5,12,3,12,22,3,4,3,22]

2

3 størst = liste [0]

4

5 for tall in liste :

6 if tall > størst :

7 størst = tall

8

9 print (f ’ Det største tallet i lista er { størst }. ’ )

1 liste1 =[3,6,5,4,4,5,12,3,12,22,3,4,3,22]

2 liste2 =[12,43,15,63,34,13]

3

4 størst1 = liste1 [0]

5 størst2 = liste2 [0]

6 størst = størst1 * størst2

7

8

9 for tall1 in liste1 :

10 for tall2 in liste2 :

11 produkt = tall1 * tall2

12 if produkt > størst : 13 størst = produkt

14 størst1 = tall1

15 størst2 = tall2

TILVURDERING

16 17

18 print (f ’ Det største produktet er { størst }. ’ )

19 print (f ’ Det får vi ved multiplisere { størst1 } med { størst2 }. ’ )

Løsninger 249 47
48
50

5 for i in range (1, n +1): 6 for j in range (1, n +1):

if j%i ==0:

ring [j −1]= not ( ring [j −1])

: 22 print ( ’ Nei , firkanten ABDC er ikke et kvadrat .’ ) 53

19 if ADx == BCx and ADy == BCy and ABx == DCx and ABy == DCy : 20 print ( ’ Ja ,ABCD er et kvadrat .’ ) 21

1 # Rektangel 1

2A =[0,1]

3B =[4,1]

4C =[4,3]

5D =[0,3]

6 # Rektangel 2

TILVURDERING

7E =[3,2]

8F =[7,2]

9G =[7,8]

10H =[3,8]

250 Løsninger 51
2
4
9
10 11 print ( sum
52 1 Ax =1 2 Ay =4 3 Bx
4 By =6 5 Cx =5 6 Cy =4 7 Dx =3 8 Dy =2 9 10 ADx = Dx
11 ADy =
12 BCx =
13 BCy =
14 ABx
ABy
16 DCx
17 DCy =
18
1n =10
3 ring =[ True ] * n
7
8
print (i, ring )
( ring ))
=3
Ax
Dy Ay
Cx Bx
Cy By
= Bx Ax 15
= By Ay
= Cx Dx
Cy Dy
else

11 if (A [0]< E [0]< B [0] or A [0]< F [0]< B [0])\

12 and (A [1]< E [1]< D [1] or A [1]< H [1]< D [1]):

13 print ( ’ Ja , rektanglene overlapper .’ )

14 else :

15 print ( ’ Nei , rektanglene overlapper ikke .’ )

a)Andersvil nnesannsynlighetenforatsummenavantalløyneersjunårhankastertovanlige terninger.

b) Hererdetferealternativeløsninger.Enmuligheterå nnesannsynlighetenforatsummenav antalløyneterningenevisernårvikastertoterningererhøyst reellerminstti:

57 a)

1 teller =0

2

3 for a in range (1,7):

4 for b in range (1,7):

5 if a+b <=4 or a+b >=10:

6 teller = teller +1

7 rel = teller /( a *b)

8 print ( rel )

1n= int ( input ( ’ Skriv inn et tall mellom 1 og 100: ’ ))

2

3 primtallsfaktorer =[]

4

5 for i in range (2, n ):

6 while n%i ==0:

7 primtallsfaktorer . append (i)

8 n=n/i

9 if n ==1:

10 break

11 print ( primtallsfaktorer )

1 import math

2 areal = float ( input ( ’ Skriv inn arealet av en sirkel :’ ))

3 radius = math sqrt ( areal / math pi )

4 omkrets =2 * math . pi * radius

5 print (f ’ Radien er { radius :.2 f} og Omkretsen er { omkrets :.2 f }. ’ )

1F= float ( input ( ’ Skriv inn en temperatur i grader Fahrenheit :’ ))

2C =(5/9) * (F −32)

3 print (f ’ Temperaturen i grader Celsius er {C }. ’ )

TILVURDERING

Løsninger 251
54
55
56

58

b)

1C= float ( input ( ’ Skriv inn en temperatur i grader Celsius :’ ))

2F =(9/5) *C +32

3 print (f ’ Temperaturen i grader Fahrenheit er {F }. ’ )

a)

1 innskudd =5000

2 vekstfaktor =1.04

3

4 verdi = innskudd

5

6 while verdi <8000:

7 verdi = innskudd

8 vekstfaktor = vekstfaktor +0.0001

9 for i in range (10):

10 verdi = verdi * vekstfaktor

11

12 rente =( vekstfaktor −1) * 100

13 print (f ’ Renta blir { rente :.2 f} prosent per år .’ )

b)

1 innskudd =5000

2 vekstfaktor =1.04

3

4 verdi = innskudd

5

6 while verdi <8000:

7 verdi = innskudd

8 for i in range (10):

9 verdi = verdi * vekstfaktor

10 innskudd = innskudd +1

11

12 print ( innskudd ) 59

1a= int ( input ( ’ Skriv inn et tall :’ ))

2b= int ( input ( ’ Skriv inn et tall til :’ ))

3

4 if (a+b )%2==0:

5 print ( ’ summen av tallene er et partall .’ )

6 else :

7 print ( ’ Summen av tallene er et oddetall .’ )

TILVURDERING

252 Løsninger

61

1 fastlønn = float ( input ( ’ Hva er den faste månedslønna :’ ))

2

3 timer_overtid = float ( input ( ’ Antall timer overtid :’ ))

4

5 timelønn = fastlønn /162.5

6 timelønn_overtid =1.5 * timelønn

7 overtidslønn = timelønn_overtid * timer_overtid

8 bruttolønn = fastlønn + overtidslønn

9 nettolønn = bruttolønn * 0.71

10

11

12 print (f ’ Ole får utbetalt { nettolønn } kroner i nettolønn ’ )

1 tall =3

2

3 teller =0

4

5 while tall <=1000000:

6 tall =2 * tall

7 teller = teller +1

8 print ( teller ) 62

2

3 def sorter ( liste ):

4 if len ( liste )<=1:

5 return liste

6 else :

7 første = liste [0]

8 venstre =[]

9 høyre =[]

10 for x in liste [1:]:

11 if x <= første :

12 venstre append (x)

13 else :

14 høyre . append (x)

15 return sorter ( venstre )+[ første ]+ sorter ( høyre )

16

17 sortert = sorter ( liste )

18

19 print ( sortert )

TILVURDERING

Løsninger 253
60
1 liste =[30,10,86,68,69,31,77,3,14,23,99,6,66,2,27,84,16, 81,99,31]

Stikkord

algoritme,114

argument,12

avrunding,19

bibliotek,13,83

break,37

CSV- l,136

def,57

derivasjon,156

desimaltall,15

diagram,124

divisor,70

eksternedata,136

ekstremalpunkt,144

elif,26

evigløkke,38

f-literal,19

faktorisering,71

feilmelding,79

fytskjema,25

for-løkke,40

funksjon,57

kallepå,57

graf,124,142

farger,134

koordinatakser,131

rutenett,133

utsnitt,130

if,24,90

import,13,83

innrykk,27

input,21

integrasjon,160

JupyterNotebook,8

kombinasjoner,98

konsoll,8,9

kvadratrot,13

likhetstegn,17

likninger,151

linjediagram,124

liste,51

append,51

løpegjennom,86

tomliste,51

løkke,31

avbryteløkke,37

Math,13

Mu,8

mønstre,118

nullpunkt,145

Pandas,136

primtall,66

print,10

Programiz,8

programmeringsmiljø,8

programmeringsspråk,8

PyCharm,8

Pythonista,8

Pyto,8

range,40,42

rekursiv,118

Replit,8

return,58

round,19

sannsynlighet,171,180

TILVURDERING

simulering,171

sjekkealle,102

sortere,105

spredningsdiagram,126

254 Stikkord

Spyder,8,126

stolpediagram,128

strenger,112

størstverdi,94

søke,109

tallmønstre,118

tallteori,29,64

tekstvindu,8

terningkast,171

Thonny,8,126

Trinket,8

turtle,46,49 type,21

variabel,16 verditabell,140

vilkår,24,90

while-løkke,31

økonomi,167

TILVURDERING

Stikkord 255

TILVURDERING

Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.