Nombres Python, conversion de type et mathématiques

Dans cet article, vous découvrirez les différents nombres utilisés dans Python, comment convertir d'un type de données à l'autre et les opérations mathématiques prises en charge dans Python.

Type de données numériques en Python

Python prend en charge les entiers, les nombres à virgule flottante et les nombres complexes. Ils sont définis comme int, floatet les complexclasses en Python.

Les nombres entiers et les virgules flottantes sont séparés par la présence ou l'absence d'un point décimal. Par exemple, 5 est un entier tandis que 5,0 est un nombre à virgule flottante.

Les nombres complexes sont écrits sous la forme x + yj,, où x est la partie réelle et y est la partie imaginaire.

Nous pouvons utiliser la type()fonction pour savoir à quelle classe appartient une variable ou une valeur et une isinstance()fonction pour vérifier si elle appartient à une classe particulière.

Regardons un exemple:

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

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante:

 (8 + 3j) Vrai

Alors que les nombres entiers peuvent être de n'importe quelle longueur, un nombre à virgule flottante n'est précis que jusqu'à 15 décimales (la 16e place est inexacte).

Les nombres que nous traitons chaque jour sont du système numérique décimal (base 10). Mais les programmeurs informatiques (généralement des programmeurs embarqués) doivent travailler avec des systèmes de nombres binaires (base 2), hexadécimaux (base 16) et octaux (base 8).

En Python, nous pouvons représenter ces nombres en plaçant de manière appropriée un préfixe avant ce nombre. Le tableau suivant répertorie ces préfixes.

Système numérique Préfixe
Binaire «0b» ou «0B»
Octal «0o» ou «0O»
Hexadécimal '0x' ou '0X'

Voici quelques exemples

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

Lorsque vous exécutez le programme, la sortie sera:

 107 253 13

Conversion de type

Nous pouvons convertir un type de nombre en un autre. Ceci est également connu sous le nom de coercition.

Des opérations comme l'addition, la soustraction contraignent l'entier à flotter implicitement (automatiquement), si l'un des opérandes est flottant.

 >>> 1 + 2.0 3.0

Nous pouvons voir ci-dessus que 1 (entier) est forcé en 1.0 (float) pour l'addition et le résultat est également un nombre à virgule flottante.

Nous pouvons également utiliser des fonctions intégrées comme int(), float()et complex()pour convertir explicitement entre les types. Ces fonctions peuvent même convertir des chaînes.

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

Lors de la conversion de float en entier, le nombre est tronqué (les parties décimales sont supprimées).

Décimal Python

La classe float intégrée à Python effectue des calculs qui pourraient nous étonner. Nous savons tous que la somme de 1,1 et 2,2 est 3,3, mais Python semble être en désaccord.

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

Que se passe-t-il?

Il s'avère que les nombres à virgule flottante sont implémentés dans le matériel informatique sous forme de fractions binaires car l'ordinateur ne comprend que le binaire (0 et 1). Pour cette raison, la plupart des fractions décimales que nous connaissons ne peuvent pas être stockées avec précision dans notre ordinateur.

Prenons un exemple. Nous ne pouvons pas représenter la fraction 1/3 sous forme de nombre décimal. Cela donnera 0,33333333… qui est infiniment long, et nous ne pouvons que l'approcher.

Il s'avère que la fraction décimale 0,1 se traduira par une fraction binaire infiniment longue de 0,000110011001100110011… et notre ordinateur n'en stocke qu'un nombre fini.

Ce sera seulement environ 0,1 mais jamais égal. C'est donc la limitation de notre matériel informatique et non une erreur en Python.

 >>> 1.1 + 2.2 3.3000000000000003

Pour surmonter ce problème, nous pouvons utiliser le module décimal fourni avec Python. Alors que les nombres à virgule flottante ont une précision allant jusqu'à 15 décimales, le module décimal a une précision réglable par l'utilisateur.

Voyons la différence:

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

Production

 0,1 0,10000000000000000055511151231257827021181583404541015625

Ce module est utilisé lorsque nous voulons effectuer des calculs décimaux comme nous l'avons appris à l'école.

Il préserve également la signification. Nous savons que 25,50 kg est plus précis que 25,5 kg car il comporte deux décimales significatives par rapport à une.

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

Production

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

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie comme suit (les valeurs peuvent être différentes en raison du comportement aléatoire)

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

Voici la liste complète des fonctions et attributs disponibles dans le module aléatoire Python.

Articles intéressants...