Siirry sisältöön

Python 3/Luvut

Wikikirjastosta


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 | muokkaa wikitekstiä]
>>> π = 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 | muokkaa wikitekstiä]

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 | muokkaa wikitekstiä]

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 | muokkaa wikitekstiä]

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 | muokkaa wikitekstiä]