Variabler og datatyper#
Læringsutbytte
Etter å ha arbeidet med dette temaet, skal du kunne:
kjøre enkle programmer med en programmeringseditor
definere og gjøre rede for ulike variabeltyper: heltall, flyttall og strenger
skrive ut output ved å bruke print-funksjonen
gjøre enkel aritmetikk i Python
ta input fra brukeren av programmet
importere og bruke biblioteker
Variabler#
Variabel
En programmeringsvariabel er en størrelse som lagrer en verdi i et program.
Variabler er spesielt nyttig når vi skal bruke samme verdi flere ganger, eller når vi skal oppdatere en verdi underveis i programmet. Et enkelt eksempel er hvis vi ønsker å finne ti tall i en bestemt tallrekke. Dette kan vi beskrive slik med en pseudokode:
tall = 0
gjenta 10 ganger:
tall = tall + 3
vis tall på skjermen
Du kan tenke på en variabel som en boks vi kan putte ting i, og som vi kan modifisere, endre og hente informasjon fra underveis.
Hva er en pseudokode?
En pseudokode er en beskrivelse av en algoritme uten å bruke et bestemt programmeringsspråk. Pseudokode kan skrives på mange måter og kan beskrives med ord, bilder og symboler.
Underveisoppgave
Nedenfor er et eksempel på en programkode i Python der vi beregner gjennomsnittshastigheten i m/s for ulike legemer som har beveget seg henholdsvis 3, 4.5, 7 og 14 meter i løpet av 3 sekunder. Hva er fordelen med å bruke variablen t her?
Løsningsforslag
Kommandoen print gir oss et ouput fra programmet vårt. Vi sier at noe blir skrevet ut til “konsollen”. Konsollen er der du får output i et programmeringsmiljø. Inni print-kommandoen kan vi skrive flere ting. Da må hver variabel og hver verdi være adskilt med komma.
t = 3
v1 = 3/t
v2 = 4.5/t
v3 = 7/t
v4 = 14/t
Print#
For å få noe ut av programmet vårt, må vi be datamaskinen om å “skrive ut” noe. Dette gjør vi med kommandoen print. Dersom vi ønsker å skrive ut flere variabler, må vi skille dem med komma i print-funksjonen. Her ser du tre måter å bruke print-kommandoen på:
print(v1)
print(v1, v2, v3, v4)
print("Gjennomsnittsfarten for legeme 4 er: ", v4, "m/s.")
1.0
1.0 1.5 2.3333333333333335 4.666666666666667
Gjennomsnittsfarten for legeme 4 er: 4.666666666666667 m/s.
Underveisoppgave
Lag et program som regner ut arealet av et rektangel og skriver ut en svarsetning med enheter.
Løsningsforslag
side1 = 5
side2 = 3
A = side1*side2
print("Arealet til rektangelet er:", A, "kvadratmeter")
Kommentarer#
Bruk av kommentarer i koden er viktig for at en selv skal huske hva koden illustrerer, hvilke enheter som brukes, og liknende. I tillegg er det viktig dersom andre skal bruke koden din til noe, for eksempel i store samarbeidsprosjekter. Kommentarer legges til ved å sette en # foran kommentaren. Eventuelt, dersom du kommenterer over flere linjer, kan du bruke triple anførselstegn før og etter kommentarene. Her er et eksempel:
"""
Regner ut kinetisk energi i én dimensjon
for et legeme med masse m og hastighet v
"""
m = 2.0 # masse i kg
v = 1.0 # fart i m/s
E = 0.5*m*v**2 # Kinetisk energi i J
print("Den kinetiske energien er", E, "J.")
Den kinetiske energien er 1.0 J.
Aritmetikk#
Vi kan bruke Python som en enkel kalkulator. Vi har blant annet følgende operatorer:
Operator |
Forklaring |
---|---|
+ |
Addisjon (a + b) |
- |
Subtraksjon (a - b) |
* |
Multiplikasjon (a*b) |
/ |
Divisjon (a/b) |
** |
Eksponent (a**b) |
Underveisoppgave
Det finnes også to spesielle operatorer: // og %. Finn ut hva disse operatorene gjør ved å prøve dere fram i koderuta nedenfor. Vi har lagt til fire linjer som du kan bruke som utgangspunkt.
Løsning
// utfører heltallsdivisjon, det vil si at operatoren finner det høyeste heltallet divisjonen går opp i. 24 // 5 = 4 fordi 4 * 5 = 20, som er det nærmeste vi kommer 24 i 5-gangen uten å overskride 24. Resten etter denne divisjonen er 4. Det får vi fram ved å bruke «modulusoperatoren» %, som ikke har noe med prosent å gjøre. 24 % 5 er altså 4.
Biblioteker#
De fleste matematiske operatorer og funksjoner finnes ikke i standard Python. For å få tilgang til mer avansert matematikk, må vi importere biblioteker (eller moduler) inn i Python-programmet vårt. Et bibliotek er en pakke med ekstra kommandoer og funksjoner som vi kan bruke, som sqrt, cos, log og så videre. Det finnes ulike måter å importere på. Her er noen måter vi kan importere det svært nyttige nympy-biblioteket (numerical python):
# Første metode: Importerer kun funksjonene du trenger
from numpy import log10
pH = -log10(1E-7)
# Andre metode: Importere hele biblioteket
import numpy
A = 2
radius = numpy.sqrt(A/numpy.pi)
# Tredje metode: Importere hele biblioteket med et alias. Dette er den mest brukte metoden.
import numpy as np
A = 2
radius = np.sqrt(A/np.pi)
# Fjerde metode: Importere alt fra biblioteket uten å spesifisere hvor funksjonene kommer fra
from numpy import *
vinkel = arccos(0.5) # Invers cosinus av 0.5
pH = -log10(1E-7) # pH = -log([H3O+]), log10 er tierlogaritmen
Underveisoppgave
Studer måtene å importere biblioteker på og forklar forskjellen på dem.
Metode 3 ovenfor er den vanligste metoden for import av biblioteker, og den skal vi benytte mest. I mange av videoene benyttes derimot stjerneimport fra et samlebibliotek som heter pylab (from pylab import *). Det inneholder alt fra blant annet bibliotekene numpy og matplotlib (et visualiseringsbibliotek), og vi importerer det for å forenkle koden. Du kan bruke denne metoden å importere på i starten, men bør gå over til metode 3 etter hvert.
Underveisoppgave
Lag et program som regner ut radius til en sirkel med arealet 4 ved å importere sqrt og pi fra numpy-biblioteket. Kunne du gjort beregningene uten disse funksjonene?
Løsningsforslag
from numpy import pi, sqrt
A = 4
r = sqrt(A/pi) # Vi kunne også skrevet (A/pi)**0.5
print("Radius til sirkelen er:", r)
Brukerinput#
Vi kan også få programmet vårt til å spørre brukeren av programmet om å taste inn enkelte variabler selv. Dette gjøres i samme ruta som du får output i editoren din. For å få brukerinput, bruker vi funksjonen input. Kjør programmet nedenfor og beskriv hvordan det fungerer. Prøv å bytte ut ulike kodelinjer og se hva slags output du får. Du må skrive inn input-verdiene i konsollen til høyre i koderuta.
Input er ikke nødvendig for annet enn å lage et mer interaktivt program. Men hvis du lager et program med input, bør du legge til input helt til slutt. Start med å gi variablene verdier, og test at programmet fungerer. Deretter kan du bruke input på de variablene du ønsker. Dette er for å unngå å måtte taste inn input-verdier hver gang du kjører programmet ditt, spesielt hvis det inneholder feil du må rette opp!
Underveisoppgave
Modifiser programmet fra forrige underveisoppgave slik at det tar arealet som input fra brukeren.
Variabeltyper#
I matematikk har vi ulike tallmengder, som reelle tall, irrasjonale tall, rasjonale tall, naturlige tall, hele tall og komplekse tall. Disse tallmengdene er uendelig store, som betyr at de ikke kan eksistere på en datamaskin. Vi har derfor en del andre tallmengder og variabeltyper. For eksempel heter desimaltall float fordi ikke alle desimaltall er representert på en datamaskin. Det er altså en annen tallmengde. De viktigste variabeltypene ser du her:
Datatype |
Forklaring |
Eksempel |
---|---|---|
Heltall (int) |
Hele tall |
42 |
Flyttall (float) |
Desimaltall |
3.1415 |
Streng (str) |
Tekst |
“Hei!” |
Boolsk |
Sannhet |
True eller False |
Når vi ønsker input fra en bruker av et program, må vi spesifisere hvilken variabeltype vi ønsker at inputen skal bli tolket som. Standard er tekst, men hvis vi for eksempel “adderer” teksten “4” med “2”, får vi “42”, mens tallet 4 + tallet 2 gir tallet 6. Eksempelet nedenfor illustrerer dette.
tekst1 = input("Skriv et tall: ")
tekst2 = input("Skriv et tall til: ")
tall1 = float(tekst1)
tall2 = float(tekst2)
tullsvar = tekst1 + tekst2
tallsvar = tall1 + tall2
print("Summen av teksten er:", tullsvar, "og summen av tallene er:", tallsvar)
Skriv et tall: 4
Skriv et tall til: 2
Summen av teksten er: 42 og summen av tallene er: 6.0
Underveisoppgave
Lag et program som skriver “Hei, navn!” til skjermen. Brukeren skal bes om å taste inn navnet sitt. Dette navnet skal lagres i en variabel, og så skrives ut som i setningen ovenfor. Husk også utropstegnet til slutt.
Utvid programmet til å spørre om alderen din. La programmet skrive ut en kommentar til alderen din til slutt, for eksempel “din alder er jammen gammelt!”
Løsningsforslag
navn = input("Hva heter du? ")
print("Hei,", navn, "!") # Du kan eventuelt bruke + istedenfor komma mellom strenger for å unngå mellomrom
alder = input("Hvor gammel er du? ")
print(alder, "år er jammen gammelt!")
Datamaskinen krever nøyaktige instrukser#
Når du lager sammensatte programmer med Python, må du huske på følgende:
Programmet leses fra topp til bunn og fra venstre til høyre.
Små bokstaver er IKKE lik store bokstaver (p \(\neq\) P).
Python bryr seg lite om mellomrom, med mindre det er på starten av ei linje. Bruk mellomrom for å gjøre programmet ditt mer lesbart.
Øv deg på å lese feilmeldinger: Du får beskjed om linja der feilen befinner seg og typen feil.
Underveisoppgave
Forklar hva som er feil med følgende programmer:
tall1 = 1
print(tall1 + tall2)
tall2 = 3
navn = "Gunnar"
print(Navn)
a = 2
b = 3
print("Differansen mellom" a "og" b "=" a + b)
Løsningsforslag
Programmet leser fra topp til bunn. Derfor må vi definere tall2 før vi bruker det til addisjon. Linje 2 og 3 må derfor bytte plass.
Variabelen navn har liten n. Variabelen Navn finnes ikke.
For det første trenger vi komma mellom alle variabler i print-funksjonen. For det andre må det stå “summen”, ikke differansen!
print("Summen av", a, "og", b, "=", a + b)
Oppgaver#
Oppgave 1.1
Bruk kodeboksen nedenfor til å lage relevante variabler slik at programmet regner ut arealet av en trekant med grunnlinje 4 og høyde 2. Programmet inneholder litt kode fra før til å hjelpe deg på vei.
Løsningsforslag
g = 4
h = 2
A = g*h/2
print("Arealet til trekanten er:", A)
Oppgave 1.2
Lag et program som regner ut farten i m/s gitt følgende formel:
Utvid programmet slik at startfarten, akselerasjonen og tida blir tatt som input.
Løsningsforslag
Løsning uten input:
v0 = 1 # startfart i m/s
a = 10 # akselerasjon i m/s^2
t = 5 # slutt-tid i s
v = v0 + a*t
print("Sluttfarten blir:", v, "m/s")
Løsning med input:
v0 = float(input("startfart i m/s: "))
a = float(input("akselerasjon i m/s^2: "))
t = float(input("slutt-tid i s: "))
v = v0 + a*t
print("Sluttfarten blir:", v, "m/s")
Oppgave 1.3
Lag et program regner ut pH gitt konsentrasjonen av \(H_3O^+\)-ioner.
Løsningsforslag
from numpy import log10
H3O = 1E-6
pH = -log10(H3O)
print("pH =", round(pH,2))
Oppgave 1.4
a) Lag et program der du definerer innholdet av H-, C- og O-atomer i et karbohydrat i hver sine variabler. Den molare massen til hver av grunnstoffene skal også tilordnes hver sin variabel. Print så ut den molare massen til sukrose (\(C_{12}H_{22}O_{11}\)).
b) Lag en variabel som inneholder massen av innveid sukrose. Modifiser programmet fra oppgave a) slik at det printer ut hvor mange mol sukrose dette er, og hvor mange sukrosemolekyler dette tilsvarer.
Løsningsforslag
a)
# Antall atomer i forbindelsen
C = 12
H = 22
O = 11
# Molare masser i g/mol
m_C = 12.0
m_H = 1.0
m_O = 16.0
# Total molar masse
molar_masse_sukrose = C*m_C + H*m_H + O*m_O # g/mol
print("Den molare massen til sukrose er:", molar_masse_sukrose,"g/mol.")
b)
# Antall atomer i forbindelsen
C = 12
H = 22
O = 11
# Molare masser i g/mol
m_C = 12.0
m_H = 1.0
m_O = 16.0
# Masseberegninger
m = 10 # g innveid sukrose
N_A = 6.022E23 # Avogadros tall
M_m = C*m_C + H*m_H + O*m_O # g/mol
n = round(m/M_m,3) # mol
antall_molekyler = n*N_A
print(m, "gram sukrose tilsvarer", n, "mol, altså", antall_molekyler, "antall molekyler.")
Oppgave 1.5
Når vi fortynner en løsning, er antall mol av stoffet vi fortynner likt før og etter fortynningen: \(n_0 = n_1\). Siden \(n = c\cdot V\), der \(c\) er konsentrasjonen i mol/L og \(V\) er volumet i L, får vi følgende sammenheng:
Dette kaller vi fortynningsloven.
Lag et program som regner ut den nye konsentrasjonen hvis du fortynner 25 mL løsning med konsentrasjon 0,50 mol/L til 1,0 L.
Løsningsforslag
V1 = 0.025 # Startvolum i L
V2 = 1.0 # Sluttvolum i L
c1 = 0.50 # Startkonsentrasjon i mol/L
c2 = c1*V1/V2
print("Konsentrasjonen etter fortynning er:", c2, "mol/L.")
Oppgave 1.6
Lag et program som bruker en valgfri formel fra kjemi til å regne ut noe. Bruk input-funksjonen til å hente variabelverdier fra brukeren.
Oppgave 1.7
Mellom et elektron og et proton i et hydrogenatom virker det hovedsakelig to krefter: Én elektrisk kraft og én gravitasjonskraft. Den elektromagnetiske kraften kan uttrykkes litt forenklet ved Coloumbs lov:
hvor \(k_e\) er Coloumbs konstant (\(8.987742438\cdot10^9\) Nm\(^2\)C\(^{-2}\)), \(q_1\) og \(q_2\) er ladningen til de to partiklene, og \(r\) er avstanden mellom partiklene. Siden vi har å gjøre med et proton og et elektron, er ladningen lik elementærladningen \(e\): \(q_{proton} = e = 1.602176634\cdot10^{−19}\) C og \(q_{elektron} = -e\).
Gravitasjonskraften kan vi uttrykke ved hjelp av Newtons 2. lov:
der \(F_G\) er gravitasjonskreftene som virker mellom to legemer med henholdsvis masse \(m_1\) og \(m_2\) med avstand \(r\) mellom hverandres tyngdesentre. \(G\) er gravitasjonskonstanten (\(G= 6.674\cdot 10^{-11}\) Nkg\(^{-2}\)m\(^2\)), og avstanden mellom et proton og et elektron i hydrogenatomet er omtrent lik Bohr-radiusen, \(a_0 = 5.292\cdot10^{-11}\) m. Massen til et proton og et elektron er henholdsvis \(m_p = 1.672\cdot10^{-27}\) kg og \(m_e = 9.109\cdot10^{-31}\) kg.
a) Legg alle konstanter i hver sine variabler. Bruk kommentarer til å spesifisere hva de ulike variablene betyr og hvilken enhet de har. Benytt også gode variabelnavn. b) Lag to nye variabler der du beregner den elektriske kraften og gravitasjonskraften som virker mellom et elektron og et proton i hydrogenatomet. c) Print ut forholdet mellom kreftene med en beskrivende svarsetning. Hva sier dette deg? Legg svaret på dette spørsmålet i en flerlinjekommentar til slutt i programmet.
Løsningsforslag
# a
k_e = 8.987742438E9 # Coloumbs konstant i Nm^2C^-2
q = 1.602176634E-19 # Elementærladningen i C
G = 6.674E-11 # Gravitasjonskonstanten i Nkg^-2m^2
r = 5.292E-11 # Avstand i m mellom p og e i H-atomet
m_p = 1.672E-27 # Protonmassen i kg
m_e = 9.109E-31 # Elektronmassen i kg
# b
F_e = k_e*q*q/r**2 # Elektrisk kraft
F_g = G*m_p*m_e/r**2 # Gravitasjonskraft
# c
forhold = F_e/F_g
print("Forholdet mellom elektrisk kraft og gravitasjonskraft er:", forhold)
"""
Vi ser at den elektriske kraften er mye større enn gravitasjonskraften, noe som betyr at vi som regel kan se bort ifra gravitasjonskreftene når vi ser på et fåtall atomer og molekyler.
"""
Videoer#
Her kan du se videoer som introduksjon og/eller repetisjon til fagstoffet: