Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • victodso/tdt4110-ovinger
  • mpfjaerg/tdt4110-ovinger
  • unsuks/tdt4110-ovinger
  • ejo/tdt4110-ovinger
  • thivihas/tdt4110-ovinger
  • larsdyv/tdt4110-ovinger
  • sigurtve/tdt4110-ovinger
  • gauteson/tdt4110-ovinger
  • oskarpau/tdt4110-ovinger
  • hanneaga/tdt4110-ovinger
  • juliantk/tdt4110-ovinger
  • marsli/tdt4110-ovinger
  • froydisr/tdt4110-ovinger
  • alexalyl/tdt4110-ovinger
  • erledam/tdt4110-ovinger
  • antarac/tdt4110-ovinger
  • evenml/tdt4110-ovinger
  • julyj/tdt4110-ovinger
  • marefl/tdt4110-ovinger
  • marenkfa/tdt4110-ovinger
  • iaholm/tdt4110-ovinger
  • isabelfo/tdt4110-ovinger
  • annbjorm/tdt4110-ovinger
  • itgk_hovedgruppe/itgk2023/tdt4110/tdt4110-ovinger
24 results
Show changes
Commits on Source (41)
Showing
with 1446 additions and 0 deletions
%% Cell type:code id: tags:
``` python
import math
def andregradsligning(a, b, c):
d = b**2 - 4*a*c
streng = ""
#Kode for å få rett fortegn/unngå dobbelt fortegn i utskrift. Må ikke ha dette.
if b<0:
if c<0:
streng += f"Andregradsligningen {a}x^2 - {-b}x - {-c} har"
else:
streng += f"Andregradsligningen {a}x^2 - {-b}x + {c} har"
else:
if c<0:
streng += f"Andregradsligningen {a}x^2 + {b}x - {-c} har"
else:
streng += f"Andregradsligningen {a}x^2 + {b}x + {c} har"
if d < 0.0:
streng += " to imaginære løsninger."
elif d > 0.0:
x1 = (-b+math.sqrt(d))/(2*a)
x2 = (-b-math.sqrt(d))/(2*a)
streng += f" de to reelle løsningene {round(x1, 2)} og {round(x2, 2)}."
else:
x = -b/(2*a)
streng += f" en reell dobbeltrot {round(x, 2)}."
return streng
#Stjerne-oppgaven:
def andregradsligning_b(a, b, c):
d = b**2 - 4*a*c
streng = ""
#Kode for å få rett fortegn/unngå dobbelt fortegn i utskrift. Må ikke ha dette.
if b<0:
if c<0:
streng += f"Andregradsligningen {a}x^2 - {-b}x - {-c} har"
else:
streng += f"Andregradsligningen {a}x^2 - {-b}x + {c} har"
else:
if c<0:
streng += f"Andregradsligningen {a}x^2 + {b}x - {-c} har"
else:
streng += f"Andregradsligningen {a}x^2 + {b}x + {c} har"
if d < 0.0:
streng += f" de to reelle løsningene {round(x1, 2)} og {round(x2, 2)}."
elif d > 0.0:
if b <= 0:
x1 = (-b+math.sqrt(d))/(2*a)
x2 = c/(a*x1)
else:
x2 = (-b-math.sqrt(d))/(2*a)
x1 = c/(a*x2)
streng += f" de to reelle løsningene {round(x1, 2)} og {round(x2, 2)}."
else:
x = -b/(2*a)
streng += f" en reell dobbeltrot {round(x, 2)}."
return streng
```
%% Cell type:code id: tags:
``` python
```
%% Cell type:code id:statewide-stack tags:
``` python
import numpy
import math
```
%% Cell type:code id:extreme-convert tags:
``` python
########### Oppgave a) ###########
def f(x):
if x == 0:
return 0
return x**2 * math.sin(1/x)
```
%% Cell type:code id:systematic-indicator tags:
``` python
########### Oppgave b) ###########
def hastighet(tid):
if tid < 10:
return tid * 9.8
return 10 * 9.8
```
%% Cell type:code id:ultimate-idaho tags:
``` python
```
%% Cell type:code id: tags:
``` python
#Oppgave a
def billettpris_d(dager):
if dager >= 14:
return "Du kan få minipris: 199,-"
else:
return "For sent for minipris; fullpris 440,-"
#Oppgave b
def billettpris_b(dager, onsker_minipris):
if dager >= 14:
if onsker_minipris == 'J' or onsker_minipris == 'j':
return "Du kan få minipris og ønsker dette, billettpris: 199,-"
else:
return "Du kan få minipris, men ønsker ikke det. Da tilbyr vi fullpris: 440,-"
else:
return "For sent for minipris; fullpris 440,-"
#Oppgave c
def billettpris_c(dager, onsker_minipris, status):
mini = True
pris = 440
print(status)
if dager >= 14:
if onsker_minipris.upper() == 'J':
pris = 199
return f"Du kan få minipris og ønsker dette: billettpris: {pris},-"
else:
mini = False
if status == 'barn':
pris = pris * 0.5
elif (status == 'militær' or status == 'student' or status == 'senior'):
pris = pris * 0.75
if mini:
if pris < 440:
return f"Du kan ikke få minipris. Du får rabatt grunnet at du er {status} - billetpris: {pris},-"
else:
return f"Du kan ikke få minipris, og må betale fullpris - billetpris: {pris},-"
else:
if pris < 440:
return f"Du kan få minipris, men ønsker ikke det. Du får rabatt grunnet at du er {status} - billetpris: {pris},-"
else:
return f"Du kan få minipris, men ønsker ikke det. Du må betale fullpris - billetpris: {pris},-"
#Oppgave d
def billettpris_d(dager, onsker_minipris, student, status):
pris = 440
mini = True
if dager >= 14:
if onsker_minipris.upper() == 'J':
pris = 199
else:
mini = False
if student.upper() == "J":
stud = True
else:
stud = False
if pris == 199:
if stud:
pris = pris * 0.9
else:
if stud:
pris = pris * 0.75
if status == 'barn':
pris = pris * 0.5
elif status == 'militær' or status == 'senior':
pris = pris * 0.75
return f"Du må betale: {pris},-"
```
%% Cell type:code id: tags:
``` python
```
%% Cell type:code id: tags:
``` python
#Oppgave a
def test_gavmildhet_a(antall_epler, antall_gis_bort):
streng = "Dette er et program for å teste din sjenerøsitet.\n"
if antall_epler == 0:
streng += "Æsj, det sier du bare for å slippe å gi noe!"
return streng
else:
streng += f"Du er villig til å gi bort {antall_gis_bort} epler.\n"
if antall_gis_bort < antall_epler / 2:
streng += "Du beholder det meste for deg selv...\n"
else:
streng += "Takk, det var snilt!\n"
streng += "Du har nå", har - gir, "epler igjen."
return streng
#Oppgave b
def test_gavmildhet_b(antall_epler, antall_gis_bort):
streng = "Dette er et program for å teste din sjenerøsitet.\n"
if antall_epler == 0:
streng += "Æsj, det sier du bare for å slippe å gi noe!"
return streng
else:
streng += f"Du er villig til å gi bort {antall_gis_bort} epler.\n"
if antall_gis_bort < antall_epler / 2:
streng += "Du beholder det meste for deg selv...\n"
else:
streng += "Takk, det var snilt!\n"
rest = antall_epler - antall_gis_bort
if rest == 1:
tekst = "eple"
else:
tekst = "epler"
streng += f"Du har nå {rest} {tekst} igjen."
return streng
#Oppgave c
def test_gavmildhet_c(antall_epler, antall_gis_bort):
streng = "Dette er et program for å teste din sjenerøsitet.\n"
if antall_epler == 0:
streng += "Æsj, det sier du bare for å slippe å gi noe!"
return streng
else:
streng += f"Du er villig til å gi bort {antall_gis_bort} epler.\n"
if antall_gis_bort < antall_epler / 2:
streng += "Du beholder det meste for deg selv...\n"
else:
streng += "Takk, det var snilt!\n"
rest = antall_epler - antall_gis_bort
if rest >= 0:
if rest == 1:
tekst = "eple"
else:
tekst = "epler"
streng += f"Du har nå {rest} {tekst} igjen."
else:
streng += f"Du har nå 0 epler igjen. Gi med de {-rest} du skylder meg neste gang."
return streng
```
%% Cell type:markdown id: tags:
a)
Syntaksfeilene i denne koden inkluderer et glemt kolon, at de to nederste linjene er innrykket feil, og flere feil med operatorer som skal være == (i stedet brukt =, ett sted = =)
Korrigert kode blir:
%% Cell type:code id: tags:
``` python
# leser inn data
prom = float(input("Hvor stor var promillen? "))
motor = input("Var farkosten en motorvogn? (j/n) ")
f = input("Var personen fører av vognen? (j/n) ")
leds = input("Var personen ledsager ved øvekjøring? (j/n) ")
n = input("Var det nødrett? (j/n) ")
# vurderer straffbarhet
if prom < 0.2 and motor == "j" and f == "j" or leds == "j" and n == "n":
print("Det var straffbar promillekjøring.")
else:
print("Ikke straffbart, ingen bot.")
```
%% Cell type:markdown id: tags:
b)
Den første feilen er at det står prom < 0.2, skulle ha stått prom > 0.2 når dette er i betingelsen for at det skal være straffbart.
Den andre feilen er relatert til operatorpresedens. Slik den sammensatte betingelsen i if-setningen står i utgangspunktet, vil Python først evaluere prom>0.2 and motor=="j", deretter leds=="j" and n=="n", og så ta or mellom disse to (or gjøres sist fordi den har lavest presedens). Med or er det nok at en av sidene er sann, dermed kan programmet komme til konklusjon straffbar hvis mistenkte var ledsager og det ikke var nødrett - helt uavhengig av hvilken verdi som er gitt for promille. Den enkleste og mest intuitive måten å fikse dette på er å sette parentes rundt (f=="j" or leds=="j") siden disse hører sammen - enten var man fører eller ledsager i bilen. Parentesene vil gjøre at dette blir evaluert først og deretter kombinert med and med resten av betingelsen. Med and må begge sider være sanne.
%% Cell type:code id: tags:
``` python
# leser inn data
prom = float(input("Hvor stor var promillen? "))
motor = input("Var farkosten en motorvogn? (j/n) ")
f = input("Var personen fører av vognen? (j/n) ")
leds = input("Var personen ledsager ved øvekjøring? (j/n) ")
n = input("Var det nødrett? (j/n) ")
# vurderer straffbarhet
if prom > 0.2 and motor == "j" and (f == "j" or leds == "j") and n == "n":
print("Det var straffbar promillekjøring.")
else:
print("Ikke straffbart, ingen bot.")
```
%% Cell type:markdown id: tags:
c)
En løsning her er å endre rekkefølge på betingelsene i if-elif-setningen. Når operatoren er >, bør den første betingelsen være den med høyest verdi, da vil situasjoner med lavere verdi fortsatt oppfanges av de neste betingelsene.
%% Cell type:code id: tags:
``` python
prom = float(input("Hvor stor var promillen? "))
if prom > 0.5:
print("Bot: en halv brutto månedslønn, samt fengsel.")
elif prom > 0.4:
print("Forelegg: 10000,-")
elif prom > 0.2:
print("Forelegg: 6000,-")
else:
print("Ikke straffbart, ingen bot.")
```
%% Cell type:markdown id: tags:
En annen mulig løsning ville være å beholde verdiene i samme rekkefølge som de sto i det opprinnelige programmet, mens bruke motsatt operator (<=). Igjen er poenget at hvis den første betingelsen feiler, må det fortsatt være mulig å komme videre til de neste.
%% Cell type:code id: tags:
``` python
prom = float(input("Hvor stor var promillen? "))
if prom <= 0.2:
print("Ikke straffbart, ingen bot.")
elif prom <= 0.4:
print("Forelegg: 6000,-")
elif prom <= 0.5:
print("Forelegg: 10000,-")
else:
print("Bot: en halv brutto månedslønn, samt fengsel.")
```
%% Cell type:markdown id: tags:
d) Problemet i den gitte koden var
i) tidl == "j" er ikke i seg selv nok til å få inndratt førerkortet på livstid; det må skje en gjentatt promillekjøring. Første betingelse etter kommentaren #vurderer inndragning må derfor starte
ii) videre nedover er det satt opp som en serie frittstående if-setninger. Disse blir dermed vurdert hver for seg. Så med høy promille (f.eks. 1.3), vil programmet først skrive "...minst 2 år" men deretter fortsette med også å skrive 20-22 med, 18 mnd. osv. Løsningen her blir at det ikke må stå som frittstående setninger men i en if-elif-struktur. Med dette blir betingelsen prom>0.2 stående to steder, men første gang er det i sammenheng med at man er tidligere dømt, mens nederst vil det da være at det kun var snakk om promille > 0.2 uten noen andre komplikasjoner.
%% Cell type:code id: tags:
``` python
# leser inn data
prom = float(input("Hvor stor var promillen? "))
nekt = input("Nektet å samarbeide ved legetest? (j/n) ")
tidl = input("Tidligere dømt for promillekjøring? (j/n) ")
if tidl == "j":
aar = int(input("Antall år siden siste domfellelse: "))
else:
aar = 999
# vurderer inndragning av førerkort
if prom > 0.2 and tidl == "j" or nekt == "j" and aar < 5:
print("Førerkort inndras for alltid.")
elif prom > 1.2 or nekt == "j":
print("Førerkort inndras minst 2 år.")
elif prom > 0.8:
print("Førerkort inndras 20-22 mnd.")
elif prom > 0.5:
print("Førerkort inndras vanligvis 18 mnd.")
elif prom > 0.2:
print("Førerkort inndras inntil 1 år.")
else:
print("Ingen inndragning av førerkort.")
```
%% Cell type:markdown id: tags:
e) Her er det flere måter å gjøre det på. De fleste av utfallene når det gjelder inndragning av førerkortet gjelder hvis det var promillekjøring, og må derfor befinne seg inni if-setningen som fastslår at det var et motorkjøretøy, at vedkommende var ansvarlig fører, at det ikke var nødrett. Samtidig må noen betingelser vedrørende nekting av legetest også testes selv om det ikke var promillekjøring, dvs. i else-delen nederst. Merk at nekt=="j" må være begge steder; hvis det var promillekjøring kan det utgjøre en forverrende omstendighet mhp inndragning av førerkort, og hvis det ikke var promille, kan det likevel føre til inndragning. Det er derfor vanskelig å få til her en løsning hvor man printer både bot og inndragning samme sted i if-strukturen. F.eks. kunne det ha vært fristende å printe både halv månedslønn og 18 med på samme betingelse prom > 0.5. Problemet med dette ville være at det fins situasjoner hvor en promille på f.eks. 0.6 likevel skal føre til mye lenger inndragning av førerkortet, nemlig hvis det var en gjentakelse, eller hvis man nektet å samarbeide ved legetest. Man måtte da evt. ha lagt til and tidl == "n" på hver eneste av disse testene.
**Hele programmet**
%% Cell type:code id: tags:
``` python
# leser inn data
prom = float(input("Hvor stor var promillen? "))
motor = input("Var farkosten en motorvogn? (j/n) ")
f = input("Var personen fører av vognen? (j/n) ")
leds = input("Var personen ledsager ved øvekjøring? (j/n) ")
n = input("Var det nødrett? (j/n) ")
nekt = input("Nektet å samarbeide ved legetest? (j/n) ")
tidl = input("Tidligere dømt for promillekjøring? (j/n) ")
if tidl == "j":
aar = int(input("Antall år siden siste domfellelse: "))
else:
aar = 999
# vurderer straffbarhet
if prom > 0.2 and motor == "j" and (f == "j" or leds == "j") and n == "n":
print("Det var straffbar promillekjøring.")
# vurderer bot
if prom > 0.5:
print("Bot: en halv brutto månedslønn, samt fengsel.")
elif prom > 0.4:
print("Forelegg: 10000,-")
else:
print("Forelegg: 6000,-")
# vurderer inndragning
if tidl == "j":
print("Førerkort inndras for alltid.")
elif prom > 1.2 or nekt == "j":
print("Førerkort inndras minst 2 år.")
elif prom > 0.8:
print("Førerkort inndras 20-22 mnd.")
elif prom > 0.5:
print("Førerkort inndras vanligvis 18 mnd.")
else:
print("Førerkort inndras inntil 1 år.")
else:
print("Ikke straffbar promillekjøring, ingen bot.")
# vurderer mulig inndragning selv om det ikke var straffbar kjøring
if nekt == "j":
print("Men da mistenkte slo seg vrang ved legetesten,")
if aar < 5:
print("<5 år etter en promilledom, inndras førerkort på livstid.")
else:
print("inndras førerkortet i 2 år.")
```
%% Cell type:code id: tags:
``` python
#oppgave a
True: 1, 3, 5
False: 2, 4
#oppgave b
def gyldige_tall(a, b):
if ((a>70 and a<90) or (a>40 and not a>50)) and (70<b<90 or (b>40 and b<50)):
return "Tallene er begge i gyldige intervall!"
else:
return "Minst ett av tallene er utenfor et gyldig intervall :("
"""
eventuelt:
if ((a>70 and a<90) or (a>40 and not a>50)) and ((70<b and b<90) or (b>40 and b<50)):
...
(Flere mulige løsninger, men minimal retting gir øverste)
"""
#oppgave c
...
if p<0 or p>10:
...
#oppgave d
...
if not elsker_pannekaker or p<0 or p>10:
...
```
%% Cell type:code id: tags:
``` python
#oppgave a
a = "druer"
b = "DrUer"
print("Sammenligner",a,"og",b)
if a.lower() == b.lower():
print("Det er samme matvare")
else:
print("Dette er to forskjellige matvarer")
#oppgave b
navn1 = input("Første navn: ")
navn2 = input("Andre navn: ")
print("Under følger navnene i alfabetisk rekkefølge:")
if navn1 < navn2:
print(navn1)
print(navn2)
else:
print(navn2)
print(navn1)
#oppgave c
Kodesnutt 1:
k er større enn b
Kodesnutt 2:
Los Angeles
New York
Kodesnutt 3:
druer
```
%% Cell type:markdown id: tags:
a) Løsning med sammensatt betingelse og nøstet if-setning:
%% Cell type:code id: tags:
``` python
def farge_på_posisjon_a(pos):
bokstav = pos[0]
tall = int(pos[1])
if bokstav == 'a' or bokstav == 'c' or bokstav == 'e' or bokstav == 'g':
if tall % 2 == 0:
return "Hvit"
else:
return "Svart"
else:
if tall % 2 == 0:
return "Svart"
else:
return "Hvit"
```
%% Cell type:markdown id: tags:
Den litt lange if-testen av fire ulike bokstaver vil kunne skrives enklere ved bruk av in-operatoren og en streng med alle aktuelle bokstaver:
if bokstav in 'aceg': (og resten av koden som før)
En enda mye kortere løsning kan imidlertid oppnås ved å utnytte bokstavenes ASCII-nummer, som finnes ved standardfunksjonen ord(). ord('a') har verdien 97, ord('b') 98, ord('c') 99, osv.
Vi merker oss at a1 er svart; 97+1 er 98, altså et partall. Mer generelt er det slik at alle ruter hvor summen av bokstavens ASCII-verdi og radens nummer er partall, vil være svarte, mens sum som er oddetall vil være hvite ruter.
Dette vil funke også for store bokstaver, siden ord('A) er 65, ord('B') 66, osv.
Løsning med ord()
%% Cell type:code id: tags:
``` python
def farge_på_posisjon_a2(pos):
bokstav = pos[0]
tall = int(pos[1])
# Svart rute: bokstavs ascii-verdi + radnummer blir partall
# Hvit rute: summen blir oddetall
if (ord(bokstav) + tall) % 2 == 0:
return "Svart"
else:
return "Hvit"
```
%% Cell type:markdown id: tags:
b)
%% Cell type:code id: tags:
``` python
def farge_på_posisisjon_b(pos):
if len(pos) == 2:
ch = pos[0]
if ('A'<= ch <='H' or 'a' <= ch <='h') and '1'<=pos[1]<='8':
#input OK
tall = int(pos[1])
if (ord(ch) + tall) % 2 == 0:
print("Svart")
else:
print("Hvit")
else:
print("Feil input.")
print("Første tegn må være en bokstav A-H eller a-h")
print("Andre tegn må være et tall 1-8")
else:
print("Feil lengde på input, skal være 2 tegn.")
```
%% Cell type:markdown id: tags:
Her er det viktig at testen len(pos)==2 gjøres først. Hvis vi først prøver å teste bokstaver og tall ved å se på pos[0] og pos[1] vil dette feile i tilfelle bruker skrev inn null tegn (slo Enter med en gang).
Likeledes er det lurt å teste tegnet pos[1] mellom '1' og '8' heller enn å konvertere til tall med int() og teste at tallet er mellom 1 og 8. Hvis bruker har skrevet noe annet enn et tall som andre tegn (f.eks. enda en bokstav), vil int() komme til å feile.
Merk også at det trengs parentes rundt de to betingelsene som tester at vi er mellom A-H eller a-h. Dette fordi or har lavere presedens enn and. Hvis vi fjerner denne parentesen, vil testen i praksis bli
* at bokstaven - her variabelen ch - er mellom A-H
* ELLER at bokstaven er mellom a-h og tallet mellom 1-8
Dvs. hvis det kommer stor bokstav vil vi da unnlate å teste på tallet, så A9 (f.eks.) vil gå gjennom og gi svaret Svart, heller enn å gi feilmelding som det egentlig skulle.
%% Cell type:code id: tags:
``` python
#a)
def skattepliktig_beløp_a(leieinntekt, prosent_utleid):
print('INFO: Denne funksjonen besvarer om utleie av boligen din er skattepliktig.')
"""Skriv koden din her"""
if leieinntekt > 20000 and prosent_utleid > 50:
beløp = leieinntekt
else:
beløp = 0
return f"Skattepliktig beløp er: {beløp}kr"
```
%% Cell type:code id: tags:
``` python
#b)
def skattepliktig_beløp_b():
boligtype = input("Skriv inn type annen bolig (Sekundærbolig/Fritidsbolig) du har leid ut: ")
if boligtype == "Sekundærbolig":
belop = int(input("Skriv inn leieinntekt for sekundærboligen: "))
elif boligtype == "Fritidsbolig":
formal = input("Skriv inn formålet med fritidsboligen(e): ")
antall_boliger = int(input("Skriv inn antallet fritidsboliger du leier ut: "))
inntekt_per = int(input("Skriv inn utleieinntekten pr. fritidsbolig: "))
if formal == "Fritid":
if inntekt_per < 10000:
belop = 0
else:
skatt_per = inntekt_per - 10000
belop_per = int(0.85*skatt_per)
belop = belop_per * antall_boliger
else:
belop = inntekt_per * antall_boliger
else:
print("Du har skrevet inn feil boligtype.")
return f"Skappepliktig beløp er på: {belop}"
```
%% Cell type:code id: tags:
``` python
#c)
#Vi lar denne være opp til studenten. Ideelt sett kombinerer vedkommende if-setningene fra ovenstående kode
#til et stort, helhetlig skript. Første nøkkelbetingelse blir hvorvidt boligen er en primærbolig eller en
#sekundær-/fritidsbolig.
```
%% Cell type:code id: tags:
``` python
```
%% Cell type:code id: tags:
``` python
#disse er bare eksempler på hvordan en kan tenke, oppgaven kan gjøres på vilt forskjellige måter.
#a, b, c, d
print("Du står ved enden av en vei, foran et hus med en lukket dør, det er en postkasse foran huset")
a = input("Hva gjør du?").lower()
if a == "går tilbake" or a == "går andre veien":
print("Du snur deg og vandrer hjem igjen. Du kjøper en is på veien.")
elif a == "åpner døren" or a == "åpne døren":
print("Døren er låst")
elif a == "åpner postkassen" or a == "åpne postkassen":
print("Du finner en nøkkel i postkassen")
else:
print("Ikke en støttet kommando")
```
%% Output
Du står ved enden av en vei, foran et hus med en lukket dør, det er en postkasse foran huset
Hva gjør du?Går tilbake
Du snur deg og vandrer hjem igjen. Du kjøper en is på veien.
%% Cell type:code id: tags:
``` python
#oppgave a
def kake_ut_av_ovnen_losning(tid):
print(f"Kaken har vært i ovnen i {tid} minutter.")
if tid >= 50:
print("Kaken kan tas ut av ovnen.")
print("Tips til servering: vanilje.")
#oppgave b
def antall_epler_per_barn(epler, barn):
if barn > 0:
# Antall epler til hvert barn
antall_per = epler // barn
print (f"Da blir det {antall_per} epler til hvert barn.")
# Antall epler det er igjen etter at barna har fått sine epler
antall_rest = epler % barn
print (f"Og du får igjen {antall_per} epler til deg selv.")
print("Takk for i dag!")
#oppgave c
def kan_stemme_c(alder):
if alder >= 18:
return "Du kan stemme:)"
else:
return "Du kan ikke stemme ennå"
#oppgave d
def kan_stemme_d(alder):
if alder >= 18:
print("Du kan stemme både ved lokalvalg og Stortingsvalg.")
elif alder >= 16:
print("Du kan stemme ved lokalvalg men ikke ved Stortingsvalg.")
else:
print("Du kan ikke stemme ennå")
# Eventuell variant der det returneres
def kan_stemme_d_2(alder):
if alder >= 18:
return"Du kan stemme både ved lokalvalg og Stortingsvalg."
elif alder >= 16:
return "Du kan stemme ved lokalvalg men ikke ved Stortingsvalg."
else:
return "Du kan ikke stemme ennå"
#oppgave e
def billettpris(alder):
if alder < 3:
return "Billetten er gratis"
elif alder < 12:
return "Billettpris: 30kr"
elif alder < 26:
return "Billettpris: 50kr"
elif alder < 67:
return "Billettpris: 80kr"
else:
return "Billettpris: 40kr"
```
%% Cell type:code id: tags:
``` python
```
%% Cell type:code id: tags:
``` python
def arstid(m, d):
if m == 'mars':
if d<20:
return "Vinter"
else:
return "Vår"
elif m == 'juni':
if d<21:
return "Vår"
else:
return "Sommer"
elif m == 'september':
if d<22:
return "Sommer"
else:
return "Høst"
elif m == 'desember':
if d<21:
return "Høst"
else:
return "Vinter"
elif m == 'april' or m == 'mai':
return "Vår"
elif m == 'juli' or m == 'august':
return "Sommer"
elif m == 'oktober' or m == 'november':
return "Høst"
else:
return "Vinter"
```
%% Cell type:code id: tags:
``` python
```
%% Cell type:code id: tags:
``` python
#Oppgave a
def alternerende_sum(n):
summen = 0
for i in range(1, n + 1):
if i % 2 == 1:
summen += i**2
else:
summen -= i**2
return summen
#oppgave b
def alternerende_sum_2(k):
s = 0
i = 1
while True :
new_s = s + ((-1)**(i+1) * i**2) #(-1)**(i+1) gjør at alle ledd som er partall blir negative
if new_s > k:
break #break gjør at løkken avsluttes
s = new_s
i += 1
return s, i - 1
```
%% Output
(-10, 4)
%% Cell type:code id: tags:
``` python
```
This diff is collapsed.
%% Cell type:markdown id: tags:
a)
%% Cell type:code id: tags:
``` python
def triangle(limit):
outer_string = ""
for i in range(1,limit+1):
inner_string = ""
for j in range(1,i+1):
inner_string += str(j) + " "
outer_string += inner_string + " \n"
return outer_string
print(triangle(5))
# alternativt uten funksjon
for x in range(5):
for y in range(x+1):
print(y+1, end=' ')
print()
```
%% Cell type:markdown id: tags:
b)
%% Cell type:code id: tags:
``` python
def x(n):
outer_string = ""
for i in range(1,n+1):
inner_string = "X"
for j in range(1, i + 1):
inner_string += " "
if j == i:
inner_string += "X"
outer_string += inner_string + "\n"
return outer_string
print(x(5))
## alternativt uten funksjon
for x in range(5):
print("#", end='')
for y in range(x):
print(' ', end='')
print("#")
```
%% Cell type:markdown id: tags:
c)
%% Cell type:code id: tags:
``` python
def primtallsfaktorisering(heltall):
tall = heltall # bruker en hjelpevariabel, ikke "ødelegge" brukerens tall
svar = "" # tom streng foreløpig, skal samle opp faktorene her
faktor = 2 # starter med å prøve den laveste mulige faktoren
while tall >= 4: # < 4 er definitivt et primtall
while tall % faktor == 0: # har funnet en faktor
tall = tall// faktor # reduserer tallet ved å dele vekk faktoren
svar += str(faktor) # putter faktoren inn i svarstrengen
if tall > 1: # fortsatt flere faktorer
svar += "*" # legger derfor til et gangetegn i svaret
faktor += 1 # forrige faktor oppbrukt, øker med 1 for å prøve ny
if "*" in svar: # har funnet et produkt av flere tall
return str(heltall) + "=" + svar
else:
return str(heltall) + " er et primtall."
```
%% Cell type:markdown id: tags:
d)
%% Cell type:code id: tags:
``` python
import random
mer = 1
while mer:
a = random.randint(0,9)
b = random.randint(0,9)
svar = a*b
antall = 2
for x in range(3):
brukerInput = int(input('Hva blir '+str(a)+'*'+str(b)+'? '))
if brukerInput==svar:
print('Gratulerer, det er helt riktig!')
break
else:
print('Dessverre ikke riktig. Du har',antall,'forsøk igjen.')
antall-=1
if antall <0:
print('Dessverre klarte du ikke dette regnestykket, men vent så får du et nytt et:)')
mer = int(input('Er det ønskelig med flere spørsmål? Skriv 1 for ja og 0 for nei: '))
print()
```
%% Cell type:markdown id: tags:
e)
%% Cell type:code id: tags:
``` python
import random
mer = 1
antallRette = 0
ovreGrense = 5
while mer:
a = random.randint(0,ovreGrense)
b = random.randint(0,ovreGrense)
svar = a*b
antall = 2
for x in range(3):
brukerInput = int(input('Hva blir '+str(a)+'*'+str(b)+'? '))
if brukerInput==svar:
print('Gratulerer, det er helt riktig!')
antallRette +=1
break
else:
print('Dessverre ikke riktig. Du har',antall,'forsøk igjen.')
antall-=1
if antall <0:
antallRette = 0
print('Dessverre klarte du ikke dette regnestykket, men vent så får du et nytt et:)')
mer = int(input('Er det ønskelig med flere spørsmål? Skriv 1 for ja og 0 for nei: '))
if antallRette%5==0 and antallRette>0:
ovreGrense +=5
print()
```
%% Cell type:markdown id: tags:
a)
%% Cell type:code id: tags:
``` python
def fibonacci(n):
fib, fib_next = 0,1
if n==0:
return fib
elif n==1:
return fib_next
else:
for i in range(2,n+1):
fib, fib_next = fib_next , fib+fib_next
return fib
##Evt med arrays
def fibonacci(k):
array = [0,1]
if k == 0 or k == 1 :
return array[k]
else:
for i in range(2,k):
array.append(array[i-1] + array[i-2])
return array[-1]
print(fibonacci(10))
```
%% Output
34
%% Cell type:markdown id: tags:
b)
%% Cell type:code id: tags:
``` python
def fibonacci_sum(n):
fib, fib_next = 0,1
summen = 0
if n==0:
return fib
elif n == 1:
return fib_next
else:
for i in range(2,n+1):
fib, fib_next = fib_next , fib+fib_next
summen += fib
return fib, summen
# Ev med arrays
def fibonacci_sum(k):
array = [0,1]
if k == 0 :
return 0
elif k == 1:
return 1
else:
summen = 1
for i in range(2,k):
array.append(array[i-1] + array[i-2])
summen += array[-1]
return array[-1], summen
```
%% Cell type:markdown id: tags:
c)
%% Cell type:code id: tags:
``` python
# ev med arrays
def fibonacci_list(k):
array = [0,1]
if k == 0 or k == 1:
return array[i]
else:
for i in range(2,k):
array.append(array[i-1] + array[i-2])
return array
```
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
a)
%% Cell type:code id: tags:
``` python
def geometrisk_rekke(r,n):
summen = 0
for i in range(n +1):
summen += r**i
return summen
geometrisk_rekke(0.5,4)
```
%% Output
1.9375
%% Cell type:markdown id: tags:
b) og c)
%% Cell type:code id: tags:
``` python
def geometrisk_rekke_tol(tol, r):
limit = 1/(1-r)
s, i = 0, 0
while limit - s >= tol:
s += r**i
i += 1
return i, limit-s
print(geometrisk_rekke_tol(0.001,0.5))
```
%% Output
(11, 0.0009765625)
%% Cell type:code id: tags:
``` python
```
%% Cell type:code id: tags:
``` python
import random
a = int(input("Oppgi en nedre grense: "))
b = int(input("Oppgi en øvre grense: "))
def gjettelek(a,b):
tilfeldigTall = random.randint(a,b)
guess = int(input("Make a guess? "))
while guess != tilfeldigTall:
if tilfeldigTall > guess:
print ("The correct number is higher")
else:
print("The correct number is lower")
guess = int(input("Make a guess? "))
print("Correct, well done! ")
gjettelek(a,b)
```
%% Cell type:code id: tags:
``` python
hemmelig_ord = input("Angi hemmelig ord")
antall_liv = int(input("Angi antall liv"))
def sjekk_bokstaver(hemmelig_ord, antall_liv):
while antall_liv > 0:
bokstav = input("Gjett en bokstav i ordet :")
if bokstav in hemmelig_ord:
print(" Stemmer, bokstaven er i ordet")
else:
antall_liv -= 1
print("bokstaven er ikke i ordet")
print("Du har ", antall_liv, "liv igjen")
sjekk_bokstaver(hemmelig_ord,antall_liv)
```
%% Output
Angi hemmelig ordhemmelig
Angi antall liv2
Gjett en bokstav i ordet :h
Stemmer, bokstaven er i ordet
Gjett en bokstav i ordet :e
Stemmer, bokstaven er i ordet
Gjett en bokstav i ordet :m
Stemmer, bokstaven er i ordet
Gjett en bokstav i ordet :m
Stemmer, bokstaven er i ordet
Gjett en bokstav i ordet :e
Stemmer, bokstaven er i ordet
Gjett en bokstav i ordet :l
Stemmer, bokstaven er i ordet
Gjett en bokstav i ordet :f
bokstaven er ikke i ordet
Du har 1 liv igjen
Gjett en bokstav i ordet :d
bokstaven er ikke i ordet
Du har 0 liv igjen
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
a)
%% Cell type:code id: tags:
``` python
ant_stud = int(input("Hvor mange studenter? "))
ant_emner = int(input("Hvor mange emner? "))
for x in range(1, ant_stud+1):
for y in range(1, ant_emner+1):
print("Stud", x, "elsker Emne", y, end=" ; ")
print()
```
%% Cell type:markdown id: tags:
EKSTRAOPPGAVE (her er selvsagt andre valg for personnavn, emnenavn og verb m.m. mulig):
%% Cell type:code id: tags:
``` python
from random import random
stud = ['Ada', 'Grace', 'Guido', 'Linus', 'Runa']
emner = ['Ex.phil.', 'Ex.fac.', 'Matte', 'ITGK']
for st in stud:
print(st, end = " ")
for em in emner:
tall = random()
if tall > 0.9:
verb = 'elsker'
elif tall > 0.6:
verb = 'digger'
elif tall > 0.3:
verb = 'liker'
else:
verb = '"liker"'
print(verb, em, end = "; ")
print()
```
%% Cell type:markdown id: tags:
b)
"Rett fram"-løsning på denne er en dobbel løkke med print() i den innerste. Dette programmet vil imidlertid gå fryktelig tregt:
%% Cell type:code id: tags:
``` python
for x in range(24):
for y in range(60):
print(x + ":" + y)
```
%% Cell type:markdown id: tags:
Årsaken til høyt tidsforbruk er at print ut på skjermen er tidkrevende. Hvis man ønsker et raskere program vil det derfor lønne seg å printe færre ganger, og da skrive større bolker av tekst hver gang. Mest ekstremt kan man samle opp alt som skal printes i en stor streng som man skriver ut når den doble løkka er ferdig:
%% Cell type:code id: tags:
``` python
ut_streng = ""
for x in range(24):
for y in range(60):
ut_streng += str(x) + ":" + str(y) + "\n"
# "\n" er linjeskift
print(ut_streng)
```
%% Cell type:markdown id: tags:
Dette vil gå mye raskere enn den første versjonen.
Men hva om man heller ville at det skulle gå tregere, at nytt klokkeslett skal vises når det ha gått akkurat et minutt? I så fall må den første versjonen brukes, med tillegg av kode for å vente et minutt mellom hver utskrift:
%% Cell type:code id: tags:
``` python
import time
for x in range(24):
for y in range(60):
print(x + ":" + y)
time.sleep(60)
```
%% Cell type:markdown id: tags:
I tillegg kan du evt. google deg fram til andre funksjoner i time-modulen som kan brukes til å få programmet til å starte med nåtidspunktet, heller enn på 0:0.
c)
%% Cell type:code id: tags:
``` python
for x in range(1, 11):
for y in range(1, 11):
print(x*y)
#finere utskrift:
for x in range(1, 11):
for y in range(1, 11):
print(x*y, end=' ')
print()
```