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 | 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ä]- 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: |