Att förstå variabler Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata. Vad är en variabel? En variabel är en plats att lagra information. Precis som du sparar din bästa kompis telefonnummer i ditt minne, kan du spara information i datorns minne. Variabler är ett sätt att komma åt informationen som finns i datorns minne. Nu som då behöver du göra ändringar i ditt minne. Din kompis kanske flyttar utomlands och får en helt ny telefonnummer. Då måste du byta ut det gamla telefonnumret i ditt minne mot det nya. På samma sätt kommer ditt minne att förändras med tiden, i och med att du får nya kompisar, vars telefonnummer du behöver komma ihåg. På samma sätt kan en dators minne ändra med tiden, när än du ber om det genom att ändra på variablernas värden. Därav kommer också uttrycket variabel: en variabels värde kan variera. Olika typer av värden Heltal, flyttal och komplexa tal är alla tal, eller hur? Man kan ändå inte säga att ett heltal är det samma som ett flyttal, utan de olika talen är olika typer av tal. Med andra ord utgör heltal en mängd tal, medan flyttalen utgör en annan mängd. Med enbart tal skulle man inte komma speciellt långt i programmeringen, utan man behöver andra sorters data också. Exempelvis är text inte en typ av tal, varför text behöver få en egen typ; vi kallar text för strängar. Dessa olika typer kallas i programmeringssammanhang för datatyper. Förutom siffror och strängar finns det en mängd andra datatyper som du kommer att stöta på framöver. Variabler och minnet Variablerna hör till de verkliga grundstenarna i ett datorprogram. Utan variabler skulle vi inte ha så stor nytta av datorer. Låt oss ta ett exempel. Anta att du har ett program som ber användaren mata in två tal och sedan summerar dem och skriver ut resultatet. Det låter enkelt, eller hur? Men låt oss fundera lite närmare på vad datorn måste göra för att köra ett sådant programmet. För att göra det riktigt enkelt att förstå skall vi se på det som en diskussion mellan två personer, i stället för mellan en dator och en person. Lisa: Hallå där Frank, jag har just lärt mig hur man adderar två tal. Frank: Häftigt! Lisa: Ge mig det första talet. Frank: 2. Lisa: Ok! Ge mig nu det andra talet. Frank: 5. Lisa: Ok! Här är svaret: 2 + 5 = 7. Frank: Wow, du är ju helt otrolig! När Frank har sagt "2" måste Lisa komma ihåg det för att kunna använda det senare på
nytt; hon måste alltså lagra det i sitt minne, innan Frank säger det andra talet. På samma sätt måste datorn spara undan informationen: först måste det första talet lagras i en variabel, sedan det andra talet i en annan variabel. Slutligen måste den addera värdena i de två variablerna och lagra summan i ytterligare en variabel för att inte glömma bort den. Okej, det finns alltså stora likheter mellan det mänskliga minnet och datorns minne. Men, det finns också stora skillnader. Du kan tänka på datorns minne som ett postkontor med en vägg full av postfack. Varje fack har en adress så att postmannen skall kunna del ut rätt post till rätt person. Flera lådor kan inte heller ha samma adress, eftersom det skulle rådda bort postmannen totalt. På samma sätt är datorns minne uppbyggt som en mängd lådor, så kallade celler, som var och en har en unik adress. FLASH-EXAMPEL För att kunna lagra saker i datorns minne måste du "reservera" utrymme där: du kan inte bara kasta in informationen hur som helst, utan du måste säga vad du vill spara och med vilket namn. Det här kallas att tilldela en variabel, och innebär att du sätter in ett värde i en cell i minnet, som du sedan kan komma åt med hjälp av det variabelnamn du valt: Därefter kan datorn enkelt addera ihop de två talen och lagra resultatet i ännu en variabel: summa = tal1 + tal2 Vad händer om man ändrar en variabels värde? Tilldelning a = 7 b = a Omtilldelning a = 9 Vad händer med b? Viktigt! Ett variablenamn motsvaras av en plats i datorns minne. När du sätter in ett nytt värde i en variabel byter den ut det gamla värdet; det gamla värdet försvinner ur minnet Att läsa information om en variabel från minnet ändrar inte variabelns innehåll på något sätt
Exempel (film) Anta att du skriver ett program som använder din månadslön, 1000 å flera ställen. Du skriver gladeligen in lönebeloppet 1000 på alla dessa ställen, och ditt program fungerar precis som du vill. Så en dag när du kommer till jobbet kallar chefen in dig på sitt rum och ger dig en helt fenomenal nyhet; du har fått en 100-euros löneförhöjning! Visst, glada nyheter i alla andra sammanhang än vad ditt program beträffar; för att du skall få programmet att fungera korrekt igen, måste du gå igenom varje kodrad för att ändra värdet 1000 som representerar din gamla lön till det nya beloppet, 1100. I ett stort program innebär en sådan ändring ett stort arbete som kräver mycket tid. Dessutom är risken för att du missar att ändra en eller ett par förekomster i koden rätt stor, och på det sättet introducerar allvarliga buggar (fel) i ditt program. Det är i sådana här situationer som vi har nytta av variabler! I ditt program, kunde du t.ex. välja namnet lön för att representera det aktuella lönebeloppet. Likhetstecknet innebär att ordet på vänstra sidan härefter pekar på värdet på högra sidan, i detta fall så att lön får värdet 1100. Genast efter att du har tilldelat en variabel kan du skriva om alla kodrader som innehåller det felaktiga beloppet 1000 så att du i stället för 1000 nu använder lön. Nästa gång du får en löneförhöjning behöver du bara ändra på raden så att den motsvarar den nya lönen för att ändringen skall gälla i hela programmet. Varför kallas nu då de här namnen för variabler? Jo, en variabel är ett värde som kan variera medan programmet körs; dess värde är inte konstant. Tänk tillbaka på ditt löneprogram och anta att det innehåller följande kodrader: skatt = lön * 0.15 I den här kodsnutten finns två variabler; lön och skatt. 0.15 representerar här din skatteprocent. En av orsakerna till varför variabler är bra att ha är alltså att lagra resultatet från en beräkning. Du kan här tänka på variabeln skatt som en slags låda i vilken programmet kastar ner resultatet av beräkningen. När du behöver komma åt värdet som lagras variablerna, kan du bara lägga ner handen i lådan och lyfta upp det; bildligt talat förstås. Om du t.ex. vill räkna ut vad du får i handen, efter att du betalat skatt, kan du skriva så här.
i_handen = lön - skatt Här introducerar vi ännu en variabel; i_handen. Efter att datorn har utfört subtraktionen lön - skatt, kommer variabeln i_handen att innehålla värdet... Ja, vad blir det? Testa nu att skriva in hela koden i Python-tolken och se vad du kommer till för resultat. INTERAKTION [Kolla] (Rätt svar 935) Bra! Kan du se något annat ändamål där variabler behövs? Jo, hur är det med skatteprocenten? Borde inte den också vara en variabel, i stället för att skrivas in som siffror i koden - skatteprocenten kan ju ändras den också, precis som din lön, och då är det mycket behändigare att bara behöva ändra på ett ställe i stället för på flera. Hur skulle det vara med att introducera en ny variabel, t.ex. skatteprocent. Då får vi följande program: skatteprocent = 0.15 skatt = lön * skatteprocent i_handen = lön - skatt Kolla gärna att den här kodsnutten ger samma resultat som den tidigare. Okej, nu har du kanske fått en bild av hur pass nyttiga variabler verkligen är. Vad skall man kalla sina variabler? Vad tror du meningen med följande kodsnutt är? a = 1100 b = 0.15 c = a * b d = a - c Hmm, inte helt enkelt att förstå vad som är meningen, eller hur? Det här är faktiskt ditt löneprogram, enda skillnaden är att variabelnamnen är ändrade. Om du kör programmet ser du att det ger samma resultat. Här ser du hur viktigt det är att ge variablerna bra namn; namn som inte betyder något ger inte den som läser koden någon som helst idé om vad de olika variablerna representerar; vad står namnen a, b, c och d för? Genom att välja bra variabelnamn, eller identifierare, kan du få dina program självdokumenterande, vilket betyder att kodraderna i sig förklarar för läsaren vad programmet gör. När du namnger dina variabler, kan du inte bara skriva in en rad tecken på tangentbordet och förvänta dig att Python skall godkänna vad som helst; det finns en del regler som du måste följa. För det första måste en identifierare i Python börja med något av följande tecken:
A-Z a-z _ De följande tecknena kan bestå av följande: A-Z a-z _ 0-9 Dessutom har Python en del egna ord, sk. nyckelord, som Python har monopol på och vi som programmerar inte får använda som identifierare. and del for is raise assert elif from lambda return break else global not try class except if or while continue exec import pass yield def finally in print FLASH-EXEMPEL Observera att det är skillnad på små och stora bokstäver i variabelnamn: vikt och Vikt är två olika namn, liksom antalet_elever och Antalet_Elever. Sammanfattning Alla datorer måste manipulera data för att producera ett resultat. Precis som andra programmeringsspråk, ger Python dig många olika datatyper som du kan använda i dina program. Datatyperna gör det möjligt att hantera bland annat siffror och text. Det finns mycket att lära om variabler och det är helt okej om du känner dig lite vimsig just nu. Men oroa dig inte; när du har sovit på saken och börjar programmera och verkligen använda variablerna i praktiken kommer allt att vara helt vettigt. Att fundera på: Vad är en variabel? Hur gör variabler det lättare att skriva program? Anta att du skall skriva ett program som beräknar en anställds lön för ett givet antal timmar i veckan. Vilka variabler behöver du? Skriv programmet som beräknar lönen med hjälp av dessa variabeldeklarationer.