Selles artiklis saate teada Pythonis kasutatavatest erinevatest numbritest, teisendamisest ühest andmetüübist teise ja Pythonis toetatud matemaatilistest toimingutest.
Number Andmete tüüp Pythonis
Python toetab täisarvusid, ujukoma- ja kompleksarvusid. Nad on defineeritud int
, float
ja complex
klasside Python.
Täisarvud ja ujuvad punktid on eraldatud kümnendkoha olemasolu või puudumisega. Näiteks 5 on täisarv, samas kui 5,0 on ujukomaarv.
Kompleksarvud kirjutatakse kujul, x + yj
kus x on tegelik osa ja y kujuteldav osa.
type()
Funktsiooni abil saame teada, millisesse klassi muutuja või väärtus kuulub, ja isinstance()
funktsiooni abil kontrollida, kas see kuulub konkreetsesse klassi.
Vaatame näidet:
a = 5 print(type(a)) print(type(5.0)) c = 5 + 3j print(c + 3) print(isinstance(c, complex))
Ülaltoodud programmi käivitamisel saame järgmise väljundi:
(8 + 3j) Tõsi
Kui täisarvud võivad olla mis tahes pikkused, on ujukomaarv täpne ainult kuni 15 kümnendkohani (16. koht on ebatäpne).
Numbrid, millega me iga päev tegeleme, on kümnendarvude (baas 10) arvsüsteem. Kuid arvutiprogrammeerijad (tavaliselt sisseehitatud programmeerijad) peavad töötama binaarse (baas 2), kuueteistkümnendsüsteemi (baas 16) ja kaheksandarvulise (baas 8) arvusüsteemiga.
Pythonis saame neid numbreid esindada, pannes selle numbri ette sobivalt eesliite. Järgmises tabelis on loetletud need eesliited.
Numbrisüsteem | Eesliide |
---|---|
Binaarne | „0b” või „0B” |
Kaheksandik | „0o” või „0O” |
Kuueteistkümnendkoht | „0x” või „0X” |
Siin on mõned näidised
# Output: 107 print(0b1101011) # Output: 253 (251 + 2) print(0xFB + 0b10) # Output: 13 print(0o15)
Programmi käivitamisel on väljund järgmine:
107 253 13
Sisestage teisendus
Saame teisendada ühte tüüpi numbreid teisteks. Seda tuntakse ka sunnina.
Operatsioonid nagu liitmine, lahutamine sunnivad täisarvu kaudselt (automaatselt) hõljuma, kui üks operandidest on ujuk.
>>> 1 + 2.0 3.0
Eespool näeme, et 1 (täisarv) sunditakse liitmiseks väärtuseks 1,0 (ujuk) ja tulemuseks on ka ujukomaarv.
Võime kasutada ka sisseehitatud funktsioone, näiteks int()
, float()
ja complex()
tüüpi vahetult teisendamiseks. Need funktsioonid võivad isegi stringidest teisendada.
>>> int(2.3) 2 >>> int(-2.8) -2 >>> float(5) 5.0 >>> complex('3+5j') (3+5j)
Ujukilt täisarvuks teisendamisel kärbitakse arvu (kümnendkohad eemaldatakse).
Pythoni kümnendkoht
Pythoni sisseehitatud klassi ujuk teeb mõned arvutused, mis võivad meid hämmastada. Me kõik teame, et 1.1 ja 2.2 summa on 3.3, kuid Python näib olevat sellega nõus.
>>> (1.1 + 2.2) == 3.3 False
Mis toimub?
Selgub, et ujukomaarvud rakendatakse arvutiriistvaras kahendmurdudena, kuna arvuti saab aru ainult binaarsetest (0 ja 1). Sel põhjusel ei saa enamikku meile teadaolevaid kümnendmurde meie arvutisse täpselt salvestada.
Võtame näite. Me ei saa murdosa 1/3 esindada kümnendarvuna. See annab 0,33333333 … mis on lõpmata pikk ja me saame seda ainult ligikaudselt hinnata.
Selgub, et kümnendmurru 0,1 tulemuseks on lõpmatult pikk binaarmurd 0,000110011001100110011 … ja meie arvuti salvestab sellest vaid piiratud arvu.
See on ainult ligikaudne 0,1, kuid pole kunagi võrdne. Seega on see meie arvutiriistvara piirang ja mitte viga Pythonis.
>>> 1.1 + 2.2 3.3000000000000003
Selle probleemi ületamiseks saame kasutada Pythoni komplektis olevat kümnendmoodulit. Kui ujukomaarvude täpsus on kuni 15 kümnendkoha täpsust, siis kümnendmoodulil on kasutaja määratud täpsus.
Vaatame erinevust:
import decimal print(0.1) print(decimal.Decimal(0.1))
Väljund
0,1 0,1000000000000000055511151231257827021181583404541015625
Seda moodulit kasutatakse siis, kui me tahame koolis õppida kümnendarvutusi.
See säilitab ka olulisuse. Me teame, et 25,50 kg on täpsem kui 25,5 kg, kuna sellel on kaks märkimisväärset kohta pärast koma.
from decimal import Decimal as D print(D('1.1') + D('2.2')) print(D('1.2') * D('2.50'))
Väljund
3,3 3 000
Notice the trailing zeroes in the above example.
We might ask, why not implement Decimal
every time, instead of float? The main reason is efficiency. Floating point operations are carried out must faster than Decimal
operations.
When to use Decimal instead of float?
We generally use Decimal in the following cases.
- When we are making financial applications that need exact decimal representation.
- When we want to control the level of precision required.
- When we want to implement the notion of significant decimal places.
Python Fractions
Python provides operations involving fractional numbers through its fractions
module.
A fraction has a numerator and a denominator, both of which are integers. This module has support for rational number arithmetic.
We can create Fraction objects in various ways. Let's have a look at them.
import fractions print(fractions.Fraction(1.5)) print(fractions.Fraction(5)) print(fractions.Fraction(1,3))
Output
3/2 5 1/3
While creating Fraction
from float
, we might get some unusual results. This is due to the imperfect binary floating point number representation as discussed in the previous section.
Fortunately, Fraction
allows us to instantiate with string as well. This is the preferred option when using decimal numbers.
import fractions # As float # Output: 2476979795053773/2251799813685248 print(fractions.Fraction(1.1)) # As string # Output: 11/10 print(fractions.Fraction('1.1'))
Output
2476979795053773/2251799813685248 11/10
This data type supports all basic operations. Here are a few examples.
from fractions import Fraction as F print(F(1, 3) + F(1, 3)) print(1 / F(5, 6)) print(F(-3, 10)> 0) print(F(-3, 10) < 0)
Output
2/3 6/5 False True
Python Mathematics
Python offers modules like math
and random
to carry out different mathematics like trigonometry, logarithms, probability and statistics, etc.
import math print(math.pi) print(math.cos(math.pi)) print(math.exp(10)) print(math.log10(1000)) print(math.sinh(1)) print(math.factorial(6))
Output
3.141592653589793 -1.0 22026.465794806718 3.0 1.1752011936438014 720
Here is the full list of functions and attributes available in the Python math module.
import random print(random.randrange(10, 20)) x = ('a', 'b', 'c', 'd', 'e') # Get random choice print(random.choice(x)) # Shuffle x random.shuffle(x) # Print the shuffled x print(x) # Print random element print(random.random())
Ülaltoodud programmi käivitamisel saame väljundi järgmiselt. (Juhusliku käitumise tõttu võivad väärtused olla erinevad)
18 e ('c', 'e', 'd', 'b', 'a') 0,5682821194654443
Siin on täielik Pythoni juhusliku mooduli funktsioonide ja atribuutide loend.