Variabler og datatyper#

Læringsutbytte

Etter å ha arbeidet med dette temaet, skal du kunne:

  1. kjøre enkle programmer med en programmeringseditor

  2. definere og gjøre rede for ulike variabeltyper: heltall, flyttall og strenger

  3. skrive ut output ved å bruke print-funksjonen

  4. gjøre enkel aritmetikk i Python

  5. ta input fra brukeren av programmet

  6. 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.

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?

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.

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.

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?

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!”

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)
https://live.staticflickr.com/3136/2842497804_f2684b2dcf_c.jpg

Fig. 1 En av de første “bugs” ble funnet av Grace Hopper, som også lagde den første kompilatoren, en oversetter fra programmeringsspråk til maskinkode. Bugs var altså faktiske insekter som satt seg fast i de mekaniske delene og lagde krøll. Forhåpentligvis får du ingen feilmeldinger om insekter i datamaskinen din.#

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.

Oppgave 1.2

Lag et program som regner ut farten i m/s gitt følgende formel:

\[v = v_0 + at\]

Utvid programmet slik at startfarten, akselerasjonen og tida blir tatt som input.

Oppgave 1.3

Lag et program regner ut pH gitt konsentrasjonen av \(H_3O^+\)-ioner.

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.

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:

\[c_1V_1 = c_2V_2\]

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.

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:

\[F_e = k_e\frac{q_1q_2}{r^2}\]

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:

\[F_g = G \frac{m_1m_2}{r^2}\]

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.

Videoer#

Her kan du se videoer som introduksjon og/eller repetisjon til fagstoffet: