Pythonissa on kolme lukutyyppiä
kokonaisluku int
liukuluku float
kompleksiluku complex kompleksiluvut esitetään muodossa z = x + yj, missä j on imaginääriyksikkö

Luvun tyyppiä ei tarvitse määritellä, koska Python tekee sen automaattisesti.

Kokonaisluvut ovat lukuja, joilla ei ole desimaaliosaa. Ne voivat olla positiivisia tai negatiivisia. Kokonaisluvut voivat olla miten suuria tahansa.

x = 5
y = -23
z = 18768765456465897097890986957645337829025751100581775023

Liukuluvuilla on kokonaisosa ja desimaaliosa. Erottimena käytetään pistettä.

x = 5.25

Liukuluvut voi antaa myös tieteellisessä muodossa eli eksponenttimuodossa. Esim. -1.0e-03 = -1,0 · 103 = 0,001.

Liukuluvun voi pyöristää sisäänrakennetulla round-funktiolla. Funktiolle annetaan luku ja haluttu desimaalien määrä.

x = -1e-06
y = -1.0e-03

Kompleksiluvuissa käytetään i:n sijasta j:tä.

x = -1.0+2.5j

Luvut voi kirjoittaa desimaali-, binaari-, oktaali- tai heksadesimaalimuodossa. Luvun eteen kirjoitetaan tällöin lukujärjestelmän osoittava etuliite.

lukujärjestelmä etuliite
desimaali (ei mitään)
binaari 0b
oktaali 0o
heksadesimaali 0x

Luvuissa voi lisäksi käyttää alaviivaa (_) ryhmittelymerkkinä tekemään luvusta helppolukuisemman.

39_000_000
0b1100_0101
0xff_01_ab_2b

Pyöristäminen

muokkaa
>>> π = 3.141592653589793
>>> round(π, 3)
3.142

Kokonaislukujen kerrannaisiin voi pyöristää antamalla negatiivisen luvun toiseksi parametriksi. Luku (sen itseisarvo) tarkoittaa silloin nollien määrää.

>>> round(182889477, -3)
182889000

Huomaa, että pyöristys ei aina vastaa täysin koulussa opetettua pyöristystapaa siitä johtuen että liukulukuja ei voi täysin tarkasti tietokoneilla esittää.

Muuttaminen tyyppien välillä

muokkaa

Luvun tyyppi muuttuu määräytyy automaattisesti sen mukaan mitä operaatio palauttaa.

  >>> x = 5
  >>> type(x)
  <class 'int'>
  >>> y = x / 4
  >>> y
  1.25
  >>> type(y)
  <class 'float'>
  >>> z = y + 2j
  >>> z
  (1.25+2j)
  >>> type(z)
  <class 'complex'>

Tyypin voi myös muuttaa erikseen ilmaistuna tyyppimuunnosfunktioilla int(), float() ja complex().

  >>> x = 5
  >>> float(x)
  5.0
  >>> y = x / 4
  >>> complex(y)
  (1.25+0j)

Liukuluku on myös mahdollista muuttaa kokonaisluvuksi. Koska kokokonaisluku ei sisällä desimaaliosaa, saattaa operaatiossa hävitä osa informaatiosta.

  >>> y = 1.25
  >>> int(y)
  1

Liukuluvun muuttamiseen kokonaisluvuksi on siksi yleensä parempi käyttää round-funktiota.

  >>> round(1.2)
  1
  >>> round(1.8)
  2
  >>> round(1.5)
  2

Kun hyvin suuri kokonaisluku muutetaan liukuluvuksi, aiheutuu virhe OverflowError, sillä kokonaisluvut voivat olla rajattoman suuria, mutta liukuluvut eivät.

  >>> float(9*10**1000)
  Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  OverflowError: int too large to convert to float

Kompleksilukua ei voi muuttaa liukuluvuksi eikä kokonaisluvuksi tyyppimuunnosfunktioilla. Kompleksiluvun reaaliosan saa sen real-jäsenestä ja imaginääriosan imag-jäsenestä.

  >>> z = 1.25+2j
  >>> z.real
  1.25
  >>> z.imag
  2.0

Merkkijonon muuttaminen luvuksi

muokkaa

Merkkijono muutetaan kokonaisluvuksi int-funktiolla.

  >>> int("333")
  333

Jos syötettä ei voi tulkita kokonaisluvuksi aiheutuu virhe.

  >>> int("kolme")
  Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  ValueError: invalid literal for int() with base 10: 'kolme'
  >>> int("3.3")
  Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  ValueError: invalid literal for int() with base 10: '3.3'

Funktiolle int voi lisäksi antaa toisena parametrina lukukannan (väliltä 2–36).

  >>> int("b8", 16)
  184
  >>> int("01011100", 2)
  92
  >>> int("17", 8)
  15
  >>> int('f08z', 36)
  700163

Luku voi alkaa kannan etuliitteellä (0x, 0o tai 0b).

  >>> int("0xb8", 16)
  184
  >>> int("0b01011100", 2)
  92
  >>> int("0o17", 8)
  15

Merkkijono muutetaan liukuluvuksi float-funktioilla.

  >>> float("3.3")
  3.3
  >>> float("3.3e-4")
  0.00033

Jos merkkijonon arvo on liian suuri liukuluvuksi, tulee arvoksi inf

>>> iso = "9" * 10000
>>> float(iso)
inf

Luvun muuttaminen merkkijonoksi

muokkaa

Luvun voi muuttaa kymmenkantaiseksi merkkijonoksi str-funktiolla.

  >>> str(15)
  '15'
  >>> str(3.3)
  '3.3'
  >>> str(3.3e-4)
  '0.00033'

Numeron voi muuttaa heksadesimaali-, oktaali- tai binaarimuotodon merkkijonoesitykseksi hex(), oct() ja bin().

  >>> hex(15)
  '0xf'
  >>> oct(15)
  '0o17'
  >>> bin(15)
  '0b1111'

Tarkemmin luvun muuttamisen voi tehdä f-merkkijonoilla tai muotoiluoperaattorilla, joita käsitellään seuraavassa luvussa.

Aiheesta muualla

muokkaa