Numere Python, conversie tip și matematică

În acest articol, veți afla despre diferitele numere utilizate în Python, cum să convertiți de la un tip de date la altul și operațiunile matematice acceptate în Python.

Număr tip de date în Python

Python acceptă numere întregi, numere în virgulă mobilă și numere complexe. Acestea sunt definite ca int, floatși complexclase în Python.

Numerele întregi și punctele flotante sunt separate de prezența sau absența unui punct zecimal. De exemplu, 5 este un număr întreg, în timp ce 5.0 este un număr cu virgulă mobilă.

Numerele complexe sunt scrise sub forma,, x + yjunde x este partea reală și y este partea imaginară.

Putem folosi type()funcția pentru a ști la ce clasă aparține o variabilă sau o valoare și isinstance()pentru a verifica dacă aparține unei anumite clase.

Să vedem un exemplu:

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

Când rulăm programul de mai sus, obținem următoarea ieșire:

 (8 + 3j) Adevărat

În timp ce numerele întregi pot fi de orice lungime, un număr cu virgulă mobilă este precis doar până la 15 zecimale (locul 16 este inexact).

Numerele cu care ne ocupăm în fiecare zi sunt ale sistemului numeric zecimal (baza 10). Dar programatorii de computere (în general programatori încorporați) trebuie să lucreze cu sisteme de numere binare (baza 2), hexazecimale (baza 16) și octal (baza 8).

În Python, putem reprezenta aceste numere plasând în mod corespunzător un prefix înaintea acelui număr. Următorul tabel listează aceste prefixe.

Sistem de numere Prefix
Binar „0b” sau „0B”
Octal „0o” sau „0O”
Hexadecimal „0x” sau „0X”

Aici sunt cateva exemple

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

Când rulați programul, ieșirea va fi:

 107 253 13

Conversie tip

Putem converti un tip de număr în altul. Acest lucru este, de asemenea, cunoscut sub numele de constrângere.

Operații precum adunarea, scăderea constrânge întregul să plutească implicit (automat), dacă unul dintre operanzi este plutitor.

 >>> 1 + 2.0 3.0

Putem vedea mai sus că 1 (întreg) este constrâns în 1.0 (float) pentru adunare și rezultatul este, de asemenea, un număr în virgulă mobilă.

Putem folosi , de asemenea , built-in functii , cum ar fi int(), float()și de complex()a converti între tipurile explicit. Aceste funcții se pot converti chiar din șiruri.

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

La conversia de la float la întreg, numărul se trunchiază (părțile zecimale sunt eliminate).

Python Decimal

Flotorul de clasă încorporat Python efectuează câteva calcule care ne-ar putea uimi. Știm cu toții că suma 1.1 și 2.2 este 3.3, dar Python pare să nu fie de acord.

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

Ce se întâmplă?

Se pare că numerele cu virgulă mobilă sunt implementate în hardware-ul computerului ca fracții binare, deoarece computerul înțelege doar binarul (0 și 1). Din acest motiv, majoritatea fracțiilor zecimale pe care le cunoaștem, nu pot fi stocate cu precizie în computerul nostru.

Să luăm un exemplu. Nu putem reprezenta fracțiunea 1/3 ca număr zecimal. Acest lucru va da 0.33333333 … care este infinit de lung și nu putem decât să-l aproximăm.

Se pare că fracția zecimală 0.1 va avea ca rezultat o fracție binară infinit de lungă de 0.000110011001100110011 … și computerul nostru stochează doar un număr finit al acesteia.

Aceasta va aproxima doar 0,1, dar nu va fi niciodată egală. Prin urmare, este limitarea hardware-ului computerului nostru și nu o eroare în Python.

 >>> 1.1 + 2.2 3.3000000000000003

Pentru a depăși această problemă, putem folosi modulul zecimal care vine cu Python. În timp ce numerele cu virgulă mobilă au precizie de până la 15 zecimale, modulul zecimal are o precizie setabilă de utilizator.

Să vedem diferența:

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

Ieșire

 0.1 0.1000000000000000055511151231257827021181583404541015625

Acest modul este utilizat atunci când vrem să efectuăm calcule zecimale așa cum am învățat la școală.

De asemenea, păstrează semnificația. Știm că 25,50 kg este mai precis decât 25,5 kg, deoarece are două zecimale semnificative comparativ cu una.

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

Ieșire

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

Când rulăm programul de mai sus, obținem rezultatul după cum urmează (valorile pot fi diferite din cauza comportamentului aleatoriu)

 18 e („c”, „e”, „d”, „b”, „a”) 0,5682821194654443

Iată lista completă a funcțiilor și atributelor disponibile în modulul aleatoriu Python.

Articole interesante...