I artikkelen om strenger blir vi kjent med variabler som er strenger, og i artikkelen om variabler blir vi kjent med variabler som er tall. Tall og strenger er eksempler på to datatyper som har forskjellige egenskaper.
Når det gjelder tall, skiller Python på heltall og desimaltall. Desimaltall er tall som inneholder et desimalskilletegn, det vil si et punktum. For eksempel er 3.14 og -22.3 desimaltall. Desimalene kan godt være 0, så tallet 4.0 er et desimaltall, selv om det har samme matematiske verdi som heltallet 4. Det avgjørende er ikke verdien til desimalene, men om tallet inneholder et punktum eller ikke.
I Python betegnes strenger med datatypen str, heltall med datatypen int og desimaltall med datatypen float. int er en forkortelse for det engelske navnet på heltall, integer, og float kommer av at desimaltall kalles flyttall fordi punktumet ikke har noen fast plass, men «flyter» mellom sifrene. Flyttall er et mye brukt begrep i programmering, og vil bruke det konsekvent i stedet for desimaltall.
For å sjekke hva slags datatype vi har i Python bruker vi funksjonen type().
Eksempel 1:
I kommandofeltet skriver vi type("Hallo").
Python svarer <class 'str'>. Vi ser at datatypen er str, altså streng.
I kommandofeltet skriver vi type(4). Python svarer <class 'int'>. Vi ser at datatypen er int, altså heltall.
I kommandofeltet skriver vi type(4.0). Python svarer <class 'float'>. Vi ser at datatypen er float, altså flyttall.
I eksempel 1 ser vi at Python kaller datatyper for klasser, det kan virke litt forvirrende, så vi holder oss til begrepet datatype. Python har totalt 14 datatyper. W3 Schools har en oversikt over datatypene i Python.
Heltall representeres alltid som eksakte verdier, mens flyttall kan være tilnærmede verdier.
Noen datatyper kan kombineres, andre kan ikke. Vi går ikke inn på de formelle reglene her, mye er selvforklarende. Vi kan for eksempel gjerne addere et heltall og et flyttall og skrive 3 + 4.0, men vi kan ikke addere et tall og en streng. Skriver vi for eksempel 3 + "hei", gir Python feilmeldingen TypeError: unsupported operand type(s) for +: 'int' and 'str'. Det betyr at operatoren + ikke kan brukes når den ene operanden er heltall og den andre er streng.
Men som vi ser i artikkelen om strenger, kan vi bruke operatoren + på to strenger, strengene blir da konkatenert, det vil si slått sammen. For eksempel gir "Hipp " + "hurra!" strengen "Hipp hurra!". Vi kan også bruke operatoren * på en streng og et heltall, det betyr å sette strengen sammen med kopier av seg selv. For eksempel gir "Hipp " * 3 strengen "Hipp Hipp Hipp". Hvordan operatorene virker, avhenger altså av hvilken datatype de brukes på.
Vi kan imidlertid ikke bruke operatoren * på en streng og et flyttall. Skriver vi for eksempel "Hipp " * 3.0, gir Python en feilmelding.
Det er viktig å være oppmerksom på at tall som står mellom anførselstegn, er strenger, for eksempel "3" og "2.5", og vi kan ikke gjøre regneoperasjoner på dem som om de var heltall eller flyttall. Skriver vi for eksempel "3" * "2.5", gir Python feilmeldingen TypeError: can't multiply sequence by non-int of type 'str'.
Når vi bruker en aritmetisk operator på to flyttall, eller på ett flyttall og ett heltall, blir resultatet alltid et flyttall.
Bruker vi en aritmetisk operator på to heltall, blir resultatet et heltall, med mindre operatoren er divisjon, altså /. En divisjon resulterer alltid i et flyttall, selv om divisjonen går opp. For eksempel blir 6 / 2 lik 3.0, ikke 3.
Under står en del eksempler på bruk av aritmetiske operatorer. Avgjør i hvert tilfelle hvilken datatype resultatet vil få, eller om vi vil få en feilmelding. Bruk så Python-funksjonen type() til å avgjøre om du har rett. For eksempel ved å skrive type(2 * 4).
2 * 4 2 * 4.0 2.0 * 4.0 4.0 / 2.0 4 / 2 7 // 3 7.0 // 3 2 * "hei" 2.0 * "hei"
Konvertere mellom datatyper
Det finnes mange Python-funksjoner for å konvertere mellom datatyper. Vi skal her se på dem som konverterer mellom float, int og str:
float() konverterer til flyttall, og kan brukes både på strenger og heltall. For eksempel gir float("2.3") flyttallet 2.3, float("2") og float(2) gir flyttallet 2.0. Dersom vi bruker float() på en streng som ikke kan konverteres til flyttall, for eksempel float("Hei"), får vi en feilmelding.
int() konverterer til heltall, og kan brukes både på strenger og flyttall. For eksempel gir int("2") og int(2.0) heltallet 2. Dersom vi bruker int() på en streng som ikke kan konverteres til heltall, for eksempel int("Hei"), får vi en feilmelding. Når vi bruker int() på et flyttall, strykes desimaldelen. For eksempel gir både int(2.0) og int(2.99) heltallet 2.
str() konverterer til streng, og kan brukes både på heltall og flyttall. For eksempel gir str(2) strengen '2' og str(3.1415) strengen '3.1415'. Python bruker altså enkle i stedet for doble anførselstegn til å angi en streng, men det spiller ingen rolle, de to formene er likeverdige.
Kilder
-
- Matthes A. (2019). Python Crash Course. no starch press
I motsetning til i mange andre programmeringsspråk, som C og JavaScript, finnes det i Python ingen grense for hvor stort et heltall kan være. Regning med store heltall kan ta lengre tid enn med små, men beregningene gjøres alltid med eksakte verdier.