Numeri Python, conversione dei tipi e matematica

In questo articolo imparerai a conoscere i diversi numeri utilizzati in Python, come convertire da un tipo di dati all'altro e le operazioni matematiche supportate in Python.

Tipo di dati numerico in Python

Python supporta interi, numeri in virgola mobile e numeri complessi. Essi sono definiti come int, floate complexclassi in Python.

I numeri interi e i punti mobili sono separati dalla presenza o dall'assenza di un punto decimale. Ad esempio, 5 è un numero intero mentre 5.0 è un numero in virgola mobile.

I numeri complessi sono scritti nella forma x + yj,, dove x è la parte reale ey è la parte immaginaria.

Possiamo usare la type()funzione per sapere a quale classe appartiene una variabile o un valore e la isinstance()funzione per verificare se appartiene a una particolare classe.

Diamo un'occhiata a un esempio:

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

Quando eseguiamo il programma precedente, otteniamo il seguente output:

 (8 + 3j) Vero

Sebbene i numeri interi possano essere di qualsiasi lunghezza, un numero a virgola mobile è accurato solo fino a 15 cifre decimali (il sedicesimo posto è impreciso).

I numeri con cui trattiamo ogni giorno sono del sistema numerico decimale (base 10). Ma i programmatori di computer (generalmente programmatori embedded) devono lavorare con sistemi numerici binari (base 2), esadecimali (base 16) e ottali (base 8).

In Python, possiamo rappresentare questi numeri posizionando opportunamente un prefisso prima di quel numero. La tabella seguente elenca questi prefissi.

Sistema numerico Prefisso
Binario "0b" o "0B"
Octal "0o" o "0O"
Esadecimale "0x" o "0X"

Ecco alcuni esempi

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

Quando esegui il programma, l'output sarà:

 107 253 13

Tipo di conversione

Possiamo convertire un tipo di numero in un altro. Questo è noto anche come coercizione.

Operazioni come addizione e sottrazione costringono l'intero a fluttuare implicitamente (automaticamente), se uno degli operandi è float.

 >>> 1 + 2.0 3.0

Possiamo vedere sopra che 1 (intero) è forzato in 1.0 (float) per l'addizione e il risultato è anche un numero in virgola mobile.

Possiamo anche utilizzare funzioni come built-in int(), float()e complex()per la conversione tra i tipi in modo esplicito. Queste funzioni possono anche essere convertite da stringhe.

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

Quando si converte da float a integer, il numero viene troncato (le parti decimali vengono rimosse).

Python Decimal

La classe float incorporata in Python esegue alcuni calcoli che potrebbero stupirci. Sappiamo tutti che la somma di 1.1 e 2.2 è 3.3, ma Python sembra non essere d'accordo.

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

Cosa sta succedendo?

Si scopre che i numeri in virgola mobile sono implementati nell'hardware del computer come frazioni binarie poiché il computer comprende solo binari (0 e 1). Per questo motivo, la maggior parte delle frazioni decimali che conosciamo, non può essere memorizzata con precisione nel nostro computer.

Facciamo un esempio. Non possiamo rappresentare la frazione 1/3 come numero decimale. Questo darà 0,33333333 … che è infinitamente lungo e possiamo solo approssimarlo.

Si scopre che la frazione decimale 0.1 risulterà in una frazione binaria infinitamente lunga di 0.000110011001100110011… e il nostro computer ne memorizza solo un numero finito.

Questo sarà solo approssimativo di 0,1 ma non sarà mai uguale. Quindi, è la limitazione dell'hardware del nostro computer e non un errore in Python.

 >>> 1.1 + 2.2 3.3000000000000003

Per superare questo problema, possiamo utilizzare il modulo decimale fornito con Python. Mentre i numeri in virgola mobile hanno una precisione fino a 15 cifre decimali, il modulo decimale ha una precisione impostabile dall'utente.

Vediamo la differenza:

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

Produzione

 0,1 0,1000000000000000055511151231257827021181583404541015625

Questo modulo viene utilizzato quando vogliamo eseguire calcoli decimali come abbiamo imparato a scuola.

Conserva anche il significato. Sappiamo che 25,50 kg è più preciso di 25,5 kg in quanto ha due cifre decimali significative rispetto a una.

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

Produzione

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

Quando eseguiamo il programma sopra, otteniamo l'output come segue (i valori possono essere diversi a causa del comportamento casuale)

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

Ecco l'elenco completo delle funzioni e degli attributi disponibili nel modulo random di Python.

Articoli interessanti...