Python 3/Luvut
- 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ä
muokkaaLuvun 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
muokkaaMerkkijono 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
muokkaaLuvun 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- Python-kielisen_ohjelmoinnin_perusteet (Wikiopiston opintopiirin opiskeluohjeita)
Johdanto: | |
---|---|
Tietotyypit ja tietorakenteet: |
Luvut - Merkkijonot - Lista - Monikko (tuple) - Sanakirja - Joukko (set) |
Ohjausrakenteet | |
Muut kielen rakenteet: |
Moduuli - Luokka - Funktio - Virheidenhallinta - Tiedosto |
Graafinen käyttöliittymä: | |
Harjoitustehtäviä: | |
Lisätiedot ja lähteet: |