Variabler i programmering

{{ 'ml-heading-theory' | message }}

Inom programmering använder man variabler hela tiden. Dessa fungerar dock lite annorlunda jämfört med variabler inom matematiken, där de representerar värden man inte känner till eller värden som är godtyckliga. På den här sidan kommer du att lära dig om dessa skillnader och hur variabler kan användas inom programmering.

x = 13
y = x + 7
print(x, y)
x = 23
print(x, y)
Vad tror du kommer att hända när man kör det här kodexemplet? Testa koden och se om du hade rätt. Ändra sedan på exemplet och experimentera för att förstå hur variablerna beter sig. Spelar det t.ex. någon roll på vilken sida om likhetstecknet man anger variabeln? Vilka rader ändrar värdet i variabeln y?
Teori

Variabler i programmering

Inom programmering används variabler för att lagra olika sorters värden. Ofta är det fråga om heltal eller decimaltal, men det kan t.ex. också vara text. Man skapar en variabel genom att välja ett namn och skriva det följt av ett likhetstecken och sedan det man vill lagra i variabeln. Man kan t.ex. skriva

x = 10

för att lagra värdet 1010 i variabeln x. Man kan se det som att programmet skapar en låda märkt x som det sedan lägger värdet 1010 i.

Variabler i programmering 1 p.svg

Variabelnamn kan bestå av bokstäver, siffror och understreck (_) men de får inte börja med en siffra. I de flesta programmeringsmiljöer går det att använda å, ä och ö i variabelnamn men man brukar undvika att göra det eftersom det inte är garanterat att det fungerar.

en_variabel = 33.012
print(en_variabel)
variabel_2 = 74
print(variabel_2)

  • Visa resultat

>
33.012
74

Till skillnad från variabler inom matematiken är innehållet i programmeringsvariabler varken obekant eller godtyckligt, utan programmet håller hela tiden reda på vad som finns lagrat i dem. Det är dock möjligt att innehållet skrivs över med något annat allt eftersom programmet stegar sig igenom koden.

x = 10
print(x)
x = 20
print(x)

  • Visa resultat

>
10
20

När man lagrar ett värde i en variabel säger man att variabeln tilldelas ett värde. Variabelnamnet skrivs alltid innan likhetstecknet och det som kommer efter är vad som sparas i variabeln. Om det är ett uttryck kommer det beräknas och sedan lagras, så om man skriver

x = 3*7 + 8

kommer programmet att räkna ut 37+8=293\cdot7 + 8 = 29 och lagra värdet 2929 i variabeln x. Det som står till höger om likhetstecknet kan även innehålla andra variabler, t.ex.

y = x + 6.

Om man redan har sparat värdet 2929 i x kommer detta att sättas in i uttrycket och programmet gör beräkningen 29+6=3529 + 6 = 35 för att sedan spara 3535 i variabeln y. Det går till och med att använda den variabel som får tilldelningen i uttrycket till höger om likhetstecknet.

y = y + 1.

I matematiken skulle det här vara en ekvation, men i ett program tolkas det på ett annat sätt. Här läser programmet först av vad som finns lagrat i y och sätter in det i högerledet, vilket ger uträkningen 35+1=36.35 + 1 = 36. Programmet skriver sedan över y med detta nya värde.

x = 3*7 + 8
print(x)
y = x + 6
print(y)
y = y + 1
print(y)

  • Visa resultat

>
29
35
36

Uppgift

Vad kommer att finnas i variablerna a och b efter att man har kört följande kod?

a = 25
b = 4*a
a = 4*b
b = b - 10
Lösning

Vi börjar på rad 1,1, där vi ser att variabeln a tilldelas värdet 25.25. Man kan tänka sig variabeln som en låda, och nu ligger talet 2525 i lådan.

Vad lagras i variablerna 1.svg

På rad 22 skapas variabeln b och tilldelas resultatet av beräkningen till höger om likhetstecknet, alltså 4*a. Just nu ligger värdet 2525 i a, så beräkningen blir 425=100.4 \cdot 25 = 100. Nu har alltså en ny låda skapats med talet 100100 i.

Vad lagras i variablerna 2ii.svg

På rad 33 skapas ingen ny variabel, istället ändras värdet på a. Till höger om likhetstecknet står 4*b, och med värdet 100100 i b blir beräkningen 4100=400.4 \cdot 100 = 400. Vi ska alltså skriva över innehållet i a med 400.400.

Vad lagras i variablerna 3.svg

I matematik är b=b10b = b-10 en motsägelse, men i Python innebär det att värdet b-10 ska lagras i variabeln b. Just nu ligger 100100 i b, så beräkningen blir 10010=90.100 - 10 = 90. Variabeln ska alltså tilldelas värdet 90,90, vilket skriver över det gamla.

Vad lagras i variablerna 4.svg

Detta är alltså vad som finns lagrat i variablerna efter att koden har körts.

Visa lösning Visa lösning
Teori

Datatyp

En datatyp är en viss sorts information, t.ex. heltal eller strängar, som ett programmeringsspråk handskas med. Dessa kan inte kombineras hur som helst - man kan t.ex. inte addera ett tal och en text. Vissa operatorer, som t.ex. +, fungerar olika beroende på vilken datatyp man använder dem på. Det är framför allt fem datatyper man bör känna till.

  • Heltal (integer, int)
    Detta är en datatyp för heltal, t.ex. 4 och -55.
  • Flyttal (float)
    Denna datatyp används för decimaltal, t.ex. -8.7 och 3.0.
  • Sträng (string, str)
    Strängar används för vanlig läsbar text, t.ex. 'Jag är 17 år gammal.'. Strängar skrivs inom apostrofer.
  • Bool (boolean)
    Det finns bara två möjliga värden för datatypen bool: sant och falskt, vilket i Python skrivs True respektive False.
  • Lista (list)
    Listor används för samlingar av värden, t.ex. [2, 4, 8, 16] eller [5, 'text', 3.14]. Listor skrivs inom hakparenteser.
Teori

Lista

Listor är en datatyp i Python som kan innehålla flera värden eller variabler. Man skapar dem genom att sätta hakparenteser runt en följd av värden, separerade med komman.

x = [1, 2, 3, 4, 5]
print(x)

  • Visa resultat

>
[1, 2, 3, 4, 5]

Värdena i listor måste inte ha samma datatyp utan man kan blanda hur man vill.

x = [1, 'två', 3.0, 4, 'fem']
print(x)

  • Visa resultat

>
[1, 'två', 3.0, 4, 'fem']

För att komma åt ett visst element i en lista sätter man en hakparentes efter variabelnamnet och skriver numret för det element man vill ha. I Python har man valt att indexeringen ska börja på 0,0, inte 1,1, så om man exempelvis vill få tag i det tredje elementet skriver man x[2].

x = [1, 'två', 3.0, 4, 'fem']
print(x[2])

  • Visa resultat

>
3.0

Om man vill lägga till ett värde i en lista som redan finns går det att göra med hjälp av kommandot append(). Man använder det genom att skriva namnet på listan följt av en punkt och append(), där man skriver in det värde man vill lägga till inom parentesen. Då hamnar värdet sist i listan.

x = [1, 2, 3, 4, 5]
x.append(10)
print(x)

  • Visa resultat

>
[1, 2, 3, 4, 5, 10]

Uppgift


Ylva ska beräkna värdet av ett polynom för några xx-värden. Hon börjar med x=3x=3 och skriver ett program för beräkningen.

print(18*3**4 - 57*3**3 + 12*3**2 + 100*3 - 560)

  • Visa resultat

>
-233

Hon vill nu göra samma sak för xx-värdena 4,4, 55 och 6,6, vilket blir många småändringar i programmet. Hjälp Ylva göra sitt program lättare att anpassa till nya beräkningar med hjälp av variabler.

Lösning

I programmet har Ylva satt in x=3x=3 på flera ställen. Byter vi tillbaka dessa mot xx hittar vi polynomet: p(x)=18x457x3+12x2+100x560.p(x) = 18x^4-57x^3+12x^2+100x-560. Dessa xx kan även användas i koden. En skillnad mellan variabler i programmering och i matematiska uttryck är att Python måste veta vad som ligger i variabeln. Vi behöver därför en rad till där x tilldelas ett värde.

x = 3
print(18*x**4 - 57*x**3 + 12*x**2 + 100*x - 560)

  • Visa resultat

>
-233

Programmet gör precis samma sak som tidigare, men den här versionen är lättare att återanvända. Nu behöver Ylva bara ändra till x=4 och köra programmet igen för att beräkna nästa värde, istället för att ändra 3 till 4 på fyra ställen. Det är dessutom mer lättläst!

x = 4
print(18*x**4 - 57*x**3 + 12*x**2 + 100*x - 560)

  • Visa resultat

>
992

Visa lösning Visa lösning
Teori

Kommentar

Inom programmering är en kommentar ett textstycke i koden som inte tolkas av programmet. Syftet kan vara att förklara vad koden gör eller att tillfälligt dölja en kodrad som man kanske vill använda senare. I Python skapas en kommentar med tecknet #. Alla efterföljande tecken på samma rad som # ignoreras av programmet.

#Programmet tar ett tal x och skriver ut talet y,
#som är 5 större.

x = 2		# Här sätts startvärdet
y = x + 5

# Raden nedan är bortkommenterad och därför skrivs y inte över
# y = -2

print(y)

  • Visa resultat

>
7

Uppgifter

Nivå 1
1.1
{{ 'ml-btn-focusmode-tooltip' | message }} settings_overscan

Skriv ett program som gör följande steg.

  • Skapar en variabel med värdet 7.7.
  • Skriver ut variabeln.
  • Gör värdet i variabeln tre gånger så stort.
  • Skriver ut variabeln igen.
1.2
{{ 'ml-btn-focusmode-tooltip' | message }} settings_overscan

Skriv ett program som gör följande saker.

  • Skapar en variabel som heter min_variabel och som innehåller värdet 8736.8736.
  • Skriver ut min_variabel.
  • Ändrar värdet i min_variabel till 111119.111119.
  • Skriver ut min_variabel igen.
  • Skriver ut det tal som är 27382738 större än min_variabel.
1.3
{{ 'ml-btn-focusmode-tooltip' | message }} settings_overscan

Vilken datatyp har följande variabler?

a

a = 2.5

b

b = 'Grönland'

c

c = 2023

d

d = ['x', 'y', 'z']

1.4
{{ 'ml-btn-focusmode-tooltip' | message }} settings_overscan

I ett program har man skapat följande lista.

info = [2001, 176, 17, 'år', 'längd', 'ålder']
a

Vad får man om man skriver info[3]?

b

Vad ska man skriva för att få 176?

c

Vad finns i det femte elemtet?

d

Vilket element har index 5?

1.5
{{ 'ml-btn-focusmode-tooltip' | message }} settings_overscan

Skapa en lista som innehåller de 88 första primtalen. Använd sedan listan för att skriva ut det femte och sjunde primtalet.

1.6
{{ 'ml-btn-focusmode-tooltip' | message }} settings_overscan

Henke har skrivit ett program.

varde = 10000
arsranta = 1.012
varde = varde * arsranta
print(varde)
varde = varde * arsranta
print(varde)
varde = varde * arsranta
print(varde)

Beskriv vad koden gör och förklara varför Henke skulle kunna ha skrivit det.

Nivå 2
2.1
{{ 'ml-btn-focusmode-tooltip' | message }} settings_overscan

Antag att koefficienterna till ett femtegradspolynom lagras i en lista på följande sätt.

koeff = [551, -5, 1, 8, 7, -85]

Det första elementet är konstanttermen, det andra är koefficienten framför x,x, osv.

a

Skriv ett program som använder en sådan lista och ett xx-värde för att beräkna och skriva ut polynomets värde. Använd programmet för listan ovan och xx-värdet 2.2.

b

Använd programmet för att beräkna värdet för polynomet 5x560x3+x2100x+77235x^5 -60x^3 +x^2 - 100x + 7723 när x=-5.x = \text{-}5.

2.2
{{ 'ml-btn-focusmode-tooltip' | message }} settings_overscan

Aksel tillverkar och säljer två sorters bullar. För att hjälpa honom med verksamheten har han skrivit ett program, där den viktiga delen ser ut så här.

vinst_kanel = intakt_kanel - utgift_kanel
vinst_polka = intakt_polka - utgift_polka
print(vinst_kanel / vinst_polka)


a

Vad gör programmet?

b

Aksel kör programmet med värdena nedan.

intakt_kanel = 32*22 - 5*12
utgift_kanel = 16*9 + 30*3
intakt_polka = 15*17 -2*22
utgift_polka = 13*12 + 3*15 + 10

Det ger ett felmeddelande. Varför blir det fel?

2.3
{{ 'ml-btn-focusmode-tooltip' | message }} settings_overscan

Nisse vill undersöka den linjära funktionen f(x)=x+10.f(x) = x + 10. Han vill först testa den för x=2x=2 och skriver följande.

x = 2
y = x + 10

Han använder print för att undersöka värdena, och vill sedan testa en punkt till. Han lägger då till dessa rader till programmet.

x = 15
print(x, y)

Han väntar sig att se 15 25, men det får han inte. Varför?

2.4
{{ 'ml-btn-focusmode-tooltip' | message }} settings_overscan

Matematik och programmering använder liknande notation men med olika innebörd. Vilka av formuleringarna nedan är giltiga inom matematik och vilka är giltiga kodstycken?

  • x=5x = 5
  • x=x+5x = x + 5
  • x+5=xx + 5 = x
  • x+5=10x + 5 = 10
2.5
{{ 'ml-btn-focusmode-tooltip' | message }} settings_overscan

Antag att man har två variabler, x och y.

x = -50
y = -97

Hur kan man byta plats på värdena i variablerna?

Nivå 3
3.1
{{ 'ml-btn-focusmode-tooltip' | message }} settings_overscan
a

Skriv ett program som beräknar kk- och mm-värdet för den räta linje y=kx+my = kx + m som går igenom punkterna (5,15)(5,15) och (20,135).(20,135). Använd listorna p1 och p2 för att definiera punkterna.

p1 = [5, 15]
p2 = [20, 135]
b

Använd programmet för att bestämma den räta linje som går igenom punkterna (233,9928)(233, 9928) och (-2637,389).(\text{-} 2637, 389). Svara med två decimalers noggrannhet.

c

Använd programmet på punkterna (245,28.366)(245, 28.366) och (245,-2192.91).(245, \text{-}2192.91). Vilket resultat får du och varför?

Test
{{ 'mldesktop-selftest-notests' | message }} {{ article.displayTitle }}!
{{ tests.error }}

{{ 'ml-heading-exercise' | message }} {{ focusmode.exercise.exerciseName }}

keyboard_backspace
{{ section.title }} keyboard_backspace {{ 'ml-btn-previous' | message }} {{ 'ml-btn-previous-exercise' | message }} {{ 'ml-btn-next-exercise' | message }} keyboard_backspace {{ 'ml-btn-next-exercise' | message }}