Python 3/Luvut

Wikikirjastosta
Siirry navigaatioon Siirry hakuun
Pythonissa on neljä 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 = 3.141592653589793
>>> round(x, 3)
3.142
x = -1e-06
y = -1.0e-03

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

x = -1.0+2.5j

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
  <class 'complex'>

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.

  >>> int("b8", 16)
  184
  >>> int("01011100", 2)
  92
  >>> int("17", 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'

Aiheesta muualla[muokkaa | muokkaa wikitekstiä]