"Plott funksjonen f(x) = cos(x) i intervallet (-4 pi, 4 pi). Velg “oppløsning” på x-aksen selv.\n",
"\n",
"Hint: Numpy har innebygget cosinus-funksjon"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"x = np.linspace(-4 * np.pi, 4 * np.pi, 100)\n",
"y = np.cos(x)\n",
"\n",
"plt.plot(x, y)\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Oppgave 2\n",
"\n",
"Plott funksjonene f(x) = sin(2x) og g(x) = cos(2x) i hvert sitt plot ved siden av hverandre\n",
"\n",
"Velg \"oppløsning\" på x-aksen selv"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"x = np.linspace(-2 * np.pi, 2 * np.pi, 100)\n",
"y_f = np.sin(2 * x)\n",
"y_g = np.cos(2 * x)\n",
"\n",
"fig, (ax1, ax2) = plt.subplots(1, 2)\n",
"\n",
"ax1.set_title(\"f(x)\")\n",
"ax1.plot(x, y_f)\n",
"\n",
"ax2.set_title(\"g(x)\")\n",
"ax2.plot(x, y_g)\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Oppgave 3\n",
"\n",
"Lag en funksjon som tar inn 3 tall og returnerer summen av dem\n",
"\n",
"Funksjonen skal oppføre seg akkurat som sum() funksjonen, bare med maks 3 tall. Det er ikke lov å bruke innebygde funksjoner (sum, np.sum, etc.) for å løse oppgaven.\n",
"\n",
"Merk: Til vanlig vil ikke lage funksjoner som allerede er laget for oss,\n",
"dette gjør vi kun for trening. "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def sum_av_tre(tall1, tall2, tall3):\n",
" return tall1 + tall2 + tall3\n",
"\n",
"sum_1 = sum_av_tre(1, 2, 3)\n",
"print(sum_1)\n",
"\n",
"sum_2 = sum_av_tre(sum_1, 4, 5)\n",
"print(sum_2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Oppgave 4\n",
"\n",
"Vi ønsker å regne ut fakultet (factorial) av noen tall, og skal derfor lage en funksjon som implementerer denne logikken.\n",
"\n",
"For eksempel er 4! = 1⋅2⋅3⋅4 = 24, mens 5! = 1⋅2⋅3⋅4⋅5 = 120."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def factorial(n):\n",
" result = 1\n",
"\n",
" for i in range(2, n + 1):\n",
" result *= i\n",
"\n",
" return result\n",
"\n",
"print(factorial(4))\n",
"print(factorial(5))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Oppgave 5\n",
"\n",
"Lag en funksjon som tar inn en streng, og returnerer antall små og antall store bokstaver i strengen. Benytt funksjonene str#isupper() og str#islower()."
"Lag en funksjon `beregn_omkrets` som gjør følgende:\n",
" - Tar inn et tall radius som parameter\n",
" - Returnerer omkretsen til en sirkel med radius <radius>\n",
"\n",
"Lag en funksjon `beregn_areal` som gjør følgende:\n",
" - Tar inn et tall radius som parameter\n",
" - Returnerer arealet til en sirkel med radius <radius>"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import math\n",
"\n",
"def beregn_omkrets(radius):\n",
" return 2 * math.pi * radius\n",
"\n",
"def beregn_areal(radius):\n",
" return math.pi * radius ** 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Oppgave 9 (2/2)\n",
"\n",
"Lag en geometriprogram()-funksjon som gjør følgende:\n",
" - Tar inn en radius fra bruker\n",
" - Regner ut omkretsen av en sirkel med radius <radius>\n",
" - Regner ut arealet av en sirkel med radius <radius>\n",
" - Skriver ut resultatet fra del (2) og (3)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Dette kunne vært et flyttall, men jeg ønsker demonstrere nyttigheten av vår\n",
"# tidligere funksjon\n",
"radius = input_int(\"Skriv inn en radius: \")\n",
"\n",
"omkrets = beregn_omkrets(radius)\n",
"areal = beregn_areal(radius)\n",
"\n",
"print(f\"Omkrets: {omkrets}\")\n",
"print(f\"Areal: {areal}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Oppgave 10 (1/3)\n",
"\n",
"Vi skal lage et enkelt terningspill. I spillet trenger vi mulighet til å trille en terning\n",
"\n",
"Lag en funksjon som triller en terning, dvs. returnerer et tall fra og med 1 til og med 6\n",
"\n",
"Hint: \n",
"```python\n",
"import random\n",
"\n",
"x = random.randint(1, 6) \n",
"```"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import random\n",
"\n",
"def roll_dice():\n",
" return random.randint(1, 6)\n",
"\n",
"for i in range(10):\n",
" print(roll_dice())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Oppgave 10 (2/3)\n",
"\n",
"En runde i spillet består av at spilleren gjetter hvor mye hen til sammen kommer til å trille, før 6 terninger trilles. Hvis hen gjettet riktig, får hen 3 poeng. Hvis hen var innenfor 5 fra riktig verdi, får hen 1 poeng. \n",
"\n",
"Lag en funksjon for å beregne poeng gitt spilleren, basert på spillerens gjett og verdien til de trillede terningene. \n",
"\n",
"Lag så en funksjon for en runde, som spør spilleren om å gjette, triller terninger, og returnerer poengsummen for den runden. "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def get_points(actual, guess):\n",
" if actual == guess:\n",
" return 3\n",
" elif abs(actual - guess) <= 5:\n",
" return 1\n",
" else:\n",
" return 0\n",
"\n",
"\n",
"def play_round():\n",
" guess = input_int(\"Hvor mye kommer du til å trille? \")\n",
"\n",
" actual = 0\n",
"\n",
" for i in range(6):\n",
" roll = roll_dice()\n",
" actual += roll\n",
" print(f\"Du trillet {roll}\")\n",
"\n",
" print(f\"Du fikk totalt {actual}\")\n",
" score = get_points(actual, guess)\n",
" print(f\"Du fikk {score} poeng!\")\n",
" return score\n",
"\n",
"play_round()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Oppgave 10 (3/3)\n",
"\n",
"Til slutt vil vi ha mulighet til å spille hele spillet\n",
"\n",
"Husk: main() kaller de andre funksjonene og står for kommunikasjon med bruker\n",
"\n",
"Spør spilleren først hvor mange runder hen vil spille, og kjør så gjennom <antall> mange runder. Hold kontroll på poengsummen til brukeren, og skriv den ut til slutt. \n",
"\n",
"Ekstraoppgave:\n",
"Utvid spillet til å være for to spillere"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"rounds = input_int(\"Hvor mange runder vil du spille? \")\n",
"\n",
"total_score = 0\n",
"\n",
"for i in range(rounds):\n",
" total_score += play_round()\n",
"\n",
"print(f\"Du fikk totalt {total_score} poeng!\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "venv",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.5"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}
%% Cell type:markdown id: tags:
# Øvingsforelesning 6 - TDT4110
Øving 4: Funksjoner
%% Cell type:markdown id: tags:
### Returverdier
print vs return
%% Cell type:code id: tags:
``` python
importmath
deffind_area(r):
a=math.pi*r**2
returna
defprint_area(r):
print(find_area(r))
area=find_area(23)
#1661.90..
print(area)
print_area(23)
```
%% Cell type:markdown id: tags:
#### Oppgave 1
Plott funksjonen f(x) = cos(x) i intervallet (-4 pi, 4 pi). Velg “oppløsning” på x-aksen selv.
Hint: Numpy har innebygget cosinus-funksjon
%% Cell type:code id: tags:
``` python
importnumpyasnp
importmatplotlib.pyplotasplt
x=np.linspace(-4*np.pi,4*np.pi,100)
y=np.cos(x)
plt.plot(x,y)
plt.show()
```
%% Cell type:markdown id: tags:
#### Oppgave 2
Plott funksjonene f(x) = sin(2x) og g(x) = cos(2x) i hvert sitt plot ved siden av hverandre
Velg "oppløsning" på x-aksen selv
%% Cell type:code id: tags:
``` python
x=np.linspace(-2*np.pi,2*np.pi,100)
y_f=np.sin(2*x)
y_g=np.cos(2*x)
fig,(ax1,ax2)=plt.subplots(1,2)
ax1.set_title("f(x)")
ax1.plot(x,y_f)
ax2.set_title("g(x)")
ax2.plot(x,y_g)
plt.show()
```
%% Cell type:markdown id: tags:
#### Oppgave 3
Lag en funksjon som tar inn 3 tall og returnerer summen av dem
Funksjonen skal oppføre seg akkurat som sum() funksjonen, bare med maks 3 tall. Det er ikke lov å bruke innebygde funksjoner (sum, np.sum, etc.) for å løse oppgaven.
Merk: Til vanlig vil ikke lage funksjoner som allerede er laget for oss,
dette gjør vi kun for trening.
%% Cell type:code id: tags:
``` python
defsum_av_tre(tall1,tall2,tall3):
returntall1+tall2+tall3
sum_1=sum_av_tre(1,2,3)
print(sum_1)
sum_2=sum_av_tre(sum_1,4,5)
print(sum_2)
```
%% Cell type:markdown id: tags:
#### Oppgave 4
Vi ønsker å regne ut fakultet (factorial) av noen tall, og skal derfor lage en funksjon som implementerer denne logikken.
For eksempel er 4! = 1⋅2⋅3⋅4 = 24, mens 5! = 1⋅2⋅3⋅4⋅5 = 120.
%% Cell type:code id: tags:
``` python
deffactorial(n):
result=1
foriinrange(2,n+1):
result*=i
returnresult
print(factorial(4))
print(factorial(5))
```
%% Cell type:markdown id: tags:
#### Oppgave 5
Lag en funksjon som tar inn en streng, og returnerer antall små og antall store bokstaver i strengen. Benytt funksjonene str#isupper() og str#islower().
%% Cell type:code id: tags:
``` python
defcount_lower_upper(s):
lower=0
upper=0
forchins:
ifch.islower():
lower+=1
elifch.isupper():
upper+=1
returnlower,upper
count_lower,count_upper=count_lower_upper("Hei")
print(f"Lower: {count_lower}")
print(f"Upper: {count_upper}")
```
%% Cell type:markdown id: tags:
#### Oppgave 6
Du vil lage en dum chatbot som svarer ja eller nei med like stor sannsynlighet
Lag en funksjon som tar inn et spørsmål som parameter, og skriver ut spørsmålet og svaret sitt (ja eller nei tilfeldig)
Hint:
```python
importrandom
random.choice(["Ja","Nei"])
```
%% Cell type:code id: tags:
``` python
importrandom
defgenerate_answer():
returnrandom.choice(["Ja","Nei"])
defask_question(question):
print(f"Spm: {question}")
print(f"Svar: {generate_answer()}")
#for i in range(10):
# print(generate_answer())
question=input("Skriv inn et spørsmål: ")
ask_question(question)
```
%% Cell type:markdown id: tags:
#### Oppgave 7
Forsikring av input-type
Lag en funksjon som spør bruker om et heltall, og spør igjen dersom brukeren ikke skriver inn et heltall
Når brukeren har skrevet inn et heltall, skal funksjonen returnere tallet
Hint:
str.isnumeric() sjekker om en streng kun inneholder tall
%% Cell type:code id: tags:
``` python
definput_int(prompt="Skriv inn et tall: "):
whileTrue:
given=input(prompt)
ifgiven.isnumeric():
returnint(given)
print("Skriv inn et gyldig tall!")
tall=input_int()
print(tall)
```
%% Cell type:markdown id: tags:
#### Oppgave 8
Primtallstester
Skriv en funksjon som tar inn et heltall, og returnerer True hvis tallet er et primtall, ellers False
Husk: Et tall er et primtall hvis det ikke er delelig på noen andre tall enn seg selv og 1
%% Cell type:code id: tags:
``` python
# Inneholder 3 ulike versjoner av ulik kompleksitet, hvor de mer kompliserte
# er teoretisk raskere
# Bruker math-modul i versjon3
importmath
# Versjon 1; Denne er den mest "grunnleggende", og sjekker bare om
# n går opp i alle tall mellom 2 og n - 1
defis_prime1(n):
ifn==1:
returnFalse
foriinrange(2,n):
ifn%i==0:
returnFalse
returnTrue
# Versjon 2; Fra forelesning. Håndterer partall eksplisitt, og sjekk
# alle oddetall fra 3 til n - 1
defis_prime2(n):
ifn==1:
returnFalse
ifn!=2andn%2==0:
returnFalse
foriinrange(3,n,2):
ifn%i==0:
returnFalse
returnTrue
# Versjon 3: Samme som i forelesning, men sjekker bare alle tall opp
# til kvadratroten av tallet. Dette funker fordi for å faktorisere n må
# vi minst ha 1 faktor som er mindre enn kvadratroten av tallet
defis_prime3(n):
ifn==1:
returnFalse
ifn!=2andn%2==0:
returnFalse
# Vi ønsker å runde opp her for å sikre at vi får med alle relevante tall
Lag en funksjon `beregn_omkrets` som gjør følgende:
- Tar inn et tall radius som parameter
- Returnerer omkretsen til en sirkel med radius <radius>
Lag en funksjon `beregn_areal` som gjør følgende:
- Tar inn et tall radius som parameter
- Returnerer arealet til en sirkel med radius <radius>
%% Cell type:code id: tags:
``` python
importmath
defberegn_omkrets(radius):
return2*math.pi*radius
defberegn_areal(radius):
returnmath.pi*radius**2
```
%% Cell type:markdown id: tags:
#### Oppgave 9 (2/2)
Lag en geometriprogram()-funksjon som gjør følgende:
- Tar inn en radius fra bruker
- Regner ut omkretsen av en sirkel med radius <radius>
- Regner ut arealet av en sirkel med radius <radius>
- Skriver ut resultatet fra del (2) og (3)
%% Cell type:code id: tags:
``` python
# Dette kunne vært et flyttall, men jeg ønsker demonstrere nyttigheten av vår
# tidligere funksjon
radius=input_int("Skriv inn en radius: ")
omkrets=beregn_omkrets(radius)
areal=beregn_areal(radius)
print(f"Omkrets: {omkrets}")
print(f"Areal: {areal}")
```
%% Cell type:markdown id: tags:
#### Oppgave 10 (1/3)
Vi skal lage et enkelt terningspill. I spillet trenger vi mulighet til å trille en terning
Lag en funksjon som triller en terning, dvs. returnerer et tall fra og med 1 til og med 6
Hint:
```python
importrandom
x=random.randint(1,6)
```
%% Cell type:code id: tags:
``` python
importrandom
defroll_dice():
returnrandom.randint(1,6)
foriinrange(10):
print(roll_dice())
```
%% Cell type:markdown id: tags:
#### Oppgave 10 (2/3)
En runde i spillet består av at spilleren gjetter hvor mye hen til sammen kommer til å trille, før 6 terninger trilles. Hvis hen gjettet riktig, får hen 3 poeng. Hvis hen var innenfor 5 fra riktig verdi, får hen 1 poeng.
Lag en funksjon for å beregne poeng gitt spilleren, basert på spillerens gjett og verdien til de trillede terningene.
Lag så en funksjon for en runde, som spør spilleren om å gjette, triller terninger, og returnerer poengsummen for den runden.
%% Cell type:code id: tags:
``` python
defget_points(actual,guess):
ifactual==guess:
return3
elifabs(actual-guess)<=5:
return1
else:
return0
defplay_round():
guess=input_int("Hvor mye kommer du til å trille? ")
actual=0
foriinrange(6):
roll=roll_dice()
actual+=roll
print(f"Du trillet {roll}")
print(f"Du fikk totalt {actual}")
score=get_points(actual,guess)
print(f"Du fikk {score} poeng!")
returnscore
play_round()
```
%% Cell type:markdown id: tags:
#### Oppgave 10 (3/3)
Til slutt vil vi ha mulighet til å spille hele spillet
Husk: main() kaller de andre funksjonene og står for kommunikasjon med bruker
Spør spilleren først hvor mange runder hen vil spille, og kjør så gjennom <antall> mange runder. Hold kontroll på poengsummen til brukeren, og skriv den ut til slutt.
Ekstraoppgave:
Utvid spillet til å være for to spillere
%% Cell type:code id: tags:
``` python
rounds=input_int("Hvor mange runder vil du spille? ")