Göm menyn

961G24 Programmering i text-baserad miljö

Variabler och datatyper

Variabler och datatyper

Nedan kommer vi ta upp sådant som är bra att veta om variabler och datatyper.

Vad är en variabel?

När du läste om grundläggande in- och utmatning tog vi upp lite information om variabler. Vi beskrev en variabel som en låda i vilken vi kan lagra olika värden eller uttryck. Python är ganska speciellt som programmeringsspråk eftersom vi inte behöver göra något särskilt för att skapa variabler, så vi kan direkt tilldela variabeln "x" ett värde om vi vill. Vi tilldelar värden med hjälp av operatorn "=". Exempelvis så här:


x = 5

Variabler är inte heller av en speciell datatyp i Python. En variabel kan bara sägas att vara av en särskild typ så länge denna innehåller data av en särskilld datatyp. Vi tog också upp att det inte bara går att spara heltal i variabler utan att till exempel strängar kunde lagras i dessa variabler. I praktiken kan vi när som helst byta datatypen i vår variabel vilket är smidigt men kan ställa till med besvär i mer komplicerade program:

x = 5 # x är av typen heltal (integer)
x = 5.0 # x är nu av typen flyttal (float)
x = "hej" # x är nu av typen sträng (string)
x = True # x är nu av typen sanningsvärde (boolean)

Det mer än datatyper som kan lagras i variabler men det vi kommer använda dem till för det mesta är att lagra enklare datatyper.

Pythons datatyper

Python har många inbyggda datatyper och vi kommer gå igenom de vanligaste och mest användbara för enklare program nedan.

Sanningsvärden (booleans)

Sanningsvärden eller booleans (förkortas bool) är binära. De är antingen True eller False. Orden för sanningsvärden är reserverade (keywords) i Python vilket betyder att man inte får använda dem som variabler:

False = 4 # denna rad kommer leda till ett "Syntax error"
True = 4 # denna rad kommer leda till ett "Syntax error"

Sanningsvärden motsvarar också siffror i Python där sant är 1 och falskt är 0. Alla objekt i python (bland annat variabler) kan användas för att komma fram till ett sanningsvärde. Det kan vara bra att veta att man utgår i från att någonting är sant om det inte är definerat att vara falskt. Exempel på saker som räknas som False är till exempel siffror som är 0 och datasamlingar (exempelvis listor) som är tomma. Vi kan alltid testa om något räknas som sant eller falkst med hjälp av den inbyggda operationen bool(), testa att köra koden nedan och se vilka rader utvärderas till sanna respektive falska resultat:

bool(5)
bool(0)
bool("")
bool("hej")

Det vanligaste sättet vi använder olika datatyper för att komma fram till att någonting är sant eller falskt är dock i samband med jämförelser. Exempelvis kan det vara praktiskt att kunna jämföra storleken av två tal. Detta kan vi göra med jämförelseoperatorer. Det finns ett par exempel nedan men du kommer få lära dig mer om hur detta fungerar i nästa kapitel:

5 == 5 #Obeservera att det är två "=" för att jämföra och ett "=" för att tilldela
5 > 5
4 < 5

Numeriska värden

Det finns tre numeriska typer i Python. Heltal(integers), flyttal(floating point numbers) och komplexa tal(complex numbers). Komplexa tal kommer vi inte ta upp i kursen men det kan vara kul att veta om dem. Heltal i Python förkortas int och är bland de enklaste och vanligaste datatyperna. Flyttal förkortas float och kan också vara mycket användbara. Heltal och flyttal har många operatorer som kan användas och man kan använda en eller båda typerna i samma uttryck.

5 + 5.0 # addition
5 / 5 # division
5.0 * 5.0 # multiplikation
4 // 3.0 # heltalsdivision (avrundas ner till närmaste heltal)
4 % 3.0 # modulo (resten vid heltalsdivision)

Numeriska värden kan vara bra att manipulera även på andra sätt än ovan. Ibland kan det exempelvis vara nödvändigt att konvertera en annan typ till antingen heltal eller flyttal. Detta kan vi göra med hjälp av int() och float(). Dessa kommandon är dessutom så kraftfulla att de kan konvertera datatyper som inte är numeriska värden till numeriska värden. Ibland kan vi dock förlora data genom vid byte från en datatyp till en annan. Om ett flyttal konverteras till ett heltal försvinner all data som har med decimalerna att göra.

float(5) # konvertera heltalet 5 till flyttalet 5.0
int(5.1) # konvertera flyttalet 5.1 till heltalet 5
int("6") # konvertera strängen 6 till heltalet 6

Matematiska regler gäller även i python och kan precis som vanligt manipuleras med hjälp av parenteser, testa gärna följande i terminalen:

3.0 / 2.0 * 10.0
3.0 / (2.0 * 10.0)
3.0 + 2.0 / 2.0
(3.0 + 2.0) / 2.0

Övning numeriska värden

Nedan finns ett program som sätter ihop (konkatinerar) två strängar och skriver ut dessa. Din uppgift är att ändra programmet så att det konverterar innehållet i variablerna till att vara heltal och sedan skriver ut summan av dessa heltal.

x = "25"
y = "20"
print(x + y)

Textdata - sträng

I python representerar vi text med hjälp av strängar. De är också egentligen sekvenser men består alltid av bokstäver. De har därför mycket gemensamt med sekvenser i vad man kan göra med dem, se nedan. Strängar kan skrivas på lite olika sätt men vi använder vanligtvis ". Även ' och """ kan användas för att skapa strängar, se exemplet:

strang = "en sträng"
strang = 'en sträng'
strang = """en sträng"""

Det kan vara bra att veta om de olika sätten när man vill göra något speciellt som att skriva strängar över flera rader (""") eller om man behöver citationstecken i texten:

strang_over_flera_rader = """Detta är en sträng
som jag ville skriva utspritt över mer än en rad"""
strang_med_citationstecken = 'ett ord inom "citationstecken" kräver detta'
strang_med_citationstecken = "ett ord inom 'citationstecken' kräver detta"

Det kan också vara bra att veta om "escape" vilket gör att man kan använda även tecken som har speciell betydelse för Python interpretatorn. "Escape" görs med "\" innan tecknet man vill ska undantas från vanlig behandling:

annat_satt_att_fa_citationstecken = " annat \"sätt\""

Testa att köra kommandona för sekvenser på strängar.

Sekvenser - lista, tupel och intervall

Sekvenser är datatyper som ofta används till att spara flera värden. Till exempel kan sekvensen "0, 1, 2" vara bra att kunna spara i en behållare istället för 3 separata variabler. Listor skapas med kommandot [...], tupler med kommandot (...) och intervall med kommandot range(..):

x = 0 # inte
y = 1 # alltid
z = 2 # praktiskt

tupel = (0, 1, 2) # tupel med de tre heltalen
lista = [0, 1, 2] # lista med de tre heltalen
intervall = range(0,3) # intervallet med de tre heltalen (0, 1, 2)

Sekvenser kan innehålla vilka datatyper som helst. Man kan till och med spara sekvenser i sekvenser. och olika sekvenser är lämpliga för olika ändamål. Många kommandon är dock gemensamt för alla sekvenser. Exempelvis kan vi hämta enstaka data ur en sekvens med index, kontrollera om data finns i sekvensen och kontrollera längden av en sekvens. Testa gärna följande i terminalen:

lista = [4, 5, 3] # skapa listan
lista[1] # index räknas alltid från 0 i Python
1 in lista # "in" och "not in" kontrollerar om ett värde finns i sekvensen 
1 not in lista 
5 in lista 
len(lista) # hur många värden (vilken längd) har sekvensen?

Ni kommer få arbeta med sekvenser i större utsträckning i framtida laborationer


Sidansvarig: Pontus Haglund
Senast uppdaterad: 2020-09-10