Variabler, text och siffror
Datatyper
I datorer representeras data på den lägsta nivån i form av siffrorna 1 och 0. Datan lagras alltså i binär form. Men för att göra det rimligt att arbeta med problemlösning i datorer behöver vi abstraktion ovanpå dessa ettor och nollor. Därför har vi olika datatyper. En datatyp är alltså ett sätt vi kan arbeta med exempelvis heltal istället för en sekvens av 8 eller 16 ettor och nollor.
Det finns många datatyper i Python och vi kommer i detta avsnitt endast bekanta oss med några få.
Arbeta med siffror
Ni kan läsa mer om att arbeta med aritmetik i Python i kursboken Learning Python, kapitel 4.
I Python kan ni använda er av samma aritmetiska uttryck som ni använder i matematiken. Addition, subtraktion och multiplikation beräknas på samma sätt som ni är vana sedan tidigare. Division skiljer sig däremot åt då det finns både heltalsdivision och flyttalsdivision. Vanligtvis sker division enligt den matematiska definitionen. Man kan däremot använda sig av heltalsdivision genom att använda operatorn // istället för /.
Prova följande:
>>> 3.0 / 2.0 * 10.0
>>> 3.0 / (2.0 * 10.0)
>>> 3.0 + 2.0 / 2.0
>>> (3.0 + 2.0) / 2.0
Vad är en variabel?
Variabler är referenser till data som programmeraren inte känner till
i förväg. Detta kan till exempel vara åldern på användaren eller
resultatet av en uträkning.
Wikipedia beskriver en variabel som:
En variabel är något som kan ändras. Inom matematiken och datavetenskapen betecknar den ett namngivet objekt som används för att representera ett okänt värde, till exempel ett reellt tal. Variabler används i öppna utsagor. De kan anses stå i motsats till konstanter som är oföränderliga, liksom till parametrar som hålls konstanta under en given process eller beräkning.
Du kan spara vilka värden du vill i en variabel. Du kan se på en variabel som en låda i minnet. Lådan har sedan ett namn associerat med sig. Efter du tilldelat en variabel ett värde så kan du använda namnet för att komma åt det du sparat i lådan. Det här är praktiskt eftersom man ofta vill arbeta med värden i flera steg. Då kan man steg för steg mellanlagra värdet efter varje operation.
Prova följande:
>>> name = input("Vad heter du? ")
>>> age = input("Hur gammal är du? ")
>>> print("Hej, " + name + "! Du är " + age + " år gammal!")
>>> year = 2019
>>> birth_year = year - age
Det är även vanligt att använda sig av variabler för att förenkla och förtydliga ett annars väldigt komplext uttryck. Något som är väldigt viktigt att tänka på när ni programmerar med variabler är att välja bra namn som beskriver innehållet på variabler. När ni arbetar med uppgifter där ni till exempel behöver lagra användarens ålder bör variabler således döpas till age, user_age, age_of_user eller dylikt. Att döpa variabler till tmp, something, x eller the_variable_I_dont_know_how_to_name är mycket dålig sed och även om det går lite snabbare att skriva så kommer ni att förlora den tid ni tjänat första gången ni måste gå igenom och felsöka er kod. Gör det därför till en vana att alltid stanna upp och fundera varför ni egentligen behöver en variabel före ni döper den.
I Python är en variabel av en särskilld typ, exempelvis heltal, endast så länge som ett heltal sparas i variabeln. Om en annan datatyp sedan sparas i samma variabel kommer den variabeln att bli av den nya datatypen. Detta gör det extra viktigt att vara duktig vid namngivning av variabler. Vi kan se vilken typ en viss data är av genom att använda type.
Testa:
>>> x = Pontus
>>> type(x)
>>> x = 34
>>> type(x)
>>> x = 22.4
>>> type(x)
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 (konkatenera) 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)
Arbeta med textsträngar
Ni kan läsa mer om att arbeta med Python och textsträngar i kursboken Learning Python, kapitel 4.
Eftersom Python är ett fullskaligt programmeringsspråk och inte bara
en häftig miniräknare finns det fler datatyper än tal, till exempel
textsträngar. Python tillåter att man adderar och multiplicerar
textsträngar med de binära infixoperatorerna + respektive *. Binär
betyder tvåvärd (tar två argument) och infix betyder att operatorn
placeras mellan sina argument. Resultatet av att utföra addition och
multiplikation i Python beror alltså på vilken typ av argument som ges
till + respektive *.
Wikipedia beskriver en sträng på följande sätt.
En sträng inom datalogi är en mängd som består av en ordnad följd av ett bestämt antal element ur ett givet alfabet. Den vanligaste tillämpningen av strängar är teckensträngar, som består av en ordnad följd av numeriska värden som representerar enskilda tecken ur en viss teckenkodning. Teckensträngar representerar ofta text som kan läsas av slutanvändaren i ett användargränssnitt.
Prova följande:
>>> "En " + "samman"
>>> _ + "sättning"
>>> "hej " * 5
>>> ("hej, " * 2 + "hemskt mycket hej, ") * 3
>>> input("Vad heter du? ")
>>> print("Hej " + _ + "!")
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
Python
Emacs
Laborationer och material
Sidansvarig: Pontus Haglund
Senast uppdaterad: 2024-08-14