Skip to content
Snippets Groups Projects
Commit 1b27c600 authored by Axel Mender's avatar Axel Mender
Browse files

Oving3

parent 62c56d62
Branches
No related tags found
No related merge requests found
%% Cell type:markdown id: tags:
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="_Oving3.ipynb">Øving 3</a>
</div>
<ul class="nav navbar-nav">
<li ><a href="Intro%20til%20lokker.ipynb">Intro til løkker</a></li>
<li ><a href="Mer%20om%20lokker.ipynb">Mer om løkker</a></li>
<li><a href="Nostede%20lokker.ipynb">Intro til nøstede løkker</a></li>
<li ><a href="Kodeforstaelse.ipynb">Kodeforståelse</a></li>
<li ><a href="Gjett%20tallet.ipynb">Gjett tallet</a></li>
<li ><a href="Geometrisk%20rekke.ipynb">Geometrisk rekke</a></li>
<li ><a href="Tekstbasert%20spill%202.ipynb">Tekstbasert spill 2</a></li>
<li ><a href="Fibonacci.ipynb">Fibonacci</a></li>
<li class="active"><a href="Alternerende%20sum.ipynb">Alternerende sum</a></li>
<li ><a href="Hangman.ipynb">Hangman</a></li>
<li ><a href="Doble%20lokker.ipynb">Doble løkker</a></li>
</ul>
</div>
</nav>
# Alternerende sum
**Læringsmål:**
* Løkker
**Starting Out with Python:**
* Kap. 4.2-4.3
I denne oppgaven skal du ved hjelp av løkker summere sammen tall, basert på brukerinput.
%% Cell type:markdown id: tags:
**a)** Skriv et program som leser inn et heltall n fra bruker og legger sammen tallserien under.
**$1^{2}-2^{2}+3^{2}-4^{2}+5^{2}-\cdot \cdot \cdot \pm n^{2}$**
Legg merke til at alle partallene har negativt fortegn og alle oddetallene har positivt fortegn. Husk at navnet på variabelen din ***ikke*** kan være **sum**, ettersom dette er navnet på en funksjon i python. Husk også at range() bare går til et tall og ikke til og med.
Eksempel på kjøring:
```python
n = 7
Summen av tallserien er 28
```
***Skriv koden din her:***
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
**b)** Skriv et nytt program slik at det avslutter iterasjonen **før** summen av tallene er større enn det positive heltallet k. Dette vil si at resultatet som skal skrives ut er summen siste ledd før summen går over tallet k.
Hold styr hvor mange ledd fra tallserien som er brukt i summen og skriv dette ut sammen med resultatet.
Eksempel kjøring:
```python
k = 6
Summen av tallene før summen blir større enn k er -10. Antall iterasjoner: 4
```
```python
k = 12
Summen av tallene før summen blir større enn k er -10. Antall iterasjoner: 4
```
```python
k = 15
Summen av tallene før summen blir større enn k er -21. Antall iterasjoner: 6
```
***Skriv koden din her:***
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="_Oving3.ipynb">Øving 3</a>
</div>
<ul class="nav navbar-nav">
<li ><a href="Intro%20til%20lokker.ipynb">Intro til løkker</a></li>
<li ><a href="Mer%20om%20lokker.ipynb">Mer om løkker</a></li>
<li><a href="Nostede%20lokker.ipynb">Intro til nøstede løkker</a></li>
<li ><a href="Kodeforstaelse.ipynb">Kodeforståelse</a></li>
<li ><a href="Gjett%20tallet.ipynb">Gjett tallet</a></li>
<li ><a href="Tekstbasert%20spill%202.ipynb">Tekstbasert spill 2</a></li>
<li ><a href="Geometrisk%20rekke.ipynb">Geometrisk rekke</a></li>
<li ><a href="Fibonacci.ipynb">Fibonacci</a></li>
<li><a href="Alternerende%20sum.ipynb">Alternerende sum</a></li>
<li ><a href="Hangman.ipynb">Hangman</a></li>
<li class="active"><a href="Doble%20lokker.ipynb">Doble løkker</a></li>
</ul>
</div>
</nav>
# Doble løkker - til dels vanskelig
**Læringsmål:**
* Nøstede løkker
**Starting Out with Python:**
* Kap. 4.7
%% Cell type:markdown id: tags:
a) Skriv et program som benytter seg av en dobbel for-løkke og skriver ut følgende:
```python
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
```
***Skriv koden din her:***
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
b) Skriv et program som benytter seg av en dobbel for-løkke og skriver ut følgende:
```python
X X
X X
X X
X X
X X
```
***Skriv koden din her:***
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
**c)** Skriv et program som lar brukeren gi som input fra tastaturet et positivt heltall. Programmet skal da skrive ut primtallsfaktoriseringen til tallet, eller evt. at det allerede er et primtall. Eksempel på et par kjøringer:
```python
Skriv inn et positivt heltall: 2
2 er et primtall
>>>
Skriv inn et positivt heltall: 38
38 = 2*19
>>>
Skriv inn et positivt heltall: 1000
1000 = 2*2*2*5*5*5
>>>
Skriv inn et positivt heltall: 73727
73727 er et primtall
>>>
Skriv inn et positivt heltall: 123456789
123456789 = 3*3*3607*3803
>>>
```
Dette er et problem som peker i retning av dobbel løkke fordi samme tall kan være faktor flere ganger, som f.eks. i `1000 = 2*2*2*5*5*5`. Den ytre løkka trengs for å prøve ut stadig nye faktorer, den indre for å prøve om igjen samme faktor, i tilfelle den inngår flere ganger i tallet.
***Skriv koden din her:***
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
**d)** Du skal hjelpe frøken Bernsen med å lage et enkelt program hvor elevene kan øve seg på den lille gangetabellen. Eleven skal stadig møte på nye gangestykker, og får 3 forsøk på hvert spørsmål. Benytt deg av randint(0,9) for å få tilfeldige tall for hvert gangestykke. Programmet skal fortsette frem til eleven gir beskjed om noe annet.
Eksempel på kjøring:
```python
Hva blir 2*0? 0
Gratulerer, det er helt riktig!
Er det ønskelig med flere spørsmål? Skriv 1 for ja og 0 for nei: 1
>>>
Hva blir 8*6? 42
Dessverre ikke riktig. Du har 2 forsøk igjen.
Hva blir 8*6? 48
Gratulerer, det er helt riktig!
Er det ønskelig med flere spørsmål? Skriv 1 for ja og 0 for nei: 1
>>>
Hva blir 8*9? 73
Dessverre ikke riktig. Du har 2 forsøk igjen.
Hva blir 8*9? 74
Dessverre ikke riktig. Du har 1 forsøk igjen.
Hva blir 8*9? 78
Dessverre ikke riktig. Du har 0 forsøk igjen.
Dessverre klarte du ikke dette regnestykket, men vent så får du et nytt et:)
Er det ønskelig med flere spørsmål? Skriv 1 for ja og 0 for nei: 1
>>>
Hva blir 9*1? 9
Gratulerer, det er helt riktig!
Er det ønskelig med flere spørsmål? Skriv 1 for ja og 0 for nei: 0
>>>
```
***Skriv koden din her:***
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
**e)** (frivillig)
Du skal endre programmet ditt fra d) slik at eleven først får veldig lette gangestykker ved å bruke randint(0,5) (fra random-biblioteket). Dersom eleven klarer å svare rett på 5 spørsmål på rad (eleven kan fremdeles bruke 3 forsøk), skal vanskelighetsgraden øke ved å bruke randint(0,10). Dette intervallet skal altså øke med 5 for hver gang eleven svarer korrekt på 5 spørsmål på rad.
Eksempel på kjøring:
```python
Hva blir 1*2? 2 #1 riktig svar
Gratulerer, det er helt riktig!
Er det ønskelig med flere spørsmål? Skriv 1 for ja og 0 for nei: 1
```
```python
Hva blir 1*5? 5 #2 riktige svar
Gratulerer, det er helt riktig!
Er det ønskelig med flere spørsmål? Skriv 1 for ja og 0 for nei: 1
```
```python
Hva blir 3*5? 15 #3 riktige svar
Gratulerer, det er helt riktig!
Er det ønskelig med flere spørsmål? Skriv 1 for ja og 0 for nei: 1
```
```python
Hva blir 2*1? 2 #4 riktige svar
Gratulerer, det er helt riktig!
Er det ønskelig med flere spørsmål? Skriv 1 for ja og 0 for nei: 1
```
```python
Hva blir 2*0? 2
Dessverre ikke riktig. Du har 2 forsøk igjen.
Hva blir 2*0? 0 #5 riktige svar
Gratulerer, det er helt riktig!
Er det ønskelig med flere spørsmål? Skriv 1 for ja og 0 for nei: 1
```
```python
Hva blir 0*10? 0 #Intervallet har økt og 1 riktig svar
Gratulerer, det er helt riktig!
Er det ønskelig med flere spørsmål? Skriv 1 for ja og 0 for nei: 1
.
.
.
Hva blir 15*29? 435
Gratulerer, det er helt riktig!
Er det ønskelig med flere spørsmål? Skriv 1 for ja og 0 for nei: 0
```
%% Cell type:markdown id: tags:
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="_Oving3.ipynb">Øving 3</a>
</div>
<ul class="nav navbar-nav">
<li ><a href="Intro%20til%20lokker.ipynb">Intro til løkker</a></li>
<li ><a href="Mer%20om%20lokker.ipynb">Mer om løkker</a></li>
<li><a href="Nostede%20lokker.ipynb">Intro til nøstede løkker</a></li>
<li ><a href="Kodeforstaelse.ipynb">Kodeforståelse</a></li>
<li ><a href="Gjett%20tallet.ipynb">Gjett tallet</a></li>
<li ><a href="Tekstbasert%20spill%202.ipynb">Tekstbasert spill 2</a></li>
<li ><a href="Geometrisk%20rekke.ipynb">Geometrisk rekke</a></li>
<li class="active"><a href="Fibonacci.ipynb">Fibonacci</a></li>
<li><a href="Alternerende%20sum.ipynb">Alternerende sum</a></li>
<li ><a href="Hangman.ipynb">Hangman</a></li>
<li ><a href="Doble%20lokker.ipynb">Doble løkker</a></li>
</ul>
</div>
</nav>
# Fibonacci
**Læringsmål:**
* Løkker
**Starting Out with Python:**
* Kap. 4.3
<br><br>
I denne oppgaven skal du bruke løkker til å regne ut fibonaccitall.
Fibonaccitallene er definert som følger:
* **f(0)=0**
* **f(1)=1**
* **f(k)=f(k−1)+f(k−2)**
Det vil si at de to første tallene i rekken er 0 og 1, deretter er det neste tallet summen av de to forrige tallene. Starten på rekken ser derfor slik ut: 0 1 1 2 3 5 8 13 ...
%% Cell type:markdown id: tags:
**a)** Lag et program som regner ut og returnerer det k-te fibonaccitallet f(k) ved hjelp av iterasjon. Har du gjort det rett skal det 10-ende Fibonaccitallet bli 34. **Husk at det første tallet i rekken er tall nummer 0**
***Skriv koden din her:***
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
**b)** Skriv om programmet i deloppgave a) slik at det også regner ut summen av alle fibonaccitallene. Har du gjort det rett det rett skal summen av Fibonaccitallene opp til 10 bli 88.
%% Cell type:markdown id: tags:
**c)** (**Frivillig**, vanskeligere oppgave) Modifiser programmet til å returnere en liste med alle fibonaccitallene opp til og med f(k).
Husk å skrive ut svarene til skjerm.
%% Cell type:markdown id: tags:
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="_Oving3.ipynb">Øving 3</a>
</div>
<ul class="nav navbar-nav">
<li ><a href="Intro%20til%20lokker.ipynb">Intro til løkker</a></li>
<li ><a href="Mer%20om%20lokker.ipynb">Mer om løkker</a></li>
<li><a href="Nostede%20lokker.ipynb">Intro til nøstede løkker</a></li>
<li ><a href="Kodeforstaelse.ipynb">Kodeforståelse</a></li>
<li ><a href="Gjett%20tallet.ipynb">Gjett tallet</a></li>
<li ><a href="Tekstbasert%20spill%202.ipynb">Tekstbasert spill 2</a></li>
<li class="active"><a href="Geometrisk%20rekke.ipynb">Geometrisk rekke</a></li>
<li ><a href="Fibonacci.ipynb">Fibonacci</a></li>
<li><a href="Alternerende%20sum.ipynb">Alternerende sum</a></li>
<li ><a href="Hangman.ipynb">Hangman</a></li>
<li ><a href="Doble%20lokker.ipynb">Doble løkker</a></li>
</ul>
</div>
</nav>
# Geometrisk rekke
**Læringsmål:**
* Løkker
**Starting Out with Python:**
* Kap. 4.2-4.3
En geometrisk rekke er en sum som kan skrives på formen under:
$\sum_{i=0}^{n}r^{i}=r^{0}+r^{1}+r^{2}+r^{3}+\cdot \cdot \cdot +r^{n}$
$r \in (-1,1)$
%% Cell type:markdown id: tags:
### a)
%% Cell type:markdown id: tags:
Lag et program som summerer en geometrisk rekke fra 0 til n ved hjelp av en while løkke.
Sjekk: r = 0.5 og n = 4 skal gi sum = 1.9375
***Skriv koden din her:***
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
### b)
%% Cell type:markdown id: tags:
Skriv om programmet ditt slik at løkken avsluttes når din sum er innenfor en toleranse tol til grenseverdien av summen (verdien til summen når n går mot uendelig; se hint).
Test dette med tol = 0.001, r = 1/2, som vist i eksempelet under.
%% Cell type:markdown id: tags:
#### Hint
%% Cell type:markdown id: tags:
Summen til en geometrisk rekke er $\frac{1-r^{n+1}}{1-r}$
. For rekken i b) blir grenseverdien $\frac{1}{1-r}$ = 2.
%% Cell type:markdown id: tags:
### c)
%% Cell type:markdown id: tags:
La programmet gi ut antall iterasjoner som trengs for å være innenfor toleransen. Gi også ut den virkelige differansen mellom summen du fant og grenseverdien.
%% Cell type:markdown id: tags:
### Eksempel
%% Cell type:markdown id: tags:
Eksempel kjøring av kode a, b, og c:
```
#a)
Summen av rekken er 1.9375
#b&c)
For å være innenfor toleransegrensen: 0.001 , kjørte løkken 11 ganger.
Differansen mellom virkelig og estimert verdi var da 0.0009765625
```
%% Cell type:markdown id: tags:
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="_Oving3.ipynb">Øving 3</a>
</div>
<ul class="nav navbar-nav">
<li ><a href="Intro%20til%20lokker.ipynb">Intro til løkker</a></li>
<li ><a href="Mer%20om%20lokker.ipynb">Mer om løkker</a></li>
<li><a href="Nostede%20lokker.ipynb">Intro til nøstede løkker</a></li>
<li ><a href="Kodeforstaelse.ipynb">Kodeforståelse</a></li>
<li class="active"><a href="Gjett%20tallet.ipynb">Gjett tallet</a></li>
<li ><a href="Tekstbasert%20spill%202.ipynb">Tekstbasert spill 2</a></li>
<li ><a href="Geometrisk%20rekke.ipynb">Geometrisk rekke</a></li>
<li ><a href="Fibonacci.ipynb">Fibonacci</a></li>
<li><a href="Alternerende%20sum.ipynb">Alternerende sum</a></li>
<li ><a href="Hangman.ipynb">Hangman</a></li>
<li ><a href="Doble%20lokker.ipynb">Doble løkker</a></li>
</ul>
</div>
</nav>
# Gjettelek
**Læringsmål:**
* Løkker
* Betingelser
* Innebygde funksjoner
**Starting Out with Python:**
* Kap. 4.2-4.3
I denne oppgaven skal du lage et program som genererer et tilfeldig heltall i et gitt intervall, og deretter lar brukeren gjette på hvilket tall dette er. Dette bør gjøres ved bruk av løkker.
I denne oppgaven må du benytte deg av biblioteket random. Derfor skal koden din starte med `import random`.
Eksempel på bruk av random.randint()
```python
tilfeldigTall = random.randint(1,50) #gir deg et tilfeldig tall fra og med 1, til og med 50
tall = random.randint(a,b) #gir deg et tilfeldig tall mellom a og b. (Fra og med a, til og med b)
```
%% Cell type:markdown id: tags:
**a)** Be brukeren om å velge en nedre og en øvre grense for tall han eller hun skal gjette på. Lagre disse to opplysningene i to variabler.
***Skriv koden din her:***
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
**b)** Lag en variabel TilfeldigTall som genererer et tilfeldig tall i intervallet mellom den øvre og den nedre grensen som brukeren har satt. Fortsett å skriv i samme felt som i oppgave a.
%% Cell type:markdown id: tags:
**c)** Skriv en while-løkke som kjører lenge brukeren ikke har gjettet riktig svar. Brukeren skal tilbakemelding for hvert gjett om han eller hun gjettet for lavt, for høyt eller riktig. Fortsett å skriv i samme felt som i oppgave a og b.
Eksempel kjøring:
```python
Gi en nedre grense for det tilfeldige tallet: 1
Gi en øvre grense for det tilfeldige tallet: 100
Make a guess 50
The correct number is lower
Make a guess 25
The correct Number is higher
Make a guess 37
The correct number is lower
Make a guess 32
You guessed correct!```
%% Cell type:markdown id: tags:
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="_Oving3.ipynb">Øving 3</a>
</div>
<ul class="nav navbar-nav">
<li ><a href="Intro%20til%20lokker.ipynb">Intro til løkker</a></li>
<li ><a href="Mer%20om%20lokker.ipynb">Mer om løkker</a></li>
<li><a href="Nostede%20lokker.ipynb">Intro til nøstede løkker</a></li>
<li ><a href="Kodeforstaelse.ipynb">Kodeforståelse</a></li>
<li ><a href="Gjett%20tallet.ipynb">Gjett tallet</a></li>
<li ><a href="Tekstbasert%20spill%202.ipynb">Tekstbasert spill 2</a></li>
<li ><a href="Geometrisk%20rekke.ipynb">Geometrisk rekke</a></li>
<li ><a href="Fibonacci.ipynb">Fibonacci</a></li>
<li><a href="Alternerende%20sum.ipynb">Alternerende sum</a></li>
<li class="active"><a href="Hangman.ipynb">Hangman</a></li>
<li ><a href="Doble%20lokker.ipynb">Doble løkker</a></li>
</ul>
</div>
</nav>
**Læringsmål:**
* Betingelser
* While-løkker
**Starting Out with Python:**
* Kap. 3.4
* Kap. 4.2
Kapittel fire introduserer repetisjonsstrukturer. Dette er en mye brukt programmeringsteknikk som brukes når et program skal utføre den samme oppgaven mange ganger etter hverandre. I denne oppgaven bruker vi en enkel while-løkke for å lage et hangman-spill i Python.
Lag et program som tar inn et ord (tekststreng) og antall liv (heltall) fra en bruker, og lar en annen (eller samme) bruker gjette på bokstaver i ordet.
%% Cell type:markdown id: tags:
**a)** Start med å hente inn data fra bruker. Lagre dette i to variabler "hemmelig_ord" og "antall_liv".
***Skriv koden din her.***
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
**b)** Under har vi laget en while-løkke som kjører evig. Din oppgave er å fylle inn manglende logikk inne i løkken. Ting som gjøres er:
* Hent inn en bokstav fra bruker
* Sjekk om denne er i det hemmelige ordet
* Trekk fra et liv dersom brukeren tipper feil
* Hvis brukeren ikke har flere liv skal løkken avsluttes (HINT: bruk "break" for å avslutte en løkke)
PS: Husk å skrive ut resultatet til brukeren. **Du kan bruke variablene du laget i oppgave a uten å skrive dem nytt**
Eksempel kjøring av kode:
```python
Skriv inn det hemmelige ordet: hemmelig
Hvor mange forsøk får brukeren? 2
Gjett på én bokstav i ordet: f
Bokstaven f er ikke i ordet.
Du har 1 liv igjen, prøv på nytt.
Gjett på én bokstav i ordet: h
Stemmer, bokstaven er i ordet
Gjett på én bokstav i ordet: e
Stemmer, bokstaven er i ordet
Gjett på én bokstav i ordet: r
Bokstaven r er ikke i ordet.
Du har ingen liv igjen.
```
%% Cell type:code id: tags:
``` python
while True:
# do something
```
%% Cell type:markdown id: tags:
**d)** **FRIVILLIG vanskeligere oppgave**: Fyll inn logikk for å fullføre spillet. Ting som kan implementeres er:
* Avslutt løkken hvis brukeren har gjettet alle bokstavene i løsningsordet.
* For hvert gjett, print ut maskert løsningsord med stjerner for hver bokstav som fortsatt ikke er gjettet. `(Eks.: lø*ning*ord)`
Du kan fortsette i samme kodefelt som oppgave b.
This diff is collapsed.
%% Cell type:markdown id: tags:
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="_Oving3.ipynb">Øving 3</a>
</div>
<ul class="nav navbar-nav">
<li ><a href="Intro%20til%20lokker.ipynb">Intro til løkker</a></li>
<li ><a href="Mer%20om%20lokker.ipynb">Mer om løkker</a></li>
<li><a href="Nostede%20lokker.ipynb">Intro til nøstede løkker</a></li>
<li class="active"><a href="Kodeforstaelse.ipynb">Kodeforståelse</a></li>
<li ><a href="Gjett%20tallet.ipynb">Gjett tallet</a></li>
<li ><a href="Tekstbasert%20spill%202.ipynb">Tekstbasert spill 2</a></li>
<li ><a href="Geometrisk%20rekke.ipynb">Geometrisk rekke</a></li>
<li ><a href="Fibonacci.ipynb">Fibonacci</a></li>
<li><a href="Alternerende%20sum.ipynb">Alternerende sum</a></li>
<li ><a href="Hangman.ipynb">Hangman</a></li>
<li ><a href="Doble%20lokker.ipynb">Doble løkker</a></li>
</ul>
</div>
</nav>
# Kodeforståelse
**Læringsmål:**
* Tolke kode
Koden under kan ikke kjøres, her skal du tenke deg fram til svarene! Ca. 20% av eksamen er kodeforståelse så se på dette som god trening!
%% Cell type:markdown id: tags:
**a)** Hva skrives ut i koden under?
%% Cell type:markdown id: tags:
```python
a=345
b=''
while a or b=='':
b=str(a%2)+b
a=a//2
print(b)
```
%% Cell type:markdown id: tags:
Svar: < dobbeltklikk her>
%% Cell type:markdown id: tags:
**b)** Hva skrives ut i koden under?
%% Cell type:markdown id: tags:
```python
for x in range(0, 10, 2):
print(x, end='')
if x%4==0:
print( ": Dette tallet går opp i 4-gangern")
else:
print()
```
`end=""` gjør at det neste som printes ikke printes en linje under, men at det fortsetter samme linje.
%% Cell type:markdown id: tags:
Svar: < dobbeltklikk her>
%% Cell type:markdown id: tags:
**c)** Hva skrives ut i koden under?
%% Cell type:markdown id: tags:
```python
i = 1
while i<10:
i = i*2
print(i)
```
%% Cell type:markdown id: tags:
Svar: < dobbeltklikk her>
%% Cell type:markdown id: tags:
**d)** Hva skrives ut i koden under?
%% Cell type:markdown id: tags:
```python
i = 1
j = 3
while j>0:
i = i*2
j = j - 1
print(i)```
%% Cell type:markdown id: tags:
Svar: < dobbeltklikk her>
%% Cell type:markdown id: tags:
**e)** Hva skrives ut i koden under?
```python
i = 5
for x in range(i):
for y in range(x+1):
print("*", end="")
print()```
Her er det en dobbel løkke, så dette er nok nytt for mange. Prøv likevel! Hvordan fungerer egentlig en løkke i en løkke? Se side 176 i Starting Out with Python.
%% Cell type:markdown id: tags:
Svar: < dobbeltklikk her>
%% Cell type:markdown id: tags:
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="_Oving3.ipynb">Øving 3</a>
</div>
<ul class="nav navbar-nav">
<li ><a href="#">Intro til løkker</a></li>
<li class="active"><a href="Mer%20om%20lokker.ipynb">Mer om løkker</a></li>
<li><a href="Nostede%20lokker.ipynb">Intro til nøstede løkker</a></li>
<li><a href="Kodeforstaelse.ipynb">Kodeforståelse</a></li>
<li ><a href="Gjett%20tallet.ipynb">Gjett tallet</a></li>
<li ><a href="Geometrisk%20rekke.ipynb">Geometrisk rekke</a></li>
<li ><a href="Tekstbasert%20spill%202.ipynb">Tekstbasert spill 2</a></li>
<li ><a href="Fibonacci.ipynb">Fibonacci</a></li>
<li><a href="Alternerende%20sum.ipynb">Alternerende sum</a></li>
<li ><a href="Hangman.ipynb">Hangman</a></li>
<li ><a href="Doble%20lokker.ipynb">Doble løkker</a></li>
</ul>
</div>
</nav>
# Mer om løkker - oppsamlingsløkker
**Læringsmål:**
* Løkker
**Starting Out with Python:**
* Kap. 4.2-4.3
I denne oppgaven ser vi spesielt på løkker som samler opp et resultat underveis. Hvis du har programmert noe før, vil dette være enkle oppgaver, men for deg som er helt uerfaren, se gjerne på følgende tutorial om oppsamlingsløkker før du setter i gang:
%% Cell type:markdown id: tags:
### Tutorial om oppsamlingsløkker
%% Cell type:markdown id: tags:
Ofte brukes løkker til å samle opp et resultat (f.eks. en tallverdi) som vi er interessert i å finne. Et enkelt eksempel på en oppsamlingsløkke, er følgende som summerer alle tallene fra og med 1 til og med 100 (som egentlig er en unødvendig løkke å kjøre siden resultatet er kjent på forhånd, men greit å bruke som illustrasjon):
%% Cell type:code id: tags:
``` python
summen = 0
for i in range(1, 101):
summen += i # summen = summen + i
print("Summen av tallene 1-100:", summen)
```
%% Cell type:markdown id: tags:
range() må ha 101 som sluttverdi fordi den er til men ikke med, dvs. hvis tallet 100 skal være med i summen. Variabelen **summen** er den som brukes til å samle opp resultatet underveis. Det kunne ha vært fristende å kalle variabelen bare sum, men dette er navnet på en standardfunksjon i Python og dermed ikke lurt å bruke som variabelnavn. Merk deg at summen må defineres **før** løkka, og der gis verdien 0 (fordi vi ikke har summert inn noen av tallene ennå). Dette fordi vi inni løkka ønsker å utføre summen = summen + 1 (som kortere kan skrives summen += 1), og et slikt uttrykk hvor summen også fins på høyre side av = kan bare fungere hvis den allerede har fått en verdi. Måten dette programmet funker på, er altså at vi starter med å gi summen verdi 0. Så begynner løkka, med i = 1, og vi legger til i (dvs. 1) til summen som da blir 1. Så blir i 2, som legges til summen, som nå blir 3. Så i=3, summen = 6. Så i=4, summen = 10, osv. Siste gang løkka kjøres er i=100 og summen blir 5050, så avslutter løkka og vi printer resultatet på skjermen.
Tilsvarende hvis vi skulle gange sammen alle tallene 1-20:
%% Cell type:code id: tags:
``` python
produktet = 1
for i in range(1, 20):
produktet *= i # produktet = produktet * i
print("Produktet av tallene 1-20:", produktet)
```
%% Cell type:markdown id: tags:
Strukturelt er dette temmelig likt - en viktig forskjell er at når vi skal gange, blir riktig startverdi 1 (som er det tallet som ikke påvirker et produkt) mens det var 0 for summering.
Til slutt et lite eksempel der det passer bedre med while enn med for, fordi vi ikke aner antall repetisjoner:
%% Cell type:code id: tags:
``` python
print("Skriv inn ett og ett positivt heltall.")
print("For å avslutte, skriv et negativt tall (dette telles ikke med).")
tall = int(input("Tall: "))
storst = tall # første tall er størst, inntil annet bevist
antall = 0
while tall >= 0:
if tall > storst:
storst = tall
antall += 1
tall = int(input("Tall: "))
print("Du skrev inn", antall, "tall.")
print("Det største var", storst)
```
%% Cell type:markdown id: tags:
Her skriver brukeren inn en serie tall fra tastaturet - og gir et negativt tall for å avslutte - og programmets oppgave til slutt er å kunne fortelle hvor mange tall som ble skrevet inn (bortsett fra det negative), og hva som var det største av tallene. For å telle opp antallet, har vi variabelen antall som settes til 0 før løkka, og deretter økes med 1 for hver runde av løkka. For å finne det største tallet, antar vi før løkka at det første tallet også er det største. (Vi må uansett lese det første tallet før løkka, for at while-testen skal funke). Deretter tester vi for hver runde av løkka om det sist innleste tallet er større enn det som var størst hittil, i så fall gis variabelen storst verdien til dette nye tallet i stedet. Variabelen storst vil dermed til en hver tid inneholde den største verdien hittil.
%% Cell type:markdown id: tags:
### a)
%% Cell type:markdown id: tags:
Lag et program som ved hjelp av en løkke ber brukeren om å taste inn 7 heltall, som vist i eksemplet på kjøring under. Til slutt skal programmet skrive ut hva summen av tallene ble.
Eksempel på kjøring:
```
Skriv inn et heltall: 6
Skriv inn et heltall: 4
Skriv inn et heltall: 7
Skriv inn et heltall: 3
Skriv inn et heltall: 2
Skriv inn et heltall: 456
Skriv inn et heltall: 99
Summen av tallene ble 577
```
***Skriv koden din her:***
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
#### Hint
%% Cell type:markdown id: tags:
Du vil trenge en variabel til å summere inn ett og ett nytt tall for hver runde av løkka. Husk at denne variabelen være opprettet og gitt en passende startverdi før løkka, ellers vil du ikke klare å bruke den i løkka.
%% Cell type:markdown id: tags:
### b)
%% Cell type:markdown id: tags:
Lag et program som multipliserer sammen alle tallene fra 1,2,3,... og avslutter når produktet er større enn 1000.
***Skriv koden din her:***
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
#### Hint 2
%% Cell type:markdown id: tags:
Du vet ikke på forhånd hvor lenge du kan multiplisere tallene før du får et produkt større enn 1000, så her kan det være lurt å bruke en while-løkke med produkt mindre enn 1000 som betingelse. Svaret skal bli 5040. Som for oppgave (a) vil du trenge en variabel til å gange inn ett og ett nytt tall for hver runde av løkka, og som må ha fått en passende startverdi før løkka. Merk at passende startverdi for en variabel som skal samle opp et produkt, vil være et annet tall enn det man bruker som startverdi for å samle opp en sum.
%% Cell type:markdown id: tags:
### c)
%% Cell type:markdown id: tags:
Lag et program som stiller brukeren det samme spørsmålet, om og om igjen, helt til det korrekte svaret blir skrevet. Da skal programmet fortelle hvor mange forsøk som ble brukt. Eksempel på kjøring vist nedenfor, men du kan godt bytte ut med et spørsmål med annen tematikk, noe du selv er interessert i. Se ***hint 3*** dersom du står fast.
Eksempel på kjøring:
```
Hva heter hovedstaden til Niue? Niue City
Det var feil, prøv igjen.
Hva heter hovedstaden til Niue? Niuania
Det var feil, prøv igjen.
Hva heter hovedstaden til Niue? Apia
Det var feil, prøv igjen.
Hva heter hovedstaden til Niue? Alofi
Korrekt!! Du brukte 4 forsøk.
```
***Skriv koden din her:***
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
#### Hint 3
%% Cell type:markdown id: tags:
Du vet ikke hvor mange ganger brukeren svarer feil så det kan være lurt med en while-løkke hvor betingelsen er at brukerens svar != riktig svar.
%% Cell type:markdown id: tags:
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="_Oving3.ipynb">Øving 3</a>
</div>
<ul class="nav navbar-nav">
<li ><a href="Intro%20til%20lokker.ipynb">Intro til løkker</a></li>
<li ><a href="Mer%20om%20lokker.ipynb">Mer om løkker</a></li>
<li class="active"><a href="Nostede%20lokker.ipynb">Intro til nøstede løkker</a></li>
<li><a href="Kodeforstaelse.ipynb">Kodeforståelse</a></li>
<li ><a href="Gjett%20tallet.ipynb">Gjett tallet</a></li>
<li ><a href="Tekstbasert%20spill%202.ipynb">Tekstbasert spill 2</a></li>
<li ><a href="Geometrisk%20rekke.ipynb">Geometrisk rekke</a></li>
<li ><a href="Fibonacci.ipynb">Fibonacci</a></li>
<li><a href="Alternerende%20sum.ipynb">Alternerende sum</a></li>
<li ><a href="Hangman.ipynb">Hangman</a></li>
<li ><a href="Doble%20lokker.ipynb">Doble løkker</a></li>
</ul>
</div>
</nav>
# Intro til nøstede løkker
**Læringsmål:**
* Nøstede løkker
**Starting out with python:**
* Kap. 4.7
I denne oppgaven skal du lære hvordan vi kan benytte oss av en løkke inne i en annen løkke.
%% Cell type:markdown id: tags:
### Intro til nøstede løkker
%% Cell type:markdown id: tags:
Nøstede løkker vil si løkker som er inni andre løkker. Et eksempel på en nøstet løkke er en dobbel løkke, som vil si at det er en løkke inni en annen løkke. Doble løkker brukes mye i programmering, typisk når man skal løse problemer som på en eller annen måte er todimensjonale, f.eks. knyttet til matriser eller todimensjonale tabeller med tall. Todimensjonal her kan bety rent visuelt (f.eks. at man skal tegne noe på en skjerm og må oppdatere fargen i hvert punkt i et rutenett av piksler), men behøver ikke å ha noen visuell betydning. Det kan være snakk om dimensjoner av informasjon på en mer abstrakt måte. F.eks. kan de to dimensjonene være tall og verdier i kortstokken, vi kan da generere en hel kortstokk ved en dobbel løkke som følger:
%% Cell type:code id: tags:
``` python
for farge in ['', '', '', '']:
for verdi in ['A', '2', '3', '4', '5', '6', '7', '8',
'9', '10', 'J', 'Q', 'K']:
print(farge+verdi, end=" ")
print()
```
%% Output
♠A ♠2 ♠3 ♠4 ♠5 ♠6 ♠7 ♠8 ♠9 ♠10 ♠J ♠Q ♠K
♣A ♣2 ♣3 ♣4 ♣5 ♣6 ♣7 ♣8 ♣9 ♣10 ♣J ♣Q ♣K
♥A ♥2 ♥3 ♥4 ♥5 ♥6 ♥7 ♥8 ♥9 ♥10 ♥J ♥Q ♥K
♦A ♦2 ♦3 ♦4 ♦5 ♦6 ♦7 ♦8 ♦9 ♦10 ♦J ♦Q ♦K
%% Cell type:markdown id: tags:
Den innerste løkka går 13 runder hver gang den kjører fordi det er 13 elementer i sekvensen som gis til for-løkka. Den printer de 13 kortene i en farge; end=" " i print-setninga gjør at vi ikke skifter linje men bare setter en blank mellom hvert kort.
print() nederst tilhører den ytre løkka (merk margen), denne sørger for at vi skifter linje etter hver rekke. Den ytre løkka går 4 ganger, en for hver farge i kortstokken
%% Cell type:markdown id: tags:
## a)
%% Cell type:markdown id: tags:
**Eksempel på nøstet løkke:**
%% Cell type:code id: tags:
``` python
for x in range(5):
for y in range(3):
print("Jeg elsker ITGK! ", end=" ")
print()
```
%% Cell type:markdown id: tags:
Koden over vil skrive ut “Jeg elsker ITGK!” tre ganger ved siden av hverandre fem ganger nedover.
Kopier koden i eksemplet "Jeg elsker ITGK!" over og kjør programmet. Denne utskriften trenger man strengt tatt ikke dobbel løkke for å få til; selve utskriften gir riktig nok et todimensjonalt inntrykk, men siden den underliggende informasjonen ikke er todimensjonal men derimot konstant (samme utskrift "Jeg elsker ITGK!" i alle tilfeller), er det også greit mulig å klare dette med enkel løkke, eller helt uten løkker, som følger:
%% Cell type:code id: tags:
``` python
# Løsning med enkel løkke:
for x in range(5):
print("Jeg elsker ITGK! Jeg elsker ITGK! Jeg elsker ITGK!")
# Løsning uten løkker; "\n" er tegnet for linjeskift (newline på engelsk)
print((("Jeg elsker ITGK! " * 3) + "\n") * 5)
```
%% Output
Jeg elsker ITGK! Jeg elsker ITGK! Jeg elsker ITGK!
Jeg elsker ITGK! Jeg elsker ITGK! Jeg elsker ITGK!
Jeg elsker ITGK! Jeg elsker ITGK! Jeg elsker ITGK!
Jeg elsker ITGK! Jeg elsker ITGK! Jeg elsker ITGK!
Jeg elsker ITGK! Jeg elsker ITGK! Jeg elsker ITGK!
Jeg elsker ITGK! Jeg elsker ITGK! Jeg elsker ITGK!
Jeg elsker ITGK! Jeg elsker ITGK! Jeg elsker ITGK!
Jeg elsker ITGK! Jeg elsker ITGK! Jeg elsker ITGK!
Jeg elsker ITGK! Jeg elsker ITGK! Jeg elsker ITGK!
Jeg elsker ITGK! Jeg elsker ITGK! Jeg elsker ITGK!
%% Cell type:markdown id: tags:
Hvis vi derimot endrer litt på kravene til programmet, så det skal handle om flere studenter enn "Jeg" og flere emner enn "ITGK", vil vi ha et genuint todimensjonalt problem (én dimensjon er studenter, en annen emner) hvor dobbel løkke vil være klart enkleste løsning. **Din oppgave: endre programmet så det gir utskrift som vist nedenfor**. Fra forrige oppgave skal altså Jeg byttes ut med Stud &lt;nummer>, og ITGK skal byttes ut med Emne &lt;nummer>. Brukeren skal angi ønsket antall for både studenter og emner, 4 og 3 er bare eksempler.
```
Hvor mange studenter? 4
Hvor mange emner? 3
Stud 1 elsker Emne 1 ; Stud 1 elsker Emne 2 ; Stud 1 elsker Emne 3 ;
Stud 2 elsker Emne 1 ; Stud 2 elsker Emne 2 ; Stud 2 elsker Emne 3 ;
Stud 3 elsker Emne 1 ; Stud 3 elsker Emne 2 ; Stud 3 elsker Emne 3 ;
Stud 4 elsker Emne 1 ; Stud 4 elsker Emne 2 ; Stud 4 elsker Emne 3 ;
```
**EKSTRA UTFORDRING** (ikke nødvendig for å få godkjent (a)): For å gjøre programmet litt mindre tørt og abstrakt, kan du prøve å endre så det skriver fornavn på personer i stedet for "Stud x", og navn på faktiske emner i stedet for Emne y - jfr eksempel med kortstokk i teksten "Intro til nøstede løkker" øverst i denne oppgaven. For å gjøre det mindre forutsigbart, kan du dessuten bruke funksjonen random() for å generere tilfeldige tall for hver runde av løkka, og ha en if-setning for å velge verb basert på verdien av dette. F.eks. "elsker" bare hvis tallet ble > 0.9, og gradvis litt mer beskjedne verb til lavere tallverdien var.
%% Cell type:markdown id: tags:
## b)
%% Cell type:markdown id: tags:
Bruk en dobbel løkke til å skrive ut en liste over alle klokkeslett i løpet av et døgn på en fin måte. Du trenger kun å tenke på timer og minutter. Klokkeslettene skal gå fra 0:0 til 23:59 som vist nedenfor.
Eksempel på kjøring av kode:
```python
0:0
0:1
0:2
.
. # Alle klokkeslett i mellom her skal skrives ut
.
23:58
23:59```
***Skriv koden din her:***
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
## c)
%% Cell type:markdown id: tags:
Bruk doble løkker til å skrive ut alle tallene i den lille gangetabellen, dvs. lag to for-løkker opp til 11 og multipliser variabelen x fra den ene løkken med variabelen y fra den andre løkken og skriv det ut i den innerste løkken. Du trenger ikke å tenke på formatet til utskriften.
Eksempel på kjøring:
```python
1
2
3
4
5
.
.
.
60
70
80
90
100
```
***Skriv koden din her:***
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
**Bonus**: Forsøk å legg inn en tom print() etter den innerste løkken i c) har kjørt (dvs. på samme innrykk som innerste for, men nedenfor print-funksjonen som skriver ut tallene). Legg også til end = ' ' på slutten av print-funksjonen som printer ut tallene. Ser du nå at det ligner mer på en gangetabell?
%% Cell type:markdown id: tags:
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="_Oving3.ipynb">Øving 3</a>
</div>
<ul class="nav navbar-nav">
<li ><a href="Intro%20til%20lokker.ipynb">Intro til løkker</a></li>
<li ><a href="Mer%20om%20lokker.ipynb">Mer om løkker</a></li>
<li><a href="Nostede%20lokker.ipynb">Intro til nøstede løkker</a></li>
<li ><a href="Kodeforstaelse.ipynb">Kodeforståelse</a></li>
<li class="active"><a href="Gjett%20tallet.ipynb">Gjett tallet</a></li>
<li ><a href="Geometrisk%20rekke.ipynb">Geometrisk rekke</a></li>
<li ><a href="Fibonacci.ipynb">Fibonacci</a></li>
<li><a href="Alternerende%20sum.ipynb">Alternerende sum</a></li>
<li ><a href="Hangman.ipynb">Hangman</a></li>
<li ><a href="Doble%20lokker.ipynb">Doble løkker</a></li>
</ul>
</div>
</nav>
# Tekstbasert spill 2
**Læringsmål:**
* Løkker
* Betingelser
I denne oppgaven skal vi utvide spillet vi begynte på i øving 2. Du må ikke ha gjort oppgaven i øving for å gjøre denne, men det kan være lurt å ta en kikk [her](link) for å forstå hva oppgaven går ut på.
%% Cell type:markdown id: tags:
### a)
%% Cell type:markdown id: tags:
Ved hjelp av en while løkke, la brukeren skrive inn kommando, og gjenta tilstanden dersom brukeren gir inn en ugyldig kommando. Se forrige oppgave for oppførsel ellers.
Eksempel:
```python
Du står utenfor en dør.
>sadasd
Forstår ikke kommando, prøv noe annet.
Du står utenfor en dør.
> inn
Du går inn døren.
```
***Skriv koden din i blokka under***
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
### b)
%% Cell type:markdown id: tags:
Ved hjelp av løkker ønsker vi at visse kommandoer skal ta brukeren tilbake til utgangspunktet i spillet. Dersom en bruker skriver inn en kommando som ikke skal ta brukeren ut av spillet (eller en ugyldig kommando), ønsker vi at den opprinnelige meldingen brukeren får skal gjentas, ellers går spilleren ut av løkken. **Altså, for alle andre kommandoer enn en spesifikk skal løkka gjentas.** I eksempelet under gjentas tilstanden helt til brukeren skriver noe som endrer den.
Eksempel:
```python
Du står utenfor en dør med en postkasse.
>bank på
Du får ingen respons.
Du står utenfor en dør med en postkasse. #opprinnelig tilstand
>gå andre veien
Du snur deg og vandrer hjem igjen. Du hører en skummel lyd og løper tilbake.
Du står utenfor en dør med en postkasse. #opprinnelig tilstand
>åpne døren
Du går inn døren. #går ut av løkken
```
***Skriv koden din i blokka under***
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
### c)
%% Cell type:markdown id: tags:
Ved hjelp av løkker og variabler skal du nå la visse kommandoer brukeren skriver inn endre tilstanden i spillet (altså variablene) **selv om vi ikke går ut av løkka**. Ved å sjekke tilstanden til disse variablene skal en kommando kunne gjøre to ting, utifra hva tilstanden til en variabel er satt til.
Eksempel:
```python
Du står utenfor en dør med en postkasse.
>åpne døren
Døren er låst.
Du står utenfor en dør med en postkasse.
>åpne postkassen
Du finner en nøkkel. #her må man oppdatere en variabel
Du står utenfor en dør med en postkasse. #vi printer ut det samme
>åpne døren
Du låser opp døren og går inn. #her er tilstanden annerledes enn når vi startet og vi går ut av løkka
```
***Skriv koden din i blokka under***
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
### d)
%% Cell type:markdown id: tags:
Legg til muligheten for brukeren til å gå ut av spillet uansett tilstand vet å kun trykke enter uten å skrive inn noe. Legg inn en avslutningsmelding.
Eksempel:
```python
Du står utenfor en dør med en postkasse.
>
Ha en fin dag!
```
***Skriv koden din i samme blokk som oppgave c***
%% Cell type:markdown id: tags:
#### Hint
%% Cell type:markdown id: tags:
Du kan bruke break for å hoppe ut av en løkke.
%% Cell type:markdown id: tags:
# Øving 3
**Læringsmål:**
* Løkker
* Betingelser
* Strenger
* Datamaskiners virkemåte
**Starting Out with Python:**
* Kap. 4: Repetition Structures
**Theory book:**
* Kap. 9: Principles of Computer Operations
## Godkjenning:
For å få godkjent øvingen må du gjøre ***4*** av ***11*** oppgaver. ***1*** av de ***4*** må være en oppgave merket med stjerne.
Oppgaver som er litt ekstra vanskelig er markert med stjerne. Oppgaver som går forbi det som er blitt forelest er markert med to stjerner.
Alle oppgavene skal demonstreres til en læringsassistent på sal. I oppgaver der du skriver programkode skal også denne vises fram. Lykke til!
Oppgave | Tema | Vanskelighetsgrad
--- | --- | ---
[Introduksjon til løkker](Intro%20til%20lokker.ipynb) |Løkker |
[Mer om løkker](Mer%20om%20lokker.ipynb)|Løkker|
[Intro til nøstede løkker](Nostede%20lokker.ipynb)|Nøstede løkker|
[Kodeforståelse](Kodeforstaelse.ipynb)|Kodeforståelse|
[Gjett tallet](Gjett%20tallet.ipynb)|Løkker og betingelse|
[Tekstbasert Spill 2](Tekstbasert%20spill%202.ipynb)|Løkker og betingelse|![img](./../../Resources/Images/star_yellow.svg)
[Geometrisk rekke](Geometrisk%20rekke.ipynb)|Løkker og betingelse|![img](./../../Resources/Images/star_yellow.svg)
[Fibonacci](Fibonacci.ipynb)|Løkker|![img](./../../Resources/Images/star_yellow.svg)
[Alternerende sum](Alternerende%20sum.ipynb)|Løkker|![img](./../../Resources/Images/star_yellow.svg)
[Hangman](Hangman.ipynb)|Løkker|![img](./../../Resources/Images/star_yellow.svg)
[Doble løkker](Doble%20lokker.ipynb)|Nøstede Løkker| ![img](./../../Resources/Images/star_yellow.svg)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment