Räkneoperationer
I de tidigare delarna har du sett exempel med enkla räkneoperationer. Följande tabell listar de mest allmänna operatorerna som kan användas för att utföra beräkningar i Python:
Operator | Betydelse | Exempel | Resultat |
---|---|---|---|
+ | Addition | 2 + 4 | 6 |
- | Subtraktion | 10 - 2.5 | 7.5 |
* | Multiplikation | -2 * 123 | -246 |
/ | Division (resultat som flyttal) | 9 / 2 | 4.5 |
// | Division (resultat som heltal) | 9 // 2 | 4 |
% | Rest | 9 % 2 | 1 |
** | Potens | 2 ** 3 | 8 |
Ordningen för operationerna är bekant från matematiken: potensuttryck beräknas först, sedan multiplikation och division, till sist addition och subtraktion. Ordningen kan ändras genom att använda parenteser.
Till exempel resulterar denna kodsnutt…
print(2 + 3 * 3)
print((2 + 3) * 3)
… i följande utskrift:
11 15
Operand, operator och datatyper
En räkneoperation består oftast av operander och operatorer:
Datatypen hos en operand bestämmer i regel datatypen hos resultatet: om två heltal adderas är resultatet också ett heltal. Om ett flyttal subtraheras från ett annat flyttal är resultatet ett flyttal. Vidare kan man notera att om en av operanderna är ett flyttal, kommer resultatet att vara ett flyttal oavsett de andra operanderna.
Division med operatorn /
är ett undantag. Dess resultat är ett flyttal även om operanderna är heltal. Till exempel kommer operationen 1 / 5
att ge flyttalet 0.2
. Observera att Python använder punkt som decimaltecken, inte decimalkomma som vanligtvis används på svenska.
Exempel:
langd = 172.5
vikt = 68.55
# viktindex beräknas genom att dividera vikten med kvadratroten av längden
# längden anges i meter
bmi = vikt / (langd / 100) ** 2
print(f"Viktindexet är {bmi}")
Programmets utskrift ser ut så här:
Viktindexet är 23.037177063642087
Märk att Python också har operatorn //
för division med heltal som resultat. Om operanderna är heltal, kommer resultatet också att vara ett heltal. Resultatet avrundas neråt till närmaste heltal. Exempelvis skriver detta program…
x = 3
y = 2
print(f"/-operatorn {x/y}")
print(f"//-operatorn {x//y}")
… ut följande:
/-operatorn 1.5 //-operatorn 1
Tal som indata
Vi har redan använt oss av input
-funktionen för att läsa in strängar som användaren matat in. Samma funktion kan också användas för att läsa in tal, men då måste strängen som funktionen returnerar först konverteras till någon av de datatyper som representerar ett tal i programkoden. I den förra delen konverterade vi heltal till strängar med str
-funktionen. Nu gäller samma princip, men vi ska använda en annan funktion eftersom vi gör konverteringen åt motsatt håll.
En sträng kan konverteras till ett heltal med funktionen int
. Programmet nedan ber användaren mata in sitt födelseår och sparar det i variabeln indata_strang
. Programmet skapar därefter variabeln ar
som innehåller året konverterat till heltal. Efter det går det att räkna 2021 - ar
, med hjälp av det värde användaren angett.
indata = input("Vilket är ditt födelseår? ")
ar = int(indata)
print(f"Din ålder i slutet av 2020: {2020 - ar}" )
Vilket är ditt födelseår? 1995 Din ålder i slutet av 2020: 25
Vanligen behöver man inte skapa två separata variabler (som ovan) för att läsa in ett tal från användaren. Istället kan användarens text läsas in och konverteras till heltal samtidigt:
ar = int(input("Vilket är ditt födelseår? "))
print(f"Din ålder i slutet av 2020: {2020 - ar}" )
En sträng kan också konverteras till flyttal. Det sker med funktionen float
. Det här programmet frågar användaren om hennes eller hans längd och vikt, och använder svaren för att räkna ut viktindexet:
langd = float(input("Ange längd: "))
vikt = float(input("Ange vikt: "))
langd = langd / 100
bmi = vikt / langd ** 2
print(f"Viktindexet är {bmi}")
Här är ett exempel på en utskrift från programmet:
Ange längd: 163 Ange vikt: 74.45 Viktindexet är 28.02137829801649
Att använda variabler
Låt oss kika på ett program som beräknar summan av tre tal som användaren anger:
tal1 = int(input("Tal ett: "))
tal2 = int(input("Tal två: "))
tal3 = int(input("Tal tre: "))
summa = tal1 + tal2 + tal3
print(f"Summan av talen: {summa}")
Här har vi ett exempel på när vi kör programmet:
Tal ett: 5 Tal två: 21 Tal tre: 7 Summan av talen: 33
Programmet använder fyra variabler, men i det här fallet skulle det faktiskt räcka med två variabler:
summa = 0
tal = int(input("Tal ett: "))
summa = summa + tal
tal = int(input("Tal två: "))
summa = summa + tal
tal = int(input("Tal tre: "))
summa = summa + tal
print(f"Summan av talen: {summa}")
Nu läses alla tal som användaren ges in med hjälp av en och samma variabel, tal
. Värdet på variabeln summa
ökas med värdet på variabeln tal varje gång användaren skriver in ett nytt tal.
Vi tar en lite närmare titt på instruktionen:
summa = summa + tal
Här adderas värdena i variablerna summa
och tal
– för att lagras i variabeln summa. Till exempel om värdet på summa
är 3
och värdet på tal
är 2
, kommer värdet på summa att vara 5
efter att instruktionen körts.
Att öka på värdet hos en variabel är en vanlig operation. Därför finns det en liten genväg. Den här notationen fungerar i praktiken som instruktionen ovan:
summa += tal
Det här tillåter oss skriva programmet lite mer koncist:
summa = 0
tal = int(input("Tal ett: "))
summa += tal
tal = int(input("Tal två: "))
summa += tal
tal = int(input("Tal tre: "))
summa += tal
print(f"Summan av talen: {summa}")
Egentligen behöver vi inte alls variabeln tal
. Vi kan också behandla talen som användaren matar in på följande sätt:
summa = 0
summa += int(input("Tal ett: "))
summa += int(input("Tal två: "))
summa += int(input("Tal tre: "))
print(f"Summan av talen: {summa}")
I praktiken beror antalet variabler som behövs på situationen. Om man behöver minnas enskilda värden som användaren anger, är det inte möjligt att "återanvända" samma variabel för att läsa in olika värden. Här är ett exempel på en sådan situation:
tal1 = int(input("Tal ett: "))
tal2 = int(input("Tal två: "))
print(f"{tal1} + {tal2} = {tal1+tal2}")
Tal ett: 2 Tal två: 3 2 + 3 = 5
Å andra sidan har programmet inte en namngiven variabel där summan av de två angivna värdena skulle lagras.
Att "återanvända" en variabel lönar sig bara då när det finns ett behov att lagra värden av samma typ och orsak – till exempel då man adderar tal.
I följande exempel används variabeln data
för att lagra användarens namn och därefter hens ålder. Det finns ingen logik i att göra så!
data = input("Vad är ditt namn? ")
print("Hej " + data + "!")
data = int(input("Vad är din ålder? "))
# programmet fortsätter...
En bättre idé vore att använda skilda variabler med namn som tydligt beskriver deras funktion:
namn = input("Vad är ditt namn? ")
print("Hej " + namn + "!")
alder = int(input("Vad är din ålder? "))
# programmet fortsätter...
Repetitionsfrågor till denna del:
Log in to view the quiz
Se dina poäng genom att klicka på cirkeln nere till höger av sidan.