Python-numerot, tyyppimuunnos ja matematiikka

Tässä artikkelissa opit Pythonissa käytetyistä eri numeroista, muuntamisesta tietotyypistä toiseen ja Pythonissa tuetuista matemaattisista operaatioista.

Numero-tietotyyppi Pythonissa

Python tukee kokonaislukuja, liukuluku- ja kompleksilukuja. Ne määritellään int, floatja complexluokkia Python.

Kokonaisluvut ja kelluvat pisteet erotetaan desimaalin tarkkuudella. Esimerkiksi 5 on kokonaisluku, kun taas 5,0 on liukuluku.

Kompleksiluvut kirjoitetaan muodossa, x + yjjossa x on todellinen osa ja y on kuvitteellinen osa.

Voimme käyttää type()toimintoa tietää minkä luokan muuttuja tai arvo kuuluu sekä isinstance()toiminto tarkistaa, jos se kuuluu tiettyyn luokkaan.

Katsotaanpa esimerkkiä:

 a = 5 print(type(a)) print(type(5.0)) c = 5 + 3j print(c + 3) print(isinstance(c, complex))

Kun suoritamme yllä olevan ohjelman, saamme seuraavan tuloksen:

 (8 + 3j) Totta

Vaikka kokonaisluvut voivat olla minkä tahansa pituisia, liukuluku on tarkka vain 15 desimaalin tarkkuudella (16. sija on epätarkka).

Numerot, joita käsittelemme päivittäin, ovat desimaalilukujärjestelmää (perus 10). Mutta tietokoneohjelmoijien (yleensä sulautettujen ohjelmoijien) on työskenneltävä binaaristen (pohja 2), heksadesimaalisten (perus 16) ja oktaalien (perus 8) numeroiden kanssa.

Pythonissa voimme edustaa näitä numeroita sijoittamalla etuliitteen oikein kyseisen numeron eteen. Seuraavassa taulukossa luetellaan nämä etuliitteet.

Numerojärjestelmä Etuliite
Binääri '0b' tai '0B'
Octal '0o' tai '0O'
Heksadesimaali '0x' tai '0X'

Tässä on joitain esimerkkejä

 # Output: 107 print(0b1101011) # Output: 253 (251 + 2) print(0xFB + 0b10) # Output: 13 print(0o15)

Kun suoritat ohjelmaa, tulos on:

 107 253 13

Kirjoita muunnos

Voimme muuntaa yhden tyyppisen numeron toiseen. Tätä kutsutaan myös pakoksi.

Toiminnot, kuten summaaminen, vähennyslasku, pakottavat kokonaisluvun kellumaan implisiittisesti (automaattisesti), jos jokin operandeista on kelluva.

 >>> 1 + 2.0 3.0

Yllä voimme nähdä, että 1 (kokonaisluku) pakotetaan arvoon 1,0 (kelluva) lisäystä varten ja tulos on myös liukuluku.

Voimme käyttää myös sisäänrakennettuja toimintoja, kuten int(), float()ja complex()muuntaa nimenomaisesti tyyppien välillä. Nämä toiminnot voivat jopa muuntaa merkkijonoista.

 >>> int(2.3) 2 >>> int(-2.8) -2 >>> float(5) 5.0 >>> complex('3+5j') (3+5j)

Muunnettaessa kelluvasta kokonaislukuun, numero katkaistaan ​​(desimaaliosat poistetaan).

Python-desimaali

Pythonin sisäänrakennettu luokan uimuri suorittaa joitain laskelmia, jotka saattavat hämmästyttää meitä. Me kaikki tiedämme, että 1.1: n ja 2.2: n summa on 3.3, mutta Python näyttää olevan eri mieltä.

 >>> (1.1 + 2.2) == 3.3 False

Mitä tapahtuu?

On käynyt ilmi, että liukuluvut toteutetaan tietokonelaitteistoissa binäärimurtona, koska tietokone ymmärtää vain binääriset (0 ja 1). Tästä syystä suurinta osaa tuntemamme desimaalimurtoja ei voida tallentaa tarkasti tietokoneellemme.

Otetaan esimerkki. Emme voi edustaa murtolukua 1/3 desimaalilukuna. Tämä antaa 0,33333333… joka on äärettömän pitkä, ja voimme vain arvioida sen.

Osoittautuu, että desimaalimurtoluku 0,1 johtaa äärettömän pitkään binäärimurtoon 0,000110011001100110011… ja tietokoneemme tallentaa vain rajallisen määrän siitä.

Tämä on vain noin 0,1, mutta ei koskaan yhtä suuri. Siksi se on tietokonelaitteistomme rajoitus eikä virhe Pythonissa.

 >>> 1.1 + 2.2 3.3000000000000003

Tämän ongelman ratkaisemiseksi voimme käyttää Pythonin mukana tulevaa desimaalimoduulia. Vaikka liukulukujen tarkkuus on enintään 15 desimaalia, desimaalimoduulilla on käyttäjän asettama tarkkuus.

Katsotaanpa ero:

 import decimal print(0.1) print(decimal.Decimal(0.1))

Tuotos

 0,1 0,1000000000000000055511151231257827021181583404541015625

Tätä moduulia käytetään, kun haluamme suorittaa desimaalilaskutoimituksia, kuten olemme oppineet koulussa.

Se säilyttää myös merkityksen. Tiedämme, että 25,50 kg on tarkempi kuin 25,5 kg, koska sillä on kaksi merkittävää desimaalipilkua yhteen.

 from decimal import Decimal as D print(D('1.1') + D('2.2')) print(D('1.2') * D('2.50'))

Tuotos

 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())

Kun suoritamme yllä olevan ohjelman, saamme tuotoksen seuraavasti (arvot voivat olla erilaiset satunnaisen käyttäytymisen vuoksi)

 18 e ('c', 'e', ​​'d', 'b', 'a') 0,5682821194654443

Tässä on täydellinen luettelo toiminnoista ja määritteistä, jotka ovat käytettävissä Python-satunnaismoduulissa.

Mielenkiintoisia artikkeleita...