Skip to content
Snippets Groups Projects
Commit fa20af45 authored by Dag Olav Kjellemo's avatar Dag Olav Kjellemo
Browse files

Upload new file

parent 934028d1
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id:83a05082-91db-48b1-ba9b-2eee7c1dc8be tags:
# Programmering i Python - introduksjon
- Hva er Python
- hvordan skrive og utføre noen enkle programmer i Python,
- se på to forskjellige måter å gjøre det på
- JupyterLab / Jupyter Notebook
- Thonny, en såkalt IDE (integrert utviklingsmiljø)
%% Cell type:markdown id:08b0b43c tags:
Det vi skal lære om Python er
- Noen datatyper
- tall
- strenger (tekst)
- tupler (flere data samlet)
- Input, output
- Vanlige regneoperasjoner med Python
- Lagre resultater i variabler med *tilordningsoperatoren* =
- Dele opp et program i ved hjelp av funksjoner som vi kan så *kalle* (utføre)
- Veldig kort og numpy og matplotlib
%% Cell type:markdown id:900b35c9-be98-4996-96de-b2564242863f tags:
## Først: Hva er Python?
%% Cell type:markdown id:1e78cebb-faa5-4b7a-b44b-034b960d7b17 tags:
- Python er et programmeringsspråk:
- Ligner litt på "vanlige" språk, skal gjøre det lettere for oss å lage programmer
- Mye mer firkantet, dvs vi må følge skrivereglene (gramatikken) nøye
%% Cell type:markdown id:cfe59edb-3b98-40bd-873e-58f1e3617bb5 tags:
## Hvordan programmerer vi, rent praktisk, i Python?
%% Cell type:markdown id:494b6b22-882d-412d-90b6-cbe137820bf2 tags:
- Vi skriver programmet som ren tekstfil, kalt *kildekode*
- Vi får Python-tolkeren (et program) til å lese kildekoden og utføre den:
- linje for linje
- gjør det om til *maskinkode* som datamaskinen utfører (litt forenklet forklart)
For å gjøre dette skal vi se på to dataprogrammer som er laget for dette:
- JupyterLab / Jupyter Notebook
- Thonny, en såkal IDE
%% Cell type:markdown id:19fa7619-19c8-4b38-aa7a-ed99da814e49 tags:
## Hvordan ser et program ut?
En vanlig struktur på et program er
- input
- prosessering/beregning
- output
### Eksempel: Andregradsformelen, også kjent som "abc-formelen"
VI kjører programmet ved å klikke i cellen, og trykke Ctrl-Enter
%% Cell type:code id:c9da3b94-2639-4f94-b196-735ab537de74 tags:
``` python
# Input, her er de hardkodet
a = 1
b = -2
c = -3
# Utregninger med mellomlagring
D = b**2 - 4 * a * c
d = D**0.5
x1 = (-b + d)/(2*a)
x2 = (-b - d)/(2*a)
# Output
print(x1)
print(x2)
```
%% Cell type:markdown id:c12cfa8e-75ad-47f3-a5d7-6ac0a2950ad2 tags:
I koden over, kan du se hvor vi har
- input?
- utregninger?
- lagring av verdier i variabler?
- output?
- kommentarer i koden?
%% Cell type:markdown id:be663932-0cae-455b-9c02-459330a3efed tags:
## Litt mer strukturering av koden over
### Dårlig praksis:
Hvis jeg ønsker å regne ut løsningene til flere andregradsligninger, så kan
jeg bare endre på tilordningen av variablene, og kjøre programmet på nytt.
**Det er dumt å måtte endre på selve koden, når det bare er input som endres**
### GOD PRAKSIS:
**Input som varierer leses inn av programmet**
Under skal vi endre koden over, slik at vi henter verdiene ved kjøring, og ikke trenger endre koden
%% Cell type:code id:b52d5266-5fce-4c96-ab93-60612e555641 tags:
``` python
# Modifisert kode, med bruk av input
```
%% Cell type:markdown id:645005e8 tags:
## Datatyper: Tall
- Heltall: Skrives rett frem uten komma. Det er ingen begrensning på antall siffer (sort of...)
- Flyttall, desimaltall. Kan ikke være vilkårlig store
%% Cell type:code id:c0a5dac0 tags:
``` python
heltall = 42
print(heltall ** 100)
x = 4.37
print(x**100)
y = 1.23e-3
print(y)
```
%% Cell type:markdown id:635fb594 tags:
## Datatype: Tekst
Kanskje vi tenker mest på at data er tall? Men tekst er også data.
For å angi tekst som data, så bruker vi *fnutter* for å angi at noe er tekst, og ikke kommandoer som Python skal tolke:
%% Cell type:code id:d5a34108-3797-4f50-98a3-45f0a3e8c889 tags:
``` python
navn = 'Dag Olav Kjellemo'
# Vi kan også bruke dobbel-fnutter, som fungerer akkurat som enkle fnutter:
emne = "ITGK TDT4110"
# Eller triple-dobbelfnutter. Denne er mer "special". Den kan skrives over flere linjer
enLitenTekst = """25. august 2023
Jeg foreleser ITGK.
Hilsen Dag Olav"""
```
%% Cell type:markdown id:012e1f23-4bb6-49f3-ba26-ffd23af4b3f1 tags:
## Litt om funksjoner
- input og print er navn på *funksjoner* i Python, som utfører gitte oppgaver (som navnet tilsier)
- Vi kan *gjenbruke* funksjoner uten å måtte skrive koden på nytt
- Funksjoner gjør det også lettere å se hva koden gjør
- Vi *kaller* (utfører) funksjoner ved å skrive navnet, etterfulgt av paranteser.
- Vi "mater" funksjonene ved å angi inputverdier inne i parantesene.
- dette kalles for *argumentene* til funksjonen
Det finnes en masse forskjellige ferdige funksjoner i Python, men de fleste er ikke tilgjengelig uten at vi *ber om det*. Vi laster inn disse med nøkkelordet **import**
%% Cell type:code id:7c1ab5ea-b890-4679-8a08-564f444627ce tags:
``` python
import math # Standard matte-ting
# math inneholder f.eks. en del trigonometriske funksjoner og en (tilnærmet) verdi for pi
print(math.pi) # NB! pi er ikke en funksjone, men et tall
print(math.sin(math.pi/2))
```
%% Cell type:markdown id:455b5594-5d98-4cf2-8670-76f5cef45503 tags:
## Definere egne funksjoner
La oss lage en litt unyttig funksjon, som skriver ut en slags overskrift.
Funksjoner definerer vi ved å begynne å skrive "def" i koden:
%% Cell type:code id:fede75f1-3fe8-44d3-a812-395ad32fd958 tags:
``` python
def banner():
print("***************************************")
print("***************BANNER******************")
print("***************************************")
print("Dette er ikke en del av funksjonen")
```
%% Cell type:markdown id:f6e8ca70-2c7d-455f-8685-f8c3f3684b02 tags:
### Viktige ting å legge merke til:
- *nøkkelordet* **def** signaliserer at vi skal definere en *funksjon*
- Funksjonsnavnet er **banner**
- Funksjonsnavnet etterfølges alltid av et parantespar ( )
- Inne i parantesen står det hva som skal være *input* til funksjonen. Her er det ingen input ennå.
- Python bruker kolon (:) og innrykk av kodenlinjene etterpå for å skille ut en *kodeblokk*
- Funksjonsdefinisjonen slutter der hvor det ikke lenger er innrykk i koden.
%% Cell type:markdown id:e665b2ef-6d75-4c66-94c6-c39e882a2ee3 tags:
### Kall av funksjoner
- **Når vi definerer en funksjon, så blir den ikke utført, bare lagret for bruk
- Vi *kaller* en funksjon ved å bruke funksjonsnavnet med parantes:
%% Cell type:code id:07ee629c-8da2-4e82-91d0-459ab685acc8 tags:
``` python
banner()
```
%% Cell type:markdown id:863f52cc-cb76-415a-a378-3b16bf87c21c tags:
La oss gjøre funksjonen litt mer nyttig. Vi vil kunne sende den teksten den
skal skrive. Da må den ha en *parameter*. Parameteren er et variabelnavn som gjelder bare inne i funksjonen, som lagrer argumentet som sendes til funksjonen når vi kaller den.
%% Cell type:code id:75b32642-7f4c-4af9-a2ec-ba84ca1f6286 tags:
``` python
def banner_med_input(tekst):
tekst_lengde = len(tekst) # en funksjon som gir antall tegn i tekst.
banner_lengde = tekst_lengde + 2*10
print("*" * banner_lengde)
print("*" * 10 + tekst + "*" * 10)
print("*" * banner_lengde)
# La oss kalle funksjonen
banner_med_input("ITGK - TDT4110")
```
%% Cell type:markdown id:6b76c47b-0159-42d1-87a6-13894273f1e0 tags:
### Et eksempel til på bruk av funksjoner
La oss skille ut utregningen for abc-formelen i en egen *funksjon*.
%% Cell type:code id:8b7c8646-246e-426a-8704-1c5bd710a849 tags:
``` python
def abc_formel(a,b,c): # ikke abc-formel. Bindestrek tolkes som minus.
D = b**2 - 4 * a * c
d = D**0.5
x1 = (-b + d)/(2*a)
x2 = (-b - d)/(2*a)
return x1, x2 # Returnerer begge verdiene som et 2-tuppel
# La oss kalle funksjonen over:
print(abc_formel(1,4,4))
# Samme som over, men vi lagrer løsningene i to variabler:
løsning1, løsning2 = abc_formel(1,4,4)
print(løsning1, løsning2)
```
%% Cell type:markdown id:bf213854-a3f7-4677-a283-50c5d0056b73 tags:
### Viktige ting å legge merke til,
- *nøkkelordet* **def** signaliserer at vi skal definere en *funksjon*
- Funksjonsnavnet er **abc_formel**
- Funksjonsnavnet etterfølges alltid av et parantespar ( )
- Inne i parantesen står det hva som skal være *input* til funksjonen,
- Python bruker kolon (:) og innrykk av kodenlinjene etterpå for å skille ut en *kodeblokk*
- *nøkkelordet* **return** gjør at funksjonen avsluttes, og to verdier *returneres* til der hvor funksjonen ble kalt
%% Cell type:markdown id:52e7b012-bb0e-4e39-8730-b00345b1872c tags:
# Numpy og Matplotlib
To *bibliotek* av funksjoner som vi skal bruke mye i emnet. Disse må importeres før bruk.
Num
- Numpy er laget for å jobbe matematisk/numerisk med data. Sentralt er *arrays* (vektorer, matriser).
- Matplotlib brukes til å visualisere data (forskjellige typer grafer og figurer).
%% Cell type:code id:63bae919-66d7-468c-a509-168b979ba562 tags:
``` python
import numpy as np # np blir et alias, for få litt kortere skrivemåte
from matplotlib import pyplot as plt # Vi importerer funksjonen pyplot fra biblioteket matplotlib, og slik at vi IKKE trenger å skrive
# matplotlib.pyplot, kun plt
def f(x): # En egendefinert funksjon som heter f, med en input parameter x
return x*x - 2*x - 3 # Den regner ut verdien til et andregradsuttrykk, og returnerer det "på direkten"
xs = np.linspace(-3, 5, 20) # genererer en array med 20 tall jevnt fordelt fra -3 til 5
ys = f(xs) # regner ut funksjonsverdien til alle de 20 verdiene, og lagrer resultatet i en ny array
# som lagres i variabelen ys
print("x-verdiene:", xs)
print("y-verdiene:", ys)
plt.plot(xs,ys) # Den aller enkelste måten å lage et plot på i matplotlib
plt.show()
```
%% Cell type:markdown id:ffa9cdc9-4547-42f8-b519-127507a6eb99 tags:
## Tilgang til hjelp i Python
I tillegg til ressursene vi har i Blackboard, finnes det uttallige nettressurser, f.eks. w3schools.
Legg også merke til hjelp som finnes i verktøyene vi bruker for å skrive kode. Det er mer hjelp i f.eks. Thonny (og enda mer i f.eks. Visual Studio Code, PyCharm etc).
NB! På eksamen er ikke disse hjelpemidlene tilgjengelige. Det kan også være en fordel for læringen at en må øve seg på å huske ting, og ikke få alt foreslått før man har rukket å tenke selv.
Hvis kan bruke help-funksjonen i Python til å få en beskrivelse av funksjoner
%% Cell type:code id:473fd5a2-8a64-4bcd-9656-0b95de998232 tags:
``` python
help(print)
```
%% Cell type:code id:c917cb33-3785-4782-8a80-fc8510a3e216 tags:
``` python
help(math.sin)
```
%% Cell type:markdown id:5c1323bd-d05d-4c32-87e8-17fa741b1129 tags:
# Hva skal dere gjøre kommende uke:
- Se videoer og gå gjennom tilhørende notatbøker
- Begynn å jobbe med Øving 1 som kommer ganske snart.
# Hva du bør kunne om en uke:
Det du bør beherske etter at du har jobbet deg gjennom uke 34-stoffet, er
- Aritmetiske uttrykk med regnerekkefølge i Python (se FP_00)
- Kunne bruke innebygde funksjoner
- Definere egne funksjoner
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