Skip to content
Snippets Groups Projects
Commit c358e509 authored by Bjørn Kåre Sæbø's avatar Bjørn Kåre Sæbø
Browse files

fasit OF7

parent db27c3d8
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id: tags:
# Øvingsforelesning 7
%% Cell type:markdown id: tags:
# Strenger
%% Cell type:markdown id: tags:
## Forklaring av Strenger
En **streng** kan sees på som en sekvens av tegn (characters) som ligger på hver sin gitte plass. Strenger har dermed mange av de samme egenskapene som lister som vi skal se på under.
%% Cell type:code id: tags:
``` python
min_streng = "Hei, jeg heter Vilde"
```
%% Cell type:markdown id: tags:
For å aksessere elementene i strengen benytter vi indeksering. Indeksen forteller hvilken "plass" vi er på i strengen på samme måte som vi så med lister forrige uke. Den første indeksen i strengen er 0 og den siste er *antall elementer - 1*. Det vil si at det første elementet i `min_streng`, `'H'`, kan hentes ut slik:
%% Cell type:code id: tags:
``` python
min_streng[0]
```
%% Cell type:markdown id: tags:
Det siste elementet av `min_streng` kan hentes ut slik:
%% Cell type:code id: tags:
``` python
min_streng[-1]
```
%% Cell type:markdown id: tags:
På samme måter som med lister, kan man også benytte **slicing** for å hente ut en del av strengen. I kodenblokken under henter vi ut de første 4 charactersene av `min_streng`
%% Cell type:code id: tags:
``` python
min_streng[0:4]
```
%% Cell type:markdown id: tags:
## Test deg frem med strenger selv
Kodeblokken under er lagt til for at du skal kunne leke deg litt frem med strenger selv. Gjerne kombiner det med konsepter du har lært tidligere som if-setninger, løkker og funksjoner.
%% Cell type:code id: tags:
``` python
# Skriv koden din her
```
%% Cell type:markdown id: tags:
## Indeksering, Slicing og Traversering
<img src="streng_indeksering.jpg" style="width: 650px;">
%% Cell type:markdown id: tags:
## Innebygde streng-funksjoner: Nice to know
<img src="funksjoner_strenger.jpg" style="width: 650px;">
%% Cell type:markdown id: tags:
<br><br>
%% Cell type:markdown id: tags:
# NumPy-biblioteket
%% Cell type:markdown id: tags:
## Forklaring av NumPy-biblioteket
NumPy er en modul som gir oss lister som er mye mer effektive enn Python sine innebygde lister. I tillegg har NumPy mye funksjonalitet for liste- og matriseoperasjoner. Derfor er det kjempenyttig å ha kjennskap til NumPy hvis man jobber med store datamengder og/eller skal gjøre en del operasjoner på lister. Slike arbeidsområder er for eksempel matematikk, fysikk, kunstig intelligens, finans og data-analyse.
%% Cell type:markdown id: tags:
Vi importerer numpy som følgende, og refererer til det ved hjelp av `np`
%% Cell type:code id: tags:
``` python
import numpy as np
```
%% Cell type:markdown id: tags:
Kodeblokken under viser hvordan en liste kan opprettes med innebygde lister i Python, og hvordan en tilsvarende liste kan opprettes som en NumPy-array.
%% Cell type:code id: tags:
``` python
# Oppretting a vanlige lister
liste = [1, 2, 3, 4, 5, 6]
# Oppretting av numpy array
import numpy as np
array = np.array([1, 2, 3, 4, 5, 6])
```
%% Cell type:markdown id: tags:
## Test deg frem med NumPy selv
Kodeblokken under er lagt til for at du skal kunne leke deg litt frem med NumPy-arrays selv.
%% Cell type:code id: tags:
``` python
# Skriv koden din her
```
%% Cell type:markdown id: tags:
## NumPy-funksjoner: Nice to know
<img src="numpy_funksjoner.jpg" style="width: 700px;">
%% Cell type:markdown id: tags:
<br><br><br><br>
%% Cell type:markdown id: tags:
# Gjennomgang av oppgave 3 fra øvingsforelesning 6
## Oppgave 3: Eksamensoppgave Høst 2014
%% Cell type:markdown id: tags:
<img src="E2014-3.jpg" style="width: 750px;">
%% Cell type:markdown id: tags:
<img src="E2014-3a.jpg" style="width: 750px;">
%% Cell type:markdown id: tags:
<br><br>
**Sammendrag av oppgaven over:**<br>
Du skal lage en funksjon som går gjennom listen weatherData og skriver ut
* Antall dager i perioden (Dvs. antall lister i weatherData)
* Total nedbørsmengde i perioden
* Høyeste temperatur og dagen denne forekom
* Laveste temperatur og dagen denne forekom
*`weatherData`:*
* weatherData er en liste med lister i (matrise), hvor hver liste i weatherData er på formatet `[maximumstemperatur, minimumstemperatur, nedbørsmengde]`
* Den første lista i weatherData, dvs. `weatherData[0]` er vær-data for dag 1, den andre lista i weatherData, dv `weatherData[1]` er værdata for dag 2 osv.
*Hint:* Konsentrer deg om ett av punktene over om gangen, lagre informasjonen i variabler og skriv ut informasjonen til slutt.
%% Cell type:code id: tags:
``` python
def weatherStats(weatherData):
# Regner ut antall dager i perioden og lagre resultatet i variabelen n_days
n_days = len(weatherData)
# Regner ut total nedbørsmengde og lagre resultatet i variabelen rain
rain = 0
# Itererer gjennom dagene i weatherData
for i in range(n_days):
# weatherData[i] er en liste med [maxtemp, mintemp, nedbørsmengde] for dag i
# dvs. at weatherData[i][2] gir nedbørsmengde for dag i
rain += weatherData[i][2]
# Finn høyeste temperatur og dagen denne forekom og lagre i de respektive variablene max_temp og max_day
# Finn laveste temperatur og dagen denne forekom og lagre i de respektive variablene min_temp og min_day
max_temp = weatherData[0][0] # maximumstemperatur for dag 1
max_day = 1
min_temp = weatherData[0][1] # minimumstemperatur for dag 1
min_day = 1
# itererer gjennom hver dag i weatherData for å sjekke om dag i har lavere temp en min_temp eller høyere temp en max_temp
for i in range(n_days):
if weatherData[i][0] > max_temp:
max_temp = weatherData[i][0]
max_day = i + 1
if weatherData[i][1] < min_temp:
min_temp = weatherData[i][1]
min_day = i + 1
########## Koden din slutter her ###########
# Printer sammendrag
print("There are", n_days, "in the period")
print("The highest temperature was", max_temp, "on day number", max_day)
print("The lowest temperature was", min_temp, "on day number", min_day)
print("There was a total of", round(rain,2) , "mm rain in the period")
## NB: Merk at det i den originale notebooken var en error i denne koden på linje 49. Der stod det nedbør, som skal være rain
```
%% Cell type:markdown id: tags:
Sjekker om funksjonen skriver ut riktig data:
%% Cell type:code id: tags:
``` python
weatherData = [[12.0, 2.4, 8.2], [6.1, 0.6, 11.9], [8.3, -3.5, 0.0], [11.6, -5.2, 0.0], [15.3, 2.8, 14.3]]
weatherStats(weatherData)
```
%% Cell type:markdown id: tags:
<br><br><br><br>
%% Cell type:markdown id: tags:
# Oppgaver til øvingsforelesning 7
%% Cell type:markdown id: tags:
## Oppgave 1 - Lister og løkker
%% Cell type:markdown id: tags:
*Du skal på butikken for moren din og har fått beskjed om å huske alle gjenstandene du skal kjøpe med.* <br><br>
Du har gitt en liste, `handleliste`som sier gjenstandene du skal kjøpe, og en liste `priser` som gir prisene til alle elementene i handlelisten. Det vil si at prisen til `handleliste[i]`er gitt av `priser[i]`hvor `i` er indeksen (plassen) til elementet i listene.
%% Cell type:code id: tags:
``` python
handleliste = ["Melk", "Bananer", "Brus", "Rundstykker", "Godteri", "Bønner", "Nøtter"]
priser = [17, 5, 25, 15, 55, 10, 30]
```
%% Cell type:markdown id: tags:
a) Lag en funkjson `print_handleliste` som printer ut handleliste-elementet med korresponderende pris med `:` mellom og `'kr'` på slutten.
%% Cell type:code id: tags:
``` python
def print_handleliste(navneliste, prisliste):
if len(navneliste) != len(prisliste):
print("Listene må være like lange")
return
for i in range(len(navneliste)):
print(navneliste[i] + ": " + str(prisliste[i]) + " kr")
print_handleliste(handleliste, priser)
```
%% Output
Melk: 17 kr
Bananer: 5 kr
Brus: 25 kr
Rundstykker: 15 kr
Godteri: 55 kr
Bønner: 10 kr
Nøtter: 30 kr
%% Cell type:markdown id: tags:
b) Lag en funksjon, `har_råd_til` som tar inn en handleliste og pris-liste. Funksjonen skal returnere en ny liste med elementer og en liste korresponderende priser som du har råd til hvis du har totalt 100 kr. <br><br>
*Hint:*
* Du trenger ikke tenke på rekkefølgen til elementene, men fjern det bakerste elementet så lenge summen er større enn 100.
* Bruk en while-løkke
* sum(liste) returnerer summen av alle elementene i liste
* liste.pop(indeks) fjerner elementet på indeks i liste
%% Cell type:code id: tags:
``` python
def har_råd_til(navneliste, prisliste):
while sum(prisliste) > 100:
prisliste.pop(-1)
navneliste.pop(-1)
return navneliste, prisliste
handleliste, priser = har_råd_til(handleliste, priser)
print_handleliste(handleliste, priser)
```
%% Output
Melk: 17 kr
Bananer: 5 kr
Brus: 25 kr
Rundstykker: 15 kr
%% Cell type:markdown id: tags:
## Oppgave 2 - NumPy-arrays
%% Cell type:markdown id: tags:
a) Importer NumPy-biblioteket og definer følgende numpy-arrays:
* x skal ha alle tallene fra 5 til 10
* y skal ha alle tallene fra 30 til 70
* Hint: np.arange(a,b) git tallene fra og med a til b
Til slutt: print ut de to listene.
%% Cell type:code id: tags:
``` python
import numpy as np
x = np.arange(5, 11)
y = np.arange(30, 71)
for element in x:
print(element)
print(x)
for element in y:
print(element, end=" ")
```
%% Output
5
6
7
8
9
10
[ 5 6 7 8 9 10]
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
%% Cell type:markdown id: tags:
b) Lag en numpy-matrise (dvs. liste med lister i) på størrelse 3 x 3 ( 3 rader og 3 kolonner ) med enere i første rad, toere i andre rad og treere i tredje rad. Deretter lag en for-løkke som itererer gjennom matrisen og printer ut hver rad.
<br>
*Hint:*
* np.array-funksjonen kan også ta inn matriser
%% Cell type:code id: tags:
``` python
mat = np.array([[1, 1, 1], [2,2,2], [3,3,3]])
rep = np.repeat(7, 15)
print(rep)
for rad in mat:
print(rad)
```
%% Output
[7 7 7 7 7 7 7 7 7 7 7 7 7 7 7]
[1 1 1]
[2 2 2]
[3 3 3]
%% Cell type:markdown id: tags:
## Oppgave 3 - Strenger
%% Cell type:markdown id: tags:
Lag en funksjon `check_equal_lenght` som tar inn to strenger, `string1` og `string2`, som sjekker om strengene er like lange. Den skal returnere `True` dersom strengene er like lange, og `False` ellers
%% Cell type:code id: tags:
``` python
def check_equal_length(string1, string2):
return len(string1) == len(string2)
a = "streng"
b = "blablabla"
print(check_equal_length(a, b))
```
%% Output
False
%% Cell type:markdown id: tags:
## Oppgave 4 - Strenger
%% Cell type:markdown id: tags:
* Lag en funksjon som tar inn to ord og sjekker om de tre første bokstavene i ordene er like (ikke sensitivt for store/små bokstaver)
* Returner `True` hvis de tre første bokstavene er like, `False` ellers
* `«Fotball»` og `«fotografi»` skal i dette tilfellet gi `True`
%% Cell type:code id: tags:
``` python
def første_tre_like(ord1, ord2):
return ord1[:3].lower() == ord2[:3].lower()
print(første_tre_like("Fotball", "fole"))
```
%% Output
False
%% Cell type:markdown id: tags:
## Oppgave 5 - Strenger
%% Cell type:markdown id: tags:
<img src="hva_printes_her.jpg" style="width: 400px;">
%% Cell type:markdown id: tags:
Dobbeltklikk på blokken under for å skrive svaret ditt.
%% Cell type:markdown id: tags:
SVAR:
%% Cell type:code id: tags:
``` python
# Denne kodeblokken kan du bruke til å kladde
```
%% Cell type:markdown id: tags:
## Oppgave 6 - Strenger
%% Cell type:markdown id: tags:
Lag en funksjon `funny_word` som tar inn inputparameteren `word`. `funny_word` skal bytte alle vokalene i `word` med en ny tilfeldig vokal. <br> <br>
*Hint*
* vokaler = `['a','e','i','o','u’]`, `for char in word:`, `if char in vokaler:`
%% Cell type:code id: tags:
``` python
import random
def funny_word(word):
vokaler = ['a', 'e', 'i', 'o', 'u', 'æ', 'ø', 'å']
nytt_ord = ""
for bokstav in word:
if bokstav in vokaler:
andre_vokaler = vokaler.copy()
andre_vokaler.remove(bokstav)
nytt_ord = nytt_ord + random.choice(andre_vokaler)
else:
nytt_ord = nytt_ord + bokstav
return nytt_ord
def main():
morsomt_ord = funny_word("Bjørn Kåre")
morsomt_ord2 = funny_word("Bjørn Kåre")
print(morsomt_ord)
if første_tre_like(morsomt_ord, morsomt_ord2):
print(f"{morsomt_ord} og {morsomt_ord2} har de samme første tre bokstavene")
main()
```
%% Output
Bjærn Kæro
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment