Slik konverterer du datatyper i Python

Lær å konvertere mellom datatyper i Python med int(), float(), str() og bool(). Casting forklart med eksempler.

Videoforhåndsvisning

Opprett konto for å se video

Det er helt gratis og tar under 30 sekunder

Opprett gratis kontoHar du konto? Logg inn

Du leser inn et tall fra brukeren og prøver å gjøre en beregning, men Python gir deg en TypeError. Problemet er at input() gir deg en streng, og Python nekter å blande strenger og tall i matematikk. Du må konvertere datatypen først. Denne prosessen kalles typecasting, og den løser en av de vanligste feilene nye Python-utviklere møter.

Hvorfor du trenger å konvertere datatyper i Python

Python er et sterkt typet språk. Det betyr at det ikke automatisk konverterer mellom datatyper når du gjør operasjoner. Skriver du "5" + 3, får du en TypeError, ikke 8. Andre språk ville kanskje gjettet hva du mente. Python krever at du er eksplisitt.

Konvertering er spesielt vanlig i tre situasjoner: når du jobber med brukerinput (som alltid er strenger), når du leser data fra filer (som ofte kommer som tekst), og når du skal vise tall sammen med tekst i utskrifter.

Konverter til heltall med int()

int() konverterer en verdi til et heltall. int("42") gir tallet 42. int(3.9) gir 3, fordi int() kutter desimalene uten å runde opp. Det er viktig å merke seg: int() runder aldri. Den kapper.

En vanlig bruk er å konvertere brukerinput til tall. Variabler fra input() er alltid strenger, så alder = int(input("Alder: ")) konverterer svaret direkte til et heltall du kan regne med.

Konverter til desimaltall med float()

float() konverterer til desimaltall. float("3.14") gir 3.14. float(5) gir 5.0. Konvertering fra int til float legger til .0, men endrer ikke verdien.

Bruk float() når du forventer desimaler fra brukeren, for eksempel høyde, vekt eller priser. float("1.72") fungerer fint, mens int("1.72") gir en ValueError fordi int() ikke kan tolke en streng med desimalpunktum.

Konverter til streng med str()

str() gjør om hva som helst til tekst. str(42) gir "42". str(3.14) gir "3.14". str(True) gir "True".

Du trenger str() når du setter sammen tekst med tall ved hjelp av +-operatoren: "Svaret er " + str(42). Men i praksis er f-strenger en smidigere løsning, fordi de konverterer automatisk: f"Svaret er {42}" fungerer uten str().

Konverter til boolean med bool()

bool() konverterer til True eller False. Reglene er enkle: tomme verdier gir False, alt annet gir True. bool(0), bool(""), bool(None) og bool([]) gir alle False. bool(1), bool("hei") og bool(-5) gir True.

Et overraskende resultat: bool("False") gir True. Strengen "False" er ikke tom, og ikke-tomme strenger er alltid True. Dette er en felle for mange nybegynnere.

Sjekk datatypen med type()

Når du er usikker på hva slags datatype en variabel har, bruker du type(). print(type(min_variabel)) viser deg om verdien er str, int, float eller noe annet. type() er det enkleste feilsøkingsverktøyet du har. Bruk den liberalt.

En typisk situasjon: du konverterer en variabel og lurer på om det fungerte. Kjør print(type(alder)) etter konverteringen. Ser du <class 'int'>, vet du at konverteringen var vellykket.

Når konverteringen feiler: ValueError

Ikke alle konverteringer er mulige. int("hei") gir en ValueError fordi Python ikke kan gjøre om vilkårlig tekst til et tall. Det samme gjelder int("3.14"), fordi strengen inneholder et desimalpunktum. Løsningen der er å gå via float: int(float("3.14")) gir 3.

ValueError dukker oftest opp med brukerinput. Du ber om et tall, brukeren skriver bokstaver, og programmet krasjer. I produksjonskode bør du fange denne feilen med try/except:

  • try:
  • tall = int(input("Skriv et tall: "))
  • except ValueError:
  • print("Det var ikke et gyldig tall.")

Konvertering endrer verdiens oppførsel

Husk at konvertering endrer hvordan verdien oppfører seg, ikke bare etiketten. str(2) gir "2", og nå oppfører den seg som tekst. "2" + "3" gir "23" (strengsammensetning), ikke 5 (addisjon). Denne forskjellen forårsaker subtile feil. Du tror du legger sammen tall, men strengene setter seg bare ved siden av hverandre.

Motsatt: int("2") + int("3") gir 5. Konvertering til int gjør at +-operatoren utfører addisjon i stedet for strengsammensetning.

Implisitt konvertering i Python

Python gjør noen konverteringer automatisk. Blander du int og float i en beregning, konverterer Python int-verdien til float uten at du ber om det: 5 + 2.0 gir 7.0 (en float). Python velger alltid den "bredere" typen for å unngå datatap.

Men denne automatikken stopper ved strenger. Python konverterer aldri tall til strenger implisitt, eller omvendt. Det er en bevisst designbeslutning som hindrer tvetydige operasjoner. Skal "5" + 3 gi 8 eller "53"? I stedet for å gjette, tvinger Python deg til å gjøre konverteringen eksplisitt.

Konverter mellom tallsystemer

int() har et ekstra triks: et valgfritt andre argument som angir tallsystemet. int("1010", 2) konverterer binærtallet 1010 til desimaltallet 10. int("FF", 16) konverterer heksadesimalt FF til 255. Denne funksjonen er nyttig når du jobber med data fra systemer som bruker andre tallsystemer enn titallssystemet.

For å gå den andre veien bruker du bin(), oct() og hex(). bin(10) gir "0b1010", hex(255) gir "0xff". Prefiksene 0b og 0x forteller deg hvilket tallsystem som brukes.

Neste steg

Med konvertering på plass kan du bygge programmer som tar imot tall fra brukeren og gjør beregninger med dem. Artikkelen om input() viser deg mønsteret i praksis. For å lage programmer som reagerer forskjellig basert på datatypene og verdiene, tar funksjoner i Python deg videre med gjenbrukbar kode. Pythons oversikt over innebygde funksjoner inkluderer int(), float(), str() og alle de andre konverteringsfunksjonene.

Denne artikkelen bygger på kurset Python – grunnleggende på Utdannet.no. I kurset jobber du med typecasting gjennom praktiske oppgaver der du kombinerer variabler, input og datakonvertering, og du får løsningsforslag du kan sammenligne med din egen kode.