Logga in
| 7 sidor teori |
| 12 Uppgifter - Nivå 1 - 3 |
| Varje lektion är menad motsvara 1-2 lektioner i klassrummet. |
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
?
I den här lektionen går vi igenom följande begrepp:
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 10 i variabeln x
. Man kan se det som att programmet skapar en låda märkt x
som det sedan lägger värdet 10 i.
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)
>
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)
>
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 3⋅7+8=29 och lagra värdet 29 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 29 i x
kommer detta att sättas in i uttrycket och programmet gör beräkningen 29+6=35 för att sedan spara 35 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. 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)
>
29
35
36
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
a=400 och b=90
Tänk på varje variabel som en låda. I början har lådan märkt a
siffran 25. Skapa en andra låda märkt b.
Vi börjar på rad 1, där vi ser att variabeln a
tilldelas värdet 25. Man kan tänka sig variabeln som en låda, och nu ligger talet 25 i lådan.
På rad 2 skapas variabeln b
och tilldelas resultatet av beräkningen till höger om likhetstecknet, alltså 4*a
. Just nu ligger värdet 25 i a
, så beräkningen blir 4⋅25=100. Nu har alltså en ny låda skapats med talet 100 i.
På rad 3 skapas ingen ny variabel, istället ändras värdet på a
. Till höger om likhetstecknet står 4*b
, och med värdet 100 i b
blir beräkningen 4⋅100=400. Vi ska alltså skriva över innehållet i a
med 400.
I matematik är b=b−10 en motsägelse, men i Python innebär det att värdet b-10
ska lagras i variabeln b
. Just nu ligger 100 i b
, så beräkningen blir 100−10=90. Variabeln ska alltså tilldelas värdet 90, vilket skriver över det gamla.
Detta är alltså vad som finns lagrat i variablerna efter att koden har körts.
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.
Datatyp | Beskrivning |
---|---|
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.
|
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)
>
[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)
>
[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, inte 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])
>
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)
>
[1, 2, 3, 4, 5, 10]
Ylva ska beräkna värdet av ett polynom för några x-värden. Hon börjar med x=3 och skriver ett program för beräkningen.
print(18*3**4 - 57*3**3 + 12*3**2 + 100*3 - 560)
>
-233
x = 4
print(18*x**4 - 57*x**3 + 12*x**2 + 100*x - 560)
x = 5
print(18*x**4 - 57*x**3 + 12*x**2 + 100*x - 560)
x = 6
print(18*x**4 - 57*x**3 + 12*x**2 + 100*x - 560)
Först, hitta polynomet som Ylva använder. Använd sedan det uttrycket inuti print-instruktionen. Kom ihåg att först definiera variabelns värde.
x
tilldelas ett värde. x = 3
print(18*x**4 - 57*x**3 + 12*x**2 + 100*x - 560)
>
-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
, x=5
, och x=6
, 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)
x = 5
print(18*x**4 - 57*x**3 + 12*x**2 + 100*x - 560)
x = 6
print(18*x**4 - 57*x**3 + 12*x**2 + 100*x - 560)
>
992
4365
11488
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)
>
7
Skriv ett program som beräknar k- och m-värdet för den räta linje y=kx+m som går igenom punkterna (5,15) och (20,135). Använd listorna p1
och p2
för att definiera punkterna.
p1 = [5, 15]
p2 = [20, 135]
Använd programmet för att bestämma den räta linje som går igenom punkterna (233,9928) och (−2637,389). Svara med två decimalers noggrannhet.
Använd programmet på punkterna (245;28,366) och (245;−2192,91). Vilket resultat får du och varför?
För att bestämma den räta linje y = kx + m som går igenom två punkter måste man först bestämma k-värdet. Det gör man med formeln
k = Δ y/Δ x = y_2 - y_1/x_2 - x_1.
Vi kan skriva formeln på en enda rad i koden, men den blir tydligare om vi skapar variabler för täljare och nämnare, t.ex. delta_x
och delta_y
. Vi definierar dem som skillnaden i x- respektive y-led. Eftersom punkternas koordinater finns i listorna p1
och p2
kan vi använda indexering för att beräkna delta_x
och delta_y
.
p1 = [5, 15] p2 = [20, 135]
delta_x = p2[0] - p1[0] delta_y = p2[1] - p1[1]
Det gäller att vara försiktig med indexeringen så att man använder rätt värden. I p1
och p2
ligger x-värdena först, vilket innebär att de får index 0, och eftersom y-värdena ligger efter så får de index 1. Uträkningen x_2 - x_1 blir då p2[0] - p1[0]
och y_2 - y_1 blir då på samma sätt p2[1] - p1[1]
. Vi räknar sedan ut k-värdet genom att dividera dessa.
p1 = [5, 15] p2 = [20, 135]
delta_x = p2[0] - p1[0] delta_y = p2[1] - p1[1] k = delta_y / delta_x
Nu beräknar vårt program k-värdet, men vi vill även ha m-värdet. Löser vi ut m ur ekvationen för linjen, y = kx + m, får vi uttrycket m = y - kx. Vi känner ju som sagt till k, och vi vet även två par av x- och y-värden som ska ligga på linjen. Vi kan ta ett av dessa, t.ex. (x_1,y_1), och sätta in i uttrycket för att beräkna m.
m = y_1 - kx_1
Vi skriver detta som kod, och då ges x_1 av p1[0]
och y_1 av p1[1]
medan k ges av k
som vi precis räknade ut.
p1 = [5, 15] p2 = [20, 135]
delta_x = p2[0] - p1[0] delta_y = p2[1] - p1[1] k = delta_y / delta_x m = p1[1] - k*p1[0]
Till sist ska vi skriva ut våra resultat. För att det ska vara tydligt vilket värde som är vilket skriver vi ut 'k-värde:'
och 'm-värde:'
innan resultaten.
p1 = [5, 15] p2 = [20, 135]
delta_x = p2[0] - p1[0] delta_y = p2[1] - p1[1] k = delta_y / delta_x m = p1[1] - k*p1[0] print('k-värde:', k) print('m-värde:', m)
Vårt program är nu färdigt och om vi kör det får vi följande resultat.
> k-värde: 8.0 m-värde: -25.0
Linjen som går igenom punkterna är alltså y = 8x - 25.
Det enda vi behöver göra för att beräkna k- och m-värdet för den linje som går igenom punkterna (233,9 928) och (-2 637,389) är att byta ut värdena på de första två raderna. Det spelar ingen roll vilken punkt man kallar p1
och vilken man kallar p2
.
p1 = [-2637, 389] p2 = [233, 9928]
delta_x = p2[0] - p1[0] delta_y = p2[1] - p1[1] k = delta_y / delta_x m = p1[1] - k*p1[0] print('k-värde:', k) print('m-värde:', m)
När vi kör den här koden får vi de sökta k- och m-värdena med en ordentlig mängd decimaler.
> k-värde: 3.323693379790941 m-värde: 9153.579442508712
Vi skulle avrunda till 2 decimaler, vilket ger den räta linjen y = 3,32x + 9 153,58.
Vi gör samma sak igen och byter ut värdena i de första två raderna mot (245;28,366) och (245;-2 192;91).
p1 = [245, 28.366] p2 = [245, -2192.91]
delta_x = p2[0] - p1[0] delta_y = p2[1] - p1[1] k = delta_y / delta_x m = p1[1] - k*p1[0] print('k-värde:', k) print('m-värde:', m)
Kör vi den här koden får vi dock ett fel.
> Traceback (most recent call last):
File "python", line 6, in <module>
ZeroDivisionError: float division by zero
Tydligen har det skett en nolldivision på rad 6 vilket gjort att programmet stannat. Variabeln delta_x
måste alltså vara lika med 0, vilket inte är så konstigt med tanke på att båda punkterna har samma x-värde. Det betyder att punkterna ligger på en lodrät linje, och en sådan linje går ju inte att skriva på k-form. Linjen går att skriva som
x = 245,
men vårt program är inte designat för att ta fram sådana linjer, bara k- och m-värden.