PROGRAMMERING I PYTHON

©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.
Henvendelserombokakanrettestil: LærebokforlagetDA post@larebokforlaget.no www.lærebokforlaget.no
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
Åprogrammerebetyråskriveinstruksjoner tilenPComhvasomskalskje.Dettelikner littpåålageenmatoppskrift.Duskriveralle instruksjonersomskaltilforatenannen personskalkunnelagedensammeretten. ViskriverinstruksjoneneiPythonogsiervi programmerer.
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
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
ISpyderertekstvinduettilvenstreogkonsollennedersttilhøyre. Øversttilhøyrekanduvelgemellomfaner,deriblantenoversiktover variablene.IThonnyertekstvinduetøverstogkonsollennederst.Til høyrekanduforeksempelvelgeåviseenoversiktovervariablene.
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.
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.
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
Regnut3 + 4 + 7 2 + 1.
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.
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: **
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:
Arealetavtrekantener7.5
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.
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.
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å.
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
Mengdemaling:96 : 6 = 16
Larsmåaltsåkjøpe16Lmaling.
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.
IPythonopprettervivariablervedåtilordneenverdivedhjelpav likhetstegnet.
1 svar =15+3
Nårvikjørerkodenovenfor,fårvariabelen«svar»verdien18.
::: EKSEMPEL1.8Mariaplanleggerentreningsøkt.Hunskalvarmeopp18minutter. Deretterskalhunha5 × 4minintervallermed2minutterspause mellomhvertintervall.Tilsluttharhunnedjogg10minutter. Hvorlangtidvarertreningsøkta?
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)
Nårvikjørerkodenovenforblirførstvariabelen«svar»opprettetmed verdien15.Deretterblirverdiensatttildenverdienvariabelenhadde tidligere,addertmed5.Resultatetnårvikjørerprogrammetblir20.
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.
Nårvibrukerprogrammeringtilåløsematematikkoppgaveravsluttervi gjerneprogrammetmedåskriveutverdienavenvariabelsammenmed enforklarendetekst.Dettekanvigjørepåferemåter.
Enmuligheteråprintetekstenogvariabelenisammekommando,atskilt medkomma:
1 svar =15
2 print('Svaret er', svar)
Nårvikjørerdetteprogrammet,fårvi«Svareter15»ikonsollen.
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.
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»
1.8
Lagetprogramhvordusettervariabelen «svar»til28ogskriverutverdienavvariabelenmedensvarsetning.Resultatetav programmetskalbli:
1.9
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
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.
Pythonoppfattertallogtekstpåforskjelligmåte.Vikanseeteksempeli detteprogrammet:
1 a =13
2 print(2*a)
3 b= 'matematikk'
4 print(2*b)
Nårvikjørerprogrammet,fårvidette:
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:')
3 # Konverterer til float
4 tall = float(tall)
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.
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
Lagetprogramsomberomhøydeog grunnlinjeientrekantogsvarermed arealetavtrekanten.
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.
Ienif-testkanvibrukedissetegnene:
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.
tall tall == 8 janei tall er noe annet enn 8 tall er 8
IPythonbrukervi«=» nårvitilordneren verditilenvariabel og«==»foråsjekke omtoutsagnerlike.
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.
DetosannhetsverdienesannogusannheteriPythonhenholdsvis True og False.Alletesterblirevaluerttilenten True eller False
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.
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:
5 print('Tallet er ikke mindre enn10.')
6 print('Dette er sistelinje.')
Denøverstekoden,uteninnrykk,girdetteresultatet:
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')
Istedetforåsendemeldingogspilleavenlyd,brukerdette programmet print.
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.
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
19erikkedeleligmed3
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.
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.
Enløkkeerenkodebitsomgjøratdukangjentaenoppgavefere gangerutenåmåtteskrivedensammekodenigjenogigjen.IPython harvitoløkker, while-løkkerog for-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:
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»
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
slutt
Allekodelinjersomskaltilhøreløkkamåhasammeinnrykketterlinja med while.Førstelinjesomikkeerrykketinnfravenstremarkererat løkkaerslutt.
En while-løkkeegnerseggodttilålagetallmønstre.
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
36122448961923847681536
Inesteeksempelbrukervienegenvariabeltilåsummereopptallenei mønsteret.
a)Lagetprogramsomskriverutalleoddetalleneunder100.
b) Lagetprogramsomsummereralleoddetalleneunder100.
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()
9 print(f'Summen av tallene er {summen}.')
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.
Viavbryteren while-løkkevedåsørgeforattesteniførstelinjeblir usann.Noengangerkandetværenyttigmedenegenvariabelsombare hardettesomoppgave.
Skrivetprogramsomberomettogetttallogsummerertallene.
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
Skrivinnettall:q
Summenavtalleneer6.0.
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.
Dersomviiløpetavløkkaikkesørgerforattesteniførstelinjeiløkka blirusann,villøkkaaldristoppe.Vikallerdetteenevigløkke.Vimå damanueltavbryteprogrammetmedprogrammeringsmiljøets stoppknapp.
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.
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
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
Lagetprogramsomskriverutenhilsen ogsåspøromvivilsehilsenenengang til.Programmetskalfortsetteåskriveut hilsenenhelttilvisvarernei.
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.
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
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
3 for i in range(10):
4 tall = tall +1
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.
Ieksempeletunderleggerviogsåtilensteglengdepå4somdettredje argumentet:
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.
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:
7063564942352821147
Ålageallekombinasjoneravheltalligekoordinater (x, y) mellom0og10
ertidkrevendeforhånd.IPythongjørvidetganskeenkelt–vibrukeren løkkeinnienløkke.
Skrivoppalleheltalligekoordinater (x, y) mellom0og5.
LØSNING
1 for x in range(6):
2 for y in range(6):
3 print(f'({x}, {y})', end='')
1.35
LagenPython-kodesomskriverutteksten «ViprogrammereriPython.»10ganger.
1.36
Lagetprogramsomskriverutseksgangen. Løsoppgavenpåsåmangeulikemåterdu klarer.
1.37
Lagetprogramsomgirdetteresultatet:
1.38
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.
Detkangodthende gurenkommeropp ietegetvindupå maskinendin.
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:
b) Løkkaskalnåkjøretreganger.Vinkelenblir120grader.
1 import turtle as t
2 for i in range(3):
3 t.forward(50)
4 t.right(120)
Nårvikjørerprogrammetfårvitegnetentrekant:
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:
4 t.forward(10)
5 t.right(5)
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:
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.
1.43
Skrivetprogramsomtegnerenfemkant. Prøvdegframforå nneuthvormange graderdumåsnumothøyrehvergangfor atduskalkommetilbaketilpunktetderdu startet.
1.44
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
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
Lagetprogramsomoppretterenlistemedtallene1–10.
LØSNING
Førstopprettervientomliste.Deretterbrukervienløkketilålegge ettogetttallfratallene1–10innilista.
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 =[]
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]
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:
NielsHenrik,Thoralf,Sophus,Vilhelm,Caspar, Viggo,
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.
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']
['hodekål','spisskål','sukkerspinn', 'blomkål','rosenkål']
1.47
Kodende nererenliste.
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.
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.
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.
Vitarmedeteksempelhvorvibrukerenfunksjontilålageenverditabell.
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.
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
b) Vi erner print-kommandoenfralinje11.Istedetopprettervi tolister«xverdier»og«yverdier»(linje7–8),somvisålegger xog y-verdieneinni,selinje14–15.
Å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
Skrivetprogramsomtegnerfølgende gur.
Avstandenmellomhvertkvadraterliksidelengdenavkvadratettil venstre.Kvadratethelttilvenstreharsidelengde10.Nestekvadrat harsidelengde20,deretter30ogsåvidere.
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)
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:"))
8 print(delelig(n))
Hvisviskriverinn27fårvi:
1.52
Skrivinnetheltall:27
27erikkedeleligmed4eller7
Hvisviskriverinn28fårvi:
Skrivinnetheltall:28 28erdeleligmed4eller7
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
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
31323334353637383940
41424344454647484950
51525354555657585960
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.
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.
1
Primtalleneerdeheletallenestørreenn1sombareerdeleligemed1 ellersegselv.Deførsteprimtalleneer
,
Viskallageetprogramsomundersøkeromettalleretprimtall.Damåvi undersøkealletalllavereenntallet,menstørreennellerlik2.
n= int(input('Skriv
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')
Detblirlettereåbrukekodendersomvi«pakkerdeninn»somen funksjon.
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.
a)Vileggerinnentestistartenavkoden,slikatfunksjonen returnerer False dersom n ≤ 1:
2 if n <=1: 3 return False
b) Siden2erdetminsteprimtallet,trengerviikkesjekketallstørre enn n 2 .Vikunnederforla range gåfra2til n 2 .Vimåimidlertid
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')
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
1234612
Summenavdivisoreneer28
Å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.
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
LagenkodeiPythonsomskriverutdenlille gangetabellen.
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
Rektangeltalleneframkommerveddisse gurene:
Lagetprogramsomskriveruthvormange rkanterdeterihver guridetiførste gurene.
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
715316312725551110232047
Nårvimåbrukeferetidligereleddforåregneutnesteleddientallfølge, måvibrukeenekstravariabeltilåhuskeforrigetall.
::: EKSEMPEL1.42
Fibonacci-talleneertallene
LagetprogramsomskriverutdetiførsteFibonacci-tallene.
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
Fraktalerergeometriske gurersomserlikeutentenvizoomerinneller ut.Mangefraktalerinneholderenganskeenkelde nisjon,menvirker ganskekomplisertenårvilardatamaskinenbrukede nisjonenfere ganger.
::: EKSEMPEL1.43
Dendrageliknendefraktalen«JurassicPark»lagesetterfølgende oppskrift:
a)Startmeden«H».
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.
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)
1.62
Lagetprogramsomskriverutkubikktallene, altså
1.63
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.
Deterirriterendeåtrykkepå«Run»,forsååfåenfeilmelding.Men feilmeldingeneertilstorhjelp,omvibareforstårhvordandevirker.
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:
print(f'{n}erikkeetprimtall)
SyntaxError:EOLwhilescanningstringliteral
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.
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
Innrykketskalværedetsammeforallelinjerisamme if-test.Detbetyr at break skalhasammeinnrykksomlinjaover.
Ettellerferemellomromistartenavenlinjesomikkeskalhainnrykkgir ogsåenIndentationError:
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.
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».
Hvisviikkeharde nertenvariabelførdenbrukes,fårvien«NameError».
Ikodennedenforerdetenskrivefeil:
TypeError:'int'objectisnotcallable
1 tall =17
2 print(tal)
Detgirdennefeilmeldingen:
print(tal)
NameError:name'tal'isnotdefined
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
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.
Detvarierer fraprogramtil programhvordan viinstallerernye biblioteker.Mange programmerbruker enpakkehåndterer fraPython,somkalles pip.
Åtenkealgoritmiskhandleromåtilnærme segetproblempåensystematiskmåteog åkunnevurderehvilkestegsomskaltilfor åløseetproblem.Dethandleromåbryte problemetnedimindredelproblemerfor sååkunnelagefremgangsmåterforåløse problemet.
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
6 7 print(summen)
Nårvikjørerkoden,fårvi54tilsvar.
Teknikkenvibrukerilinjene3–5ieksempeletkansammenfattesslik:Vi oppretterenvariabelsomtilsluttskalinneholdesummen.Hvergang løkkakjører,oppdaterervisummenmeddenverdienvierkommettili lista.Detteerengenerellteknikkvikanbrukeimangesammenhenger.
Det nneseninnebygdkommandosomgirakkuratdetsamme resultatet,nemlig sum.Idettekapittelettrenervipåalgoritmisktenkning ogbrukerderforminstmuligavdisseinnebygdekommandoene.Nårvi ellersprogrammerer,brukervidetvikanavkommandoer.
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
1123581321
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
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.
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
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.
Vitarutgangspunktienlistemedtretall.Hvordanvelgerviutdetstørste tallet?Enmuligheteråsammenlikneallekombinasjoneravtotallilista:
Laossbrukesammetankegangforå nnedetmidterstetallet.Deter mangemuligheterunderveis,ogdetkangjøredetletterehvisviførst lageretfytskjema:
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]
Brukfytskjemaetovenfortilålageetprogramsomavgjørhvem somharvunnetienomgangmedstein–saks–papir.Brukerenskal tasteinnhvaspillerneharvalgt.
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.')
2.6
Totallergittsomvariablene«n»og«m». Skrivetprogramsomavgjørhvilkettall somerstørst.
2.7
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.
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.
HvordanoversettervidettetilPython?Ibeskrivelsenovenforser viatviheletidenhuskerhvilkettallsomtilnåerstørst.IPython tilsvarerdetteåhaenegenvariabelhvorvilagrerdetforeløpigstørste tallet.Såsammenliknervinesteverdimeddette,ogbytterutverdien avvariabelennårvi nneretstørretall.Vilageretfytskjemafor programmet:
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.
Nårviskal nnestørsteellerminsteelementienlisteogdettilhørende elementetienannenliste,brukerviplassnummeret,indeksen,som ovenforpåside87.
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.
2.9
a)Beskrivenalgoritmesom nnerdet størstetalletienliste.
b) Skrivenkodesombrukerdennealgoritmen.
c)Utvidkodenslikatprogrammetogså nnerdetminstetallet.
2.10
Enverditabellerlagretitolister:
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.
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
Hver gurtilsvarersituasjonentidligere,somga x1, x2og x3.Vimånå lagetreslike gurer.Dettekanviogsågjøremeden for-løkkesomgår treganger.Viplassererdeneneløkkainnidenandre:
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.
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
kneippmedsyltetøy
kneippmedost
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):
3 if 2*x ‑5*y ==10:
4 print(f'({x}, {y})')
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)).
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:
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:
5 if x %3!=0:
6 delelig = False
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.
2.18
Skrivetprogramsomavgjøromalletallenei listaundererdeleligmedsju:
2.19
Skrivetprogramsomsjekkeromalletallene eroddetall:
2.20
Markusharenlistemedtall.Hanregner medatavstandenpåtallinjafra10tilhvert tallermindreenn5.Skrivetprogramsom undersøkerdette.Talleneer:
Åprogrammeresorteringerengodøvelseialgoritmisktenkning.Deter mangeulikemåteråsorterepå.Herfølgernoensorteringsalgoritmer.
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.
Iprogrammetfårvigjentattegangerbrukforåbytteplasspåtotall ilista.Vilagerførstenfunksjonsomgjørdette.
Vibrukeren for-løkketilåsammenliknetoogtotallilista.
Lengdenavlistaer len(liste).Daerantallparsomskal sammenliknes len(liste)‑1
Vibrukeren while-løkketilågjenta for-løkkafererunder.Hver
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)
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.
Vilagerførstenegenfunksjonsombytterplasspåtoelementeri enliste.
Vilageren for-løkkesomsammenliknerogbytterplassfraslutt
tilstartpåalleelementeneienliste.Denneløkkaleggerviinnien annen for-løkke,somtelleroppfrastarttilsluttilista.
2.21
Sorterlistaundervedåbrukeboblesortering.
2.22
Lagenlistemed10tallivilkårligrekkefølge. Lagetprogramsomsortererlistamed skyttelsortering.
2.23
Innstikksorteringeråsorterepådenne måten:
Startmedførstetallilista.
Nestetallleggerdupåriktigplass–til høyreellertilvenstre–iforholdtildet første.
Dettredjetalletleggerdupåriktigplass. Lagplassilistadersomdetskalinn mellomtotall.
Fortsettsliktilduharsortertalle. Lagetprogramsomsorterermedinnstikksortering.
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.
7.Slikfortsetterdettilriktiglapperfunnet.
8.Tilslutttellerlederenhvormangeeleverdeterframtilden sombleståendeigjen.Antalleterplassnummeret.
Algoritmeniaktivitetenovenforsammenfattervislik:
Sammenliknetalletduleterettermeddetmidterstetalletilista. Avgjørommåletliggerivenstreellerhøyrehalvdelavlista.
Letviderepåsammemåteidenhalvdelenmåletbe nnerseg:Finn detmidterstetalletihalvdelenogavgjørihvilkendelmåletligger. Fortsetttildu nnermålet.
Kodenieksempeletnedenforbrukerdennealgoritmen.
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
5
6
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.
a)Beskrivenalgoritmesom nnerettall iensortertlistevedåferegangerdele listaitreogforkastededelenesom ikkeinneholdermålet.
b) Brukalgoritmentilåskriveetprogram.
2.25
Tautgangspunktikodenieksempelet påside110over.Skrivomkodentilen funksjonsomtarinnenlisteogettallog returnererindeksentilførsteforekomstav talletilista.
Kommandoen
s.upper() gjør omstrengen s til storebokstaver. s.strip() erner mellomromistarten ogsluttenav s.
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.
:::
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'
2 for x in streng:
3 print(x, end='')
Nårvikjørerprogrammet,fårvi«programmering»tilsvar.
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.
2.28
a)Lekleken.
b) Lagetprogramsomskriverutenfasit.
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.
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
i + 1etprimtall, i + 1fordiPythontellerfra0.Vistarterpåandre forekomst(2i + 1)ogstrykermedmellomrom i + 1irestenavlista, selinje9.Tilsluttskriverviutprimtallene.
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
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.
Skrivetprogramsombrukerdennealgoritmentilåregneutkvadratrot.
Medprogrammeringkanviløse matematiskeproblemer.Vedågjøre numeriskeberegningerkanviogsåløsede problemenesomikkelarsegløseanalytisk. Itilleggkanvisimuleresituasjonerfra virkelighetenoggjøreberegningerknyttet tilsannsynlighetogstatistikk.
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
Nårvikjørerkodenfårvi:
791113151719212325
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.
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:
Vitrengerminst23leddforatsummenskalblimer enn5000.Daersummen5428.
Kristoferharlaget re gureravklossersomfølgeretmønster.Han ønskeråfortsetteålagestørreogstørre gureretterdetsamme mønsteret.
a)Hvormangeklossertrengerhanforålage gurnummer10?
Kristoferhar3000klosserogønskerålagesåmange gurersom mulig.
b) Hvormange gurerkanhanlage?Hverklosskanbarebrukesi én gur.
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='')
8 b=b+a
9 a=a +3
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.
3.1
Figureneoverviserklossersomfølgeret mønster.
a)Hvormangeklossertrengerviforå
lage gurnummer12?
b) Hvormange gurerkanvilagetil sammenhvisvihar6000klosserog hverklossbarekanbrukesién gur?
3.2
Skrivetprogramsom nnerleddnummer
20itallfølgenunder:
VibrukerbiblioteketMatplotlibtilåtegnegraferogdiagrammer.Ialle koderimportererviførstbiblioteket:
1 import matplotlib.pyplot as plt
Deretterbrukerviblantannet plt.plot og plt.bar tilåtegne.
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
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()
Inoenprogrammer, foreksempelSpyder, kanviutelate kommandoen plt.show(),mens iandreprogrammer, foreksempelThonny, mådenbrukes.
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.
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:
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.
VerdienavenaksjeietvaksineselskappåOsloBørsnoendageri maiergittitabellennedenfor:
Lagetdiagrammedpunkter,stolperoglinjersomviserutviklingen iaksjekursen.
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()
Pythongirossiutgangspunktetenenkelgra skframstilling.Vikangjøre endeltilpasninger,slikatvifårdetutseendetviønsker.
Vibestemmerutsnittetvedåjusteregrensenepåaksene.Dettegjørvi med
:
9
Meddennekodenfårvi x-verdiermellom 5og20og y-verdiermellom
10og15:
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:
Nårvitegnerforhåndellermedengraftegner,larvigjernekoordinatakseneskjæregjennomorigo.IPythongjørvidettevedålagrede re kantenevenstre,høyre,toppogbunnivariabelen akser.Vifyttervenstre ognedrekanttilorigo:
1 akser.spines['bottom'].set_position('zero')
2 akser.spines['left'].set_position('zero')
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:
Alternativtgårdetanåtegneenhorisontalogenvertikallinjegjennom
origo:
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:
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
6 plt.plot(xverdier, yverdier, 'o')
7 plt.grid()
8 plt.show()
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:
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:
x 0 4 5 10 14 16 20
y 3 8 2 5 16 14 15
a)Lagetlinjediagramoververditabellen.
b) Lagetspredningsdiagramover x og y.
Det nnesferemåter åleseinn lerfra eksternedatakilder på.Vibrukerher
Pandas.Alternativerer foreksempelNumPy sin loadtxt() ellerdeninnebygde withopen()metoden.
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?
Nedenforserdustartenavetdatasettsominneholdermålingerav vanndybdenihavetiVestfold.
#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.
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:
ViåpneralltidCSV- leriPython-programmetelleriettekstbehandlingsprogram.Noenregnearkprogram,somforeksempelExcel,kanavog tilødelegge la.Detteskjerdersomviharautomatisklagringpåslått. Dersomdetteskjer,måviskafetilveieennykopiavdatasettet.
3.7
BrukCSV- lanorges-befolkning.csvtilå lageetlinjediagramforantallinnbyggerei norgemellom1741og2023.
3.8
CSV- lalonn.csvvisergjennomsnittlig årslønniNorgemellom2015og2022. Fremstilldataeneiet
spredningsdiagram
linjediagram
søylediagram
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.
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.
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:
Detkanværeengodregelåsamlestartverdieritoppenavkoden.Det gjørdetenklerenårvisenerevilendrestartverdiene.Kodennedenforer enomskrivningavkodensomlagerverditabellenovenfor.Kodengjør akkuratdetsamme,menviharopprettetstartverdiene xstart, xslutt og xsteg itoppenavkoden.
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.
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}')
14 x=x+ xsteg
15 y=f(x)
Kodenvibruktetilålageverditabellforenfunksjonkanviendretilå tegnegrafentilfunksjonen:
Vilagrerverditabellenitolister,enmed x-verdierogenmed y-verdier. Verdienelagrervimedkommandoen append.
VilageretlinjediagramavdetolistenemedMatplotlib:
plt.plot(xverdier,yverdier)
Joferepunkterviharmediverditabellen,joglattereblirkurven.
Eksempeletnedenfortegnergrafentilenfunksjon.
La f(x) værefunksjonengittved
f(x)= x2 3x + 1
Tegngrafentilfunksjonenfor x mellom 1og5.
LØSNING
Vitarutgangspunktikodeneforverditabellogforlinjediagram. Steglengdenvibrukerer0,01,slikatdetblirkortavstandmellom hvertpunktoggrafenblirglattere.
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()
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.
Nårvikjørerprogrammet,fårvi: Toppunkteter(1.0010,4.0000).
Etnullpunkttilengraferetpunktdergrafenskjærer x-aksen.Detkalles etnullpunktfordi y-verdienipunkteternull.
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.
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.
Vitrengeraltsåenmåteåavgjøreomtopunkterliggerpåsammeside ellerpåmotsattsideav x-aksen.Deterdetsammesomåavgjøreom yverdieneidetopunkteneharsammefortegnellermotsattfortegn.
Produktetavtotallmedsammefortegnerpositivt,mensproduktetavto tallmeduliktfortegnernegativt.Detgirossideentildetteprogrammet:
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
VioversetteralgoritmentilPython:
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.
Er f(a) f(a + d) > 0?Dafytterviossettstegtilhøyre.
Er f(a) f(a + d) < 0?Dadelervi d på10ogfortsetterdervier.
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:
1.4142135623
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:
Ogsåhertrengervietmålpånårviskalstoppe.Vivelgeråstoppenår avstandenmellom a og b ertilstrekkeligliten,altsåmindreennetlitetall
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.
Likningermedheletallsomløsninger
Åløseenlikningvilsiå nnealledeverdieneav x somgjørlikningen sann,altsåatvenstreoghøyresideerlike.Herserduenførstegradslikning:
2x 4 = 12
Førstegradslikningerharbareénmuligløsning.Hvisvigreierå nneden x-verdiensomoppfyllerlikningen,kanvisiatviharløstlikningen.
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.
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)
Nårvikjørerprogrammetfårviat x = 1og x = 101erløsninger. Likningenkanikkehamerenntoløsningerogerderforløst.
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
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
Detbetyratløsningener x = 12og y = 4.
Åløsedennelikningenerdetsammesomå nnenullpunktenetil funksjonen f(x)= x2
3.Detvetviheldigvishvordanvigjør,seside 149.Dettegirossengenerellmåteåløselikningerpå:
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:
Løsning:x=2.2360679
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
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.
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.
Nåkanvikombineredettemedkodenvibruktetilåtegnegrafentilen funksjon.Dafårvitegnetgrafentil f (x).
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)
26 plt.plot(xverdier, derivertverdier)
27 plt.show()
Nårvikjørerkoden,fårvidennegrafen:
Grafenviserparabelen f(x) sammenmeddenlineærefunksjonen f (x).
Denderiverteskifterfortegniekstremalpunktene.Dettekanvibruketil å nneetekstremalpunkt:Viregnerutdenderiverteihvertpunkt,og avslutternårdenderiverteskifterfortegn.
:::
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
8 delta_x =0.0000001
9 derivert =(f(x+ delta_x)‑ f(x))/delta_x
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
11 minstderivert = derivert
12 tilhørendex =x
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).
Utgangspunktetforåberegneintegralererønsketomåberegneareal avfaterbegrensetavkrummekurver.Viserherpåhvordanviberegner arealetavgrensetavenfunksjonsgraf,tovertikalelinjerog x-aksen,altså detmarkerteområdetpå gurentilvenstre.
Detmarkerteområdetpå gurentilhøyreersummenavrektanglene undergrafen.Vikallersummenavrektanglenefortrappesummen,siden rektangleneserutsomentrapp.Vikallerdetenvenstresidigtrappesum, sidenhøydenihvertrektangelerbestemtavfunksjonverdienivenstre kantavrektangelet.
Nårgrafenvokser,vildenvenstresidigetrappesummenblilittmindre enndetarealetviønskeråberegne.Nårgrafensynker,blirdenvenstre-
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
5 a =1
6 b =11
7 delta_x =(b‑a)/N
Trappesummenblirnåsummenavdissearealene.Vileggertilenegen variabelsomvilagrersummeniunderveisiløkka:
Hvisvinåøkerantallrektangleritrappesummen,kanvisiatkoden beregnerarealetundergrafentil f fra a til b numerisk,altså nner programmetennumerisktilnærmingsverdiav b a f(x) dx.
Finnennumerisktilnærmingsverdiforarealetundergrafentil f(x)= x2 fra x = 1til x = 1.
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å
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:
13 areal =(f(x)+ f(x+ delta_x))/2*delta_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.
3.16
Enfunksjon f ergittved
3.17
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?
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?
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
3307500.0
3472875.0
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.
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.
a)HvormyeharIdapåkontoetteretårhvishunsparer1800kr permåned?
b) HvormyemåIdasparehvermånedforåha50000krpåkonto etteretår?
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
10 print(f'Sparebeløpet må være {sparebeløp:.2f} kr. Daer saldo {saldo:.2f} kr.')
3.20
Nårvikjørerkoden,fårvi:
Sparebeløpetmåvære2392.00kr.Daersaldo 50001.93kr.
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.
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.
a)Vilageren for-løkkesomgår100ganger.Hvergangløkkagår, skriverviutresultatettilkonsollen:
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:
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.
a)Vitarutgangspunktetidetsammeprogrammetsomidet forrigeeksempletogopprettervariabelen terning2innei for-løkka.Ilinje9leggervisummenavantalløynepådeto terningeneinnivariabelen sum_øyne.Variabelenoverløkka somtelleroppharvikalt summen_6.Verdienavdenneøkervi medénhvergangsummenavantalløyneerseks. 1
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.
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.
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)
4 print(må_vaske)
KonsollenviseratdeterIvarsommåvaskedennegangen.
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å.
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']
Ettersomtrekkeneerutentilbakelegging,måingenvaske kjøkkenetmerennéngang.
Enkjentproblemstillingimatematikkeråtrekkekulermedforskjellig fargeutentilbakelegging.
::: EKSEMPEL3.26Ienkrukkeliggertregrønneogtoblåkuler.Trekktokulerfra krukkautentilbakeleggingogskrivresultatettilskjerm.
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.
Ieksempletovertrakkvienblåogengrønnkule.Hvoroftekommervitil åtrekkeenkuleavhverfarge?
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:
Dettepassergodtmedresultatetfrasimuleringen.
Vikanstokkeenlistemedkommandoen random.shuffle(). Kommandoenenlagerennylistederelementeneerstokketitilfeldig rekkefølge.
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.
Detoførste elementeneilista frekvenser vilforbli null,sidensummenav antalløyneikkekan værenullelleren.
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
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:
Søylediagrammetviserfordelingentilfrekvensenforhvertavutfallene, menforåkunnetilnærmeosssannsynlighetsfordelingentrenger viderelativefrekvensene.Dissekanvi nnevedådelehveravfrekvenseneilista frekvenser medtotaltantallkastogleggedemilista relative frekvenser:
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.
Ilinje20–22brukervien for-løkketilåkastefemterninger10000 ganger.Forhvertkastøkervifrekvensenmedénpådentilhørende plassenilista frekvenser.Hvisterningenforeksempelviser20øyne, økervifrekvensenmedénpåplassnummer20.
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')
32 plt.ylabel('Relativ frekvens')
33 plt.show()
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]
Vikasterkronogmynt50ganger.Hvordankanvi nneentilnærmingtil sannsynlighetsfordelingentilantallkron?Dennefordelingenkallervii matematikkenforbinomiskfordeling.
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.
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:
22 rf =f/N
23 relative_frekvenser.append(rf)
Tilslutttegnervietsøylediagramsomviserfordelingenavderelativefrekvenseneforantallkron.Detteerdaentilnærmingtilsøylediagrammet somvisersannsynlighetsfordelingen.Helekodenserslikut:
Resultatetnårvikjørerkodenkanblislik:
Erdetnoemønsterirekkefølgenpåkronogmyntnårvikasterenmynt mangeganger?Laossundersøkedettenærmere.
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
20 plt.plot(xverdier, yverdier)
21 plt.show()
Nårvikjørerkoden,fårvidetteresultatet:
Utifragrafenserdetikkeuttilatdeternoemønsterirekkefølgen nårvikasterkronogmynt.Vifårulikgrafhvergangvikjører programmet.Deterikkeutengrunnatdennesimuleringenkalles «virrevandring».
3.23
Etlykkehjulmed8likestorefelterernummerertfraogmed1tilogmed8.Skriv etprogramsom nnerentilnærmingtil sannsynlighetenforatlykkehjuletstopper på5.
3.24
Skrivetprogramsom nnerentilnærming tilsannsynlighetenforatsummenavantall øynenårvikasteretkastmedtrevanlige terningereråtte.
3.25
(EksamenS12022V)
Enelevharskrevetdenneprogramkoden:
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.
Foråbliskikkeliggodtilåprogrammere, erdettreningsomgjelder.
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
Det nnesmangekombinasjonerav x og y somoppfyllerlikningen.
Lagetprogramsom nnerallekombinasjoner avheletall x og y mellom 10og10som oppfyllerlikningen.
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.
b) Gjørkodenomtilenfunksjonder programmetberenbrukerometheltall. Dettetalletskalværeargumentet ifunksjonensomskalreturnerede sammesvarsetningenesomduhaddei programmetioppgavea).
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.
b) Skrivenkodebasertpåalgoritmendu beskrevioppgavea).Inputskalvære koordinatene a, b, c, d, e og f.Outputskal væreénavfølgendetekster: Punktenedannerenrettvinklet trekant.
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?
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.
Halvorønskeråkunneregneuthvormange årdettarførbeløpethanharpåkontonåren vissstørrelse K.
c)LagetprogramHalvorkanbruke. Inputskalværerentefot,innskuddog K. Outputskalværeantallårdetgårfør
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
3 if vekstfaktor >1:
4 prosent = ##
5 else :
6 prosent = ##
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
9x=x +1
HvaønskerSaraå nneut?
Forklarhvasomskjernårprogrammetkjøres.
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.
52 Firepunkterietkoordinatystemergitt.Skriv etprogramsomavgjøromde repunktene utgjøretkvadrat.
53 Torektanglerliggerietkoodinatsystem.Alle sidekanteneibeggerektangleneerparallelle medenkoordinatakse.
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:
Tautgangspunktiførsteelement. Løpgjennomlistaogleggdesomerstørre idenhøyredelenogrestenidenvenstre. Gjentasorteringenpådedelenedudahar. Settallebitenesammenigjen. Lagetprogramsomsorterermed kvikksortering.
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 }. ’ )
1 tall =45
2 tall = tall /2
3 print ( tall )
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
3 radius = float ( input ( ’ radius =’ ))
4 areal = math pi * radius ** 2
5
6 print (f ’ Arealet av en sirkel med radius { radius } er { areal }. ’ )
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 :
9 print ( ’ Minst ett av tallene er null .’ )
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 .’ )
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
2
3 while tall <5000:
4 print ( tall , end= ’’ )
5 tall = tall *2
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
9 print ( teller )
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
4 print ( summen )
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.
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 )
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
8 print ( differanser ([1,4,9,16,25,36,49]))
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)
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
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} ’ )
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
8 tall2 = tall1 + tall2
9 tall1 = minne
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
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 )
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
19 spiller1 =0
20 spiller2 =0
21 uavgjort =0
22 fortsett = True
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 )
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
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:
[’af’,’ag’,’ah’,’ai’,’bf’,’bg’,’bh’,’bi’,’cf’,’cg’,’ch’,’ci’, ’df’,’dg’,’dh’,’di’,’ef’,’eg’,’eh’,’ei’,’ff’,’fg’,’fh’,’fi’]
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]
2 delelig = True
3 for tall in tallene :
4 if tall %7!=0:
5 delelig = False
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
fortsett = True
while fortsett == True :
byttet = False
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)
2 mål =9
start =0 5 slutt = len ( liste )
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 :
start = midtpunkt 17 midtpunkt =( start + slutt )//2 18 return svar
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
6 svar = True
7 for i in range ( lengde −1):
8 if int ( streng [i ])>= int ( streng [i +1]):
9 svar = False
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
Nårvikjørerkoden,fårvidetiførsteleddeneidenmidterstetallfølgen: 7111519232731353943
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
4 for i in range (n −1):
5b=b+a
6a=a +4
7 return b
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 ()
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]
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
3
4 xstart =−10
5 xslutt =10
6 xsteg =0.5
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 ))
1 def f(x ):
2 return 2 * x ** 3+ x ** 2− x
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
9 10 while b−a>d: 11 if f(m)==0: 12 break
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
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)
1 saldo =40000
2 sparebeløp =3000
3 rentesats =0.27
4 vekstfaktor =1+ rentesats /100
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
stopper på fem er tilnærmet
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.
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
15 print (f ’ Sannsynligheten for å vinne er { relativ_frekvens }. ’ )
Nårvikjørerprogrammet,kanviforeksempelfå«Sannsynlighetforåvinneer0.55553.».Detbetyrat sannsynlighetenforåvinneeromtrent0,56.
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.
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
2 dragtid =4
3 pausetid =2
4 total_dragtid =0
5 totaltid =0
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
4 else :
5 return −n
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):
4 print (f ’ ({ i }, {j }) ’ , end= ’’ )
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 :’ ))
3 tall3 = float ( input ( ’ Skriv inn et tall :’ )) 4
5 if tall1 == tall2 == tall3 :
6 print ( ’ Tallene er like store .’ )
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
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
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 }. ’ )
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 }. ’ )
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
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 .’ )
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.
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å
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):
8 print (f ’ Saldo 1. januar { årstall }: { saldo :.2 f}’ )
9 print (f ’ Innskudd :{ innskudd }’ )
10 # Foretar nytt innskudd .
11 saldo += innskudd
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.
b)
1 antall =10
2
3 summen =0
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.
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
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
3 if n%3==0:
4 print ( ’ Tallet er delelig med 3. ’ )
5 else :
6 print ( ’ Tallet er ikke delelig med 3. ’ )
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]
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 }) ’ )
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
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 }. ’ )
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
7E =[3,2]
8F =[7,2]
9G =[7,8]
10H =[3,8]
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 }. ’ )
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 .’ )
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 )
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
simulering,171
sjekkealle,102
sortere,105
spredningsdiagram,126
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