Du er ikke logget inn. Så lenge du ikke er logget inn går du glipp av muligheten for å holde styr på din egen progresjon.

Valgte tags:

profag:u 20-21

Filtrering:

1.1.1: Summering av tall

Lag et program som summerer to tall (du velger tallene selv)

Et program som summerer to tall kan være så enkelt som dette:

2+3

For å skrive ut resultatet i kommandovinduet må du bruke printkommando:

print(2+3)

Alternativt:

x = 2+3
print(x)

1.1.2: Variabler

  1. Hva er en variabel? Gi eksempler.

  2. Hva er variablene i uttrykket y = 2x + 1? Hva med i uttrykket a = b - 2c + 3?

  3. Lag et program som lagrer to tall i variabler, og skriver ut produktet av tallene som er lagret i variablene dine.

Oppgave 1
En variabel i matematikken er et symbol som representerer et vilkårlig tall. I programmering kan en variabel være et tall, men også en tekststreng.

Oppgave 2
y, x, a, b og c er variabler.

Oppgave 3

a = 2       #definerer først to variabler
b = 3

print(a*b)  #skriver ut produktet slik:
            #alternativt kan du lagre produktet i en ny variabel, 
             og  printe den variabelen.

1.1.3: Mer variabler

1.Vi har følgende kode:

a = 10
a = a + 5

Hva blir a?

2.Vi har nå følgende kode:

a = 1
b = 2
a = a + 1
c = a + b

Hva blir a og c?

3.Hvilke forskjeller mellom matematiske variabler og programmeringsvariabler kan du beskrive ut fra oppgavene ovenfor? Hvilke av operasjonene ovenfor gir mening matematisk, og hvilke gir ikke? Diskuter.

Oppgave 1
a blir i dette tilfellet 15. Vi definerer først a = 10, deretter sier vi at a = a + 5. Det som skjer da er at a blir omdefinert, vi får en ny a som er summen av den gamle a pluss 5. Altså:

a = 10
a = a + 5 = 10 + 5 = 15.

Oppgave 2
Vi får

    a = 1
    b = 2 
omdefinerer  a
    a = a + 1 = 1 + 1 = 2
og får
    c = a + b = 2 + 2 = 4

1.1.4: Bytte innhold i variabler

Du har to variabler a og b som begge inneholder verdier. Skriv et program som flytter innholdet i a til b, og innholdet i b til a.

For å flytte verdien fra a til b, og b til a, må vi innføre en tredje variabel c.

a = 3
b = 4

c = b   #lagrer verdien til b i c
b = a   #setter b = a
a = c   #setter a = c som er lik den originale b

Legg merke til at for å bytte verdien av to variable må vi innføre en tredje variabel.

1.1.5: Regnerekkefølge

  1. Regn ut følgende uttrykk for hånd og i Python:
    alt text

  2. Hva er forskjellen på uttrykk 1 og 2?

  3. Lag en oppskrift over hvilke regneoperasjoner som utføres i hvilken rekkefølge.

  4. Lag et program som regner ut alt text. Var det noe du måtte passe spesielt på i koden din?

Oppgave 1
pythonkode:

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

Det er viktig å passe på at det alltid står gangetegn mellom tall og parenteser (generelt må det alltid være regneoperatorer mellom tegn, tall og uttrykk), som i uttrykk 4 og 6.

Oppgave 2
I uttrykk 1 ganges det først og så legges det sammen: 1 + 2*3 = 1+6 = 7
I uttrykk 2 legges det sammen først og så ganges det: (1+2)*3 = 3+3 = 9

Oppgave 3
Regnerekkefølgen i Python er lik som på vanlige lommeregnere:
Potenser -> Divisjon -> Multiplikasjon -> Addisjon og subtraksjon

Oppgave 4
pythonkode:

print(-3 + (1-9)/4 + 4/(12-3*2))

Pass på at uttrykk over eller under brøkstrek står i parentes slik at teller og nevner blir regnet ut før divisjonen.

1.1.6: Regnerekkefølge 2

Programmer ulike uttrykk og sjekk at du forstår hvorfor resultatet blir som det blir.

Noen eksempler:
1. Hvordan programmerer du brøken alt text?
2. Hva blir 2**3**2?
3. Hva blir 1+2*6/4*8-1?

Opppgave 1
Det er viktig i denne oppgaven å være bevisst på hva som skal være under, og hva som skal være over brøkstreken. For å "markere" dette for programmet bruker vi parenteser som følger:

(a+b)/(c+d)

Nå blir det som er inne i parentesene regnet ut først, og vi får det vi ønsker. Hadde vi ikke brukt parenteser så ville programmet fulgt vanlige regneregler(divisjon før addisjon) og regnet som følger:

a+b/c+d = a+(b/c)+d

Oppgave 2
Siden programmet regner potenser først, fra høyre mot venstre vil vi få:

2**3**2 = 2**9 = 512

Oppgave 3
Programmet regner alltid ut divisjon først, så multiplikasjon, deretter addisjon og subtraksjon. Programmet vil derfor regne som følger:

1+2*6/4*8-1 = 1+(2*(6/4)*8)-1 = 24

1.2.1: Input

1. Skriv et program som tar navnet til bruker som input og skriver ut "hei" og navnet til brukeren.
**2. ** Prøv nå å kjøre programmet nedenfor:

fodsel = input("Når ble du født?")

tid_siden = 2019-fodsel

print("Det er",tid_siden,"år siden")

Når du kjører programmet vil du få en feilmelding. Hvorfor får du feilmelding? Hva må du endre på for at programmet skal kjøre?

Oppgave 1
Vi starter med å skrive:

Navn = input("Hva er navnet ditt?")     #Henter input fra bruker

print("Hei", Navn)                      #Skriver "Hei", så navnet

Nå har vi et program som spør bruker om navn, og deretter skriver "Hei + navn". Når vi bruker input()-funksjonen så tas denne alltid inn som en tekststreng.

Oppgave 2
Når vi kjører programmet får vi en feilmelding som ser noe slik ut:

TypeError: unsupported operand type(s) for -: 'int' and 'str'

Dette er fordi input() alltid lagrer variable som tekststrenger. For å kunne regne med dem må vi først konvertere dem til flyttall ved hjelp av float()-funksjonen. Vi må da skrive:

fodsel = input("Når ble du født?")

fodsel = float(fodsel)      #Denne linjen konverterer til flyttall

tid_siden = 2019-fodsel

print("Det er",tid_siden,"år siden")

Noen ganger kan du ha bruk for heltall istedenfor flyttall. For å konvertere til heltall må du bruke int()-funksjonen.

1.2.2: Input og potenser

  1. Hva betyr alt text? Hvordan skriver du dette i Python?

  2. La n og a være tilfeldige tall. Hva betyr alt text?

  3. Lag et program som tar et grunntall a og en eksponent n som input og som skriver ut hva alt text blir. Bruk passende matematiske begreper når du lager variabler og skriver ut svaret.

Oppgave 1
2^4=2*2*2*2, det skrives som 2**4 i python.

Oppgave 2
a^n betyr at vi ganger a med seg selv n ganger.

Oppgave 3
pythonkode:

a = input("Grunntall =  ") #får tall fra bruker
a = float(a)                #konverterer string til float
n = input("Eksponent =  ")
n = float(n)

print(a**n)                 #printer ut 

Husk at når du får input blir det lagret som string, selv om du skriver et tall. Derfor må vi konvertere string til float.

utskrift:

Grunntall = ? 2     #jeg skrev inn 2     
Eksponent = ? 3     #jeg skrev inn 3
8.0                 #får til svar at 2^3=8

1.2.3: Kvadrattall og kvadratrøtter

  1. Lag et program som tar et tall som input. Programmet skal kvadrere tallet og skrive det ut. I tillegg skal det skrive ut rota av dette kvadratet.

  2. Hva er sammenhengen mellom tallene som kvadreres og kvadratrota av dette igjen?

Oppgave 1
I koden under har vi brukt sqrt(), da må vi først importere biblioteket pylab. Alternativt kan du opphøye i 1/2, da trenger du ikke importere pylab. Husk at når du får et tall som input blir det lagret som streng, så du må konvertere ved hjelp av float().

from pylab import *  #importerer pylab fordi vi bruker sqrt() under

tall = input("Hvilket tall vil du kvadrere? ")  #får input
tall = float(tall)                              #konverterer til tall

kvad = tall**2                                  #kvadrerer
print("Kvadratet av ditt tall er: ", kvad)

rot = sqrt(kvad)                                #eller: kvad**(1/2)
print("Roten av kvadratet er: ", rot)

Oppgave 2
Sammenhengen mellom tallene som kvadreres og roten av dette igjen er at tallverdien er lik, men fortegnet kan variere.

2.1.1: Beslutninger

Du skal nå lage tre forskjellige program som krever input, tar en beslutning og gir output.

  1. Lag et program som spør brukeren om alderen til brukeren. Skriv ut en kommentar som avhenger av om alderen er under eller over 30. Utvid så programmet til å skille mellom flere alderskategorier.

  2. Lag et program som tar et tall som input. Programmet skal så vurdere og skrive ut om tallet er et positivt tall, negativt tall eller null.

  3. Lag et program som tar to tall som input. Programmet skal skrive ut hvilket av tallene som er minst.

Se i bunnen av feltet for en kommentar om konvertering av tekst til tall.

Oppgave 1
Først skal vi skille de over og under 30 år, det gjør vi med en if-else-statement:

alder = input("Hvor gammel er du? ") #henter inputverdi
alder = float(alder)                 #konverterer streng til float

if alder < 30:                      
    print("Under 30")                #printes hvis under 30
else:                                #ikke under 30, altså 30 eller eldre
    print("Over 30")                 #printes hvis 30 eller eldre

For å skille mellom flere aldersgrupper må vi legge inn flere beslutninger. Dette gjør vi ved hjelp av elif. Vi kan ha så mange elif vi vil, men i dette eksempelet bruker vi bare en, altså tre kategorier.

alder = input("Hvor gammel er du? ")
alder = float(alder)

if alder < 18:                      #hvis bruker er under 18
    print("Ungdom")
elif alder >= 18 and alder < 67:    #hvis bruker er 18 eller mer og samtidig under 67
    print("Voksen")
else:                               #hvis bruker er 67 eller eldre
    print("Pensjonist")

Oppgave 2
Nå skal vi vurdere om et tall er negativt, positivt eller null. Da kan vi lage en if-elif-else-statement. Oppgaven løses på samme måte som oppgave 1, men med andre betingelser og utskrifter.

tall = input("Hvilket tall vil du vurdere? ")
tall = float(tall)

if tall < 0:
    print("Tallet er negativt")
elif tall > 0:
    print("Tallet er positivt")
else:
    print("Tallet er null")

Oppgave 3
Denne oppgaven er veldig lik oppgave 2, bortsett fra at vi får input av to tall, og bruker andre betingelser og utskrifter..

tall1 = input("Skriv inn ett tall: ")
tall1 = float(tall1)
tall2 = input("Skriv inn enda ett tall: ")
tall2 = float(tall2)
if tall1 < tall2:
    print(tall1, "er minst")
elif tall1 > tall2:
    print(tall2, "er minst")
else:
    print("Tallene er like store")

Kommentar
Når vi ber om alder som input får vi et tall i tekstformat, som må konverteres til tallformat. Dette er de to første linjene i koden. Disse to linjene kan enkelt skrives på en linje ved å bruke float() rundt input(). Eksempel:

alder = float(input("Hvor gammel er du? ")) #får input og konverterer

2.1.2: Partall og oddetall

  1. La n være et tilfeldig heltall (1, 2, 3, 4 osv.). Forklar hvorfor formelen 2n alltid gir partall, mens formelen 2n + 1 alltid gir oddetall.

  2. Lag et program som tar et heltalltall som input og avgjør om tallet er partall.

  3. Modifiser programmet slik at det også gir beskjed om tallet er oddetall.

Oppgave 1
Et partall er et tall som er delelig med 2. Formelen 2n tar et tall n, og ganger med to, som vil si at alle tall som kommer ut av formelen er delelig med 2. Ved å endre formelen til 2n + 1 endrer vi det da fra partall til oddetall.

Oppgave 2
For å finne ut om et tall er et partall, kan vi bruke modulus. Modulus finner resten etter heltallsdivisjon. Hvis resten etter at du deler med to er null, er tallet delelig med null. Da har vi et partall.

tall = input("Skriv inn et tall: ") #input av tall (string)
tall = float(tall)                  #konverterer string til float
if tall%2 == 0:                     #partallsjekk
    print("Tallet er et partall")

Oppgave 3
Legger til en else-statement for å skrive ut om det er et oddetall:

tall = input("Skriv inn et tall: ")
tall = float(tall)
if tall%2 == 0:                 
    print("Tallet er et partall")
else:
    print("Tallet er et oddetall")

2.1.3: Faktorer

  1. Hva menes med at 3 er en faktor i 27?

  2. Lag et program som tar et tall som input og avgjør om 3 er en faktor i dette tallet.

  3. Hvorfor gir det lite mening å spørre om 1 er en faktor i tallet?

Oppgave 1
At 3 er en faktor i 27 betyr at 27 er delelig på 3.

Oppgave 2
Hvis tall%3 = 0, så er 3 en faktor i 27.

tall = input("Skriv inn et tall: ") #input av tall (string)
tall = float(tall)                  #konverterer string til float
if tall%3 == 0:                     #sjekker om tall er delelig med 3
    print("3 er en faktor i dette tallet")
else:
    print("3 er ikke en faktor i dette tallet")

Oppgave 3
Det gir lite mening å spør om 1 er en faktor i tallet, fordi å dele på 1 ikke endrer tallet. Vi kan også si at 1 er en faktor i alle tall.

2.1.4: Fra sekunder til minutter, timer og dager

Lag et program som tar et antall sekunder som input. Programmet skal ta tallet, og regne det om til dager, timer, minutter og sekunder. Til slutt skal du skrive ut hvor mange dager, timer, minutter og sekunder det ble.

Prøv å lag koden slik at kun det som er relevant blir oppgitt. For eksempel, hvis det bare er 34 minutter og 10 sekunder, trenger vi ikke få oppgitt at det er 0 dager og timer.

For å løse denne oppgaven må du ha kontroll på heltallsdivisjon og modulus(rest).
Eksempler:
27 // 6 = 4
27 % 6 = 3

Da kan vi skrive koden slik:

input = input("Hvor mange sekunder?: ")     #får input fra bruker
input = int(input)  #konverterer til float

sek = input         #vi har så mange sekunder

min = sek // 60     #fra sekundene får vi så mange minutter
sek = sek % 60      #da har vi så mange sekunder igjen

timer = min // 60   #fra minuttene får vi så mange timer
min = min % 60      #da har vi så mange minutter igjen

dager = timer // 24 #fra timene får vi så mange dager
timer = timer % 24  #da har vi så mange timer igjen

For å skrive ut kun relevant info må vi bruke beslutninger. For at det skal bli riktig må vi først sjekke.

if (dager==0 and timer==0 and min==0):
    print(input, "sekunder er", sek,"sekunder")
elif (dager==0 and timer==0):
    print(input, "sekunder er", min, "minutter og", sek,"sekunder")
elif dager==0:
    print(input, "sekunder er", timer, "timer,", min, "minutter og", sek,"sekunder")
else:
    print(input, "sekunder er", dager,"dager,", timer, "timer,", min, "minutter og", sek,"sekunder")

3.1.1: While-løkker

  1. Lag en while-løkke som skriver ut alle tall fra og med 0 til og med 10

  2. Lag en while løkke som skriver ut hvert tredje tall. Det første tallet skal være 0, og det siste tallet skal ikke være over 100.

Oppgave 1

i = 0               #oppretter en tellevariabel i=0
while i <= 10:      #Kjører så enge i er mindre eller lik 10
    print(i)        #Skriver ut i, første verdi vil bli 0
    i = i + 1       #Øker i med 1 hver runde

Oppgave 2

i = 0               #oppretter en tellevariabel i=0 
while i <= 100:     #kjører så lenge i er mindre eller lik 100
    print(i)        #skriver ut i
    i = i + 3       #øker i med 3

3.1.2: While og input

  1. Lag et program som tar et tall som input og skriver opp alle tall fra og med 0, til og med tallet fra input.

  2. Lag et program som først tar et tall som input. Deretter skal programmet spørre om et nytt tall helt til summen av alle tallene som er gitt som input, er større enn 50. Skriv til slutt ut hva summen ble for å se hvor nærme du kom 50.

Oppgave 1

i = 0                           #oppretter i som 0
tall = input("Velg et tall: ")  #får input av et tall
tall = float(tall)              #konverterer til float
while i <= tall:                #kjører så lenge i er mindre enn tall
    print(i)                    #skriver ut i
    i = i + 1                   #øker i med 1

Oppgave 2

sum = 0                 #Definerer en "tom" variabel, sum
while sum < 50:         #Løkken kjører så lenge sum er mindre enn 50
    tall = input("Legg til et tall i summen: ")     #Får input av tall
    tall = float(tall)  #Konverterer input til float
    sum = sum + tall    #Ny sum = gammel sum + tall

print("Summen din ble", sum)    #Skriver ut melding

3.1.3: Gjette tall

  1. Lag et program hvor brukeren blir bedt om å gjette et tall mellom 1 og 10. Programmet skal kjøre frem til brukeren gjetter riktig tall. Du velger selv hvilket tall det skal være.

  2. Utvid programmet i oppgave 1, slik at brukeren får en melding om de gjettet for høyt, for lavt eller riktig.

Oppgave 1

gjett = 0   #Definerer en variabel som lagrer tallet som blir gjettet
fasit = 7   #Definerer en variabel med det riktige tallet
while gjett != fasit:       #Kjører så lenge gjett er ulik fasit
    gjett = input("Gjett et tall mellom 1 og 10: ")
    gjett = float(gjett)    #Endrer gjett til tallet fra input

Oppgave 2
For å få ut en melding etter hver gang brukeren gjetter et tall, må vi legge en if-statement inni while-løkken. I if-statementen må vi sjekke om gjettet tall er lik fasiten, og dermed skrive ut en melding, hvis ikke så skriver vi ut en annen melding:

gjett = 0
fasit = 7
while gjett != fasit:
    gjett = input("Gjett et tall mellom 1 og 10: ")
    gjett = float(gjett)
    if gjett < fasit:       #sjekker om gjett er mindre enn fasit
        print("For lavt")
    elif gjett > fasit:     #sjekker om gjett er større enn fasit
        print("Før høyt")
    else:                   #ellers
        print("Riktig!")

3.1.4: Fibonacci

Fibonacci-tallene er en kjent tallfølge som starter slik:

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...

Følgen kan beskrives ved at neste tall er summen av de to foregående.

Lag en while-løkke som skriver ut fibonaccitall. Løkken skal kjøre så lenge tallet som skrives ut er mindre enn 1000.

fib1 = 1            #oppretter første tall
print(fib1)         #må skrive ut dette med en gang
fib2 = 1            #oppretter andre tall
print(fib2)         #må skrive ut dette med en gang
fib = fib1 + fib2   #regner ut neste tall

while fib <= 1000:      #while kjører så lenge fib <= 1000
    print(fib)          #skriver ut fib
    fib1 = fib2         #omdefinerer fib1 til fib2
    fib2 = fib          #omdefinerer fib2 til fib
    fib = fib1 + fib2   #regner ut neste tall

Vi må skrive ut fib1 og fib2 med en gang, fordi de blir ikke skrevet ut i løkken. Inni løkken skriver vi først ut neste tall som vi regnet ut utenfor løkken. Så omdefinerer vi variablene. fib1 blir til fib2, og fib2 blir til fib, dette er for at utregningen i neste runde av løkken skal bli riktig.

3.1.5: While- og for-løkker.

  1. Lag ei løkke som skriver ut alle partall fra og med 0 til og med 100. Gjør dette gjerne med både while- og for-løkker.

  2. Skriv et program som skriver ut alle tallene fra og med 1 til og med 449 ved hjelp av en for-løkke.

  3. Lag et program som tar et tall som input. Programmet skal sjekke om tallene 2-9 er faktorer i tallet, og skrive ut passende meldinger.

Oppgave 1
Her er det mange kreative måter man kan løse oppgaven. Her er et eksempel med while-løkke og et med for-løkke.

Når vi her bruker while-løkke må vi først definere to variabler, det er en "telle"-variabel, i, og en "utskrift"-variabel, x. Disse må defineres slik at vi kan bruke de i løkken. Så lar vi løkken kjøre så lenge x er mindre en 100. Når x=98 vil da løkken kjøre en siste gang for å skrive ut x=100.

i=0                 #tellevariabel
x=0                 #utskriftvariabel
while x < 100:      #kjører så lenge x < 100
    i = i+1         #i er defienrt som 0, øker med 1 hver runde
    x = i*2         #formel for partall
    print(x)        #skriver ut x

Når vi her bruker for-løkke trenger vi ikke å definere noen variabler først. I denne oppgaven kan vi for hver i sjekke om det er et partall, og dersom det er partall skrives det ut.

for i in range(101):    #kjører 101 ganger, med i fra 0-100
    if int(i/2)==i/2:   #sjekker om i er et partall    
        print(i)        #skriver ut i dersom det er partall

Oppgave 2
Her holder det med en ganske enkel for-løkke. Siden vi skal skrive ut tallene fra 1 til 449, må vi ha i in range(1,450). Merk at i da går fra og med 1 til men ikke med 450.

for i in range(1,450):
    print(i)

Oppgave 3
Legg merke til at vi får input og konverterer til float på samme linje, ved å sette float() rundt input. Setter vi opp en for-løkke, der vi har i in range(2,10), da vil løkken kjøre med verdier i = 2, 3, 4, 5, 6, 7, 8 og 9. Så setter vi opp en if-test som sjekker om hvert tall i er en faktor, og endrer printen til å skrive ut avhengig av tallet i.

tall = float(input("Skriv inn et tall: "))  #definerer tall
for i in range(2,10):                       #i=2,3,4,5,6,7,8,9
    if tall//i == tall/i:               #sjekker om i er en faktor
        print(i, "er en faktor i dette tallet")
    else:
        print(i, "er ikke en faktor i dette tallet")

3.1.6: For-løkker

  1. Skriv et program som regner ut summen av tallene fra og med 1 til og med 999 ved hjelp av en for-løkke, og til slutt printer ut resultatet.alt text

  2. Test ut programmet i oppgave 1 med summene alt text og alt text. Ser du et mønster? Programmering gir en ny mulighet til å utforske tall og tallenes egenskaper.

Oppgave 1
Her må vi definere variabelen sum over for-løkken. Dette er fordi vi må bruke sum til å legge til hver i-verdi når løkka kjører.

sum = 0                 #definerer variabelen sum
for i in range(1,1000): #kjører 999 ganger, med i fra 1-999 
    sum = sum + i       #legger i til i summen

print(sum)              #skriver ut summen

Oppgave 2
Vi bruker programmet i oppgave 1, men bruker i in range(1,100) for summen av 1-99, og i in range(1,10000) for summen av 1-9999. Da får vi utskrift henholdsvis 4950 og 49995000. Vi ser at den siste summen har to ekstra 9'ere og to ekstra 0'er, men at begge summene begynner med 4, og har 5 mellom 9'erene og 0'ene.

3.1.7: Aritmetiske følger

Aritmetiske følger er følger der differansen mellom et tall og neste er en konstant. I følgene rekke øker hvert ledd med 4:

1 5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69…

Lag et program som finner summen av de 100 første tallene i rekka.

Her er det hensiktsmessig å bruke en for-løkke. Vi definerer først to variabler, tall og sum. Begge tallene defineres som 1, det er fordi rekken starter på 1, så da kan vi tenke oss at første tall er lagt til i summen, så den er også 1. Så kjører vi løkken 99 ganger, dette er fordi vi allerede har lagt til det første tallet. I løkken blir det først laget et nytt tall, og så legges tallet inn i summen.

tall = 1    #definerer tall som 1 fordi rekken starter på 1
sum = 1     #definerer sum som 1 fordi første tall er gitt

for i in range(99):     #kjører 99 ganger
    tall = tall + 4           #legger til 4 på forrige tall-verdi
    sum = sum + tall         #legger til tall-verdi på forrige sum-verdi

print(sum)