Maîtriser les nombres, la conversion de types et les mathématiques en Python
Maîtriser les nombres, la conversion de types et les mathématiques en Python
Découvrez comment Python gère les données numériques, les subtilités de la conversion de types et les puissants utilitaires mathématiques pour la programmation quotidienne.
Types de données numériques en Python
Python classe les nombres en trois types principaux : int pour les entiers, float pour les nombres à virgule flottante, et complex pour les nombres à partie réelle et imaginaire. La présence d'un point décimal distingue int de float (ex. : 5 est un entier, 5.0 est un float). Les nombres complexes suivent la notation x + yj, où x est la partie réelle et y la partie imaginaire.
Utilisez type() pour inspecter la classe d'une valeur et isinstance() pour vérifier l'appartenance à un type particulier. Par exemple :
a = 5
print(type(a))
print(type(5.0))
c = 5 + 3j
print(c + 3)
print(isinstance(c, complex))
Sortie :
<class 'int'> <class 'float'> (8+3j) True
Les entiers en Python ont une précision arbitraire ; les floats conservent environ 15 chiffres décimaux de précision. Pour les développeurs travaillant avec des représentations binaire, hexadécimale ou octale, Python offre des préfixes pratiques :
| Système numérique | Préfixe |
|---|---|
| Binaire | 0b ou 0B |
| Octal | 0o ou 0O |
| Hexadécimal | 0x ou 0X |
Exemples :
# Sortie : 107
print(0b1101011)
# Sortie : 253 (251 + 2)
print(0xFB + 0b10)
# Sortie : 13
print(0o15)
Résultat :
107 253 13
Conversion de type (coercition)
Python promeut automatiquement les entiers en floats lors d'opérations arithmétiques quand un opérande float est impliqué. Par exemple :
>>> 1 + 2.0
3.0
Les conversions explicites sont tout aussi simples avec int(), float() et complex(), qui peuvent aussi parser des chaînes :
>>> int(2.3)
2
>>> int(-2.8)
-2
>>> float(5)
5.0
>>> complex('3+5j')
(3+5j)
Lors de la conversion d'un float en int, Python tronque la partie décimale au lieu d'arrondir.
Le module Decimal de Python
L'arithmétique à virgule flottante peut produire des résultats surprenants à cause des limites de la représentation binaire. Par exemple :
>>> (1.1 + 2.2) == 3.3
False
Comme des nombres comme 0.1 ne peuvent pas être représentés exactement en binaire, les opérations produisent de petites erreurs d'arrondi. Le module decimal atténue ce problème en fournissant une arithmétique décimale à précision arbitraire :
import decimal
print(0.1)
print(decimal.Decimal(0.1))
Sortie :
0.1 0.1000000000000000055511151231257827021181583404541015625
L'utilisation de Decimal préserve les chiffres significatifs et les représentations décimales exactes, essentielle pour les calculs financiers :
from decimal import Decimal as D
print(D('1.1') + D('2.2'))
print(D('1.2') * D('2.50'))
Sortie :
3.3 3.000
Comme les opérations decimales sont plus lentes que les floats binaires, réservez Decimal aux scénarios exigeant une précision exacte, comme les valeurs monétaires, la précision configurable ou le contrôle des chiffres significatifs.
Quand utiliser Decimal au lieu de float ?
- Applications financières ou monétaires exigeant une représentation décimale exacte.
- Scénarios où la précision doit être explicitement contrôlée.
- Applications nécessitant la notion de décimales significatives.
Le module fractions de Python
Le module fractions offre un support des nombres rationnels, permettant une arithmétique exacte avec numérateur et dénominateur comme entiers :
import fractions
print(fractions.Fraction(1.5))
print(fractions.Fraction(5))
print(fractions.Fraction(1,3))
Sortie :
3/2 5 1/3
Créer un Fraction depuis un float peut produire des résultats contre-intuitifs à cause de l'arrondi binaire, donc privilégiez les entrées en chaîne pour les nombres décimaux :
import fractions
# Depuis un float
print(fractions.Fraction(1.1))
# Depuis une chaîne
print(fractions.Fraction('1.1'))
Sortie :
2476979795053773/2251799813685248 11/10
Les fractions supportent tous les opérateurs arithmétiques :
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)
Sortie :
2/3 6/5 False True
Les mathématiques en Python
Le module math de Python fournit des fonctions pour la trigonométrie, les logarithmes, les factorielles, et plus :
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))
Sortie :
3.141592653589793 -1.0 22026.465794806718 3.0 1.1752011936438014 720
Pour l'aléatoire et l'échantillonnage, le module random offre :
import random
print(random.randrange(10, 20))
x = ['a', 'b', 'c', 'd', 'e']
print(random.choice(x))
random.shuffle(x)
print(x)
print(random.random())
Exemple de sortie (les valeurs varient) :
18 e ['c', 'e', 'd', 'b', 'a'] 0.5682821194654443
Les deux modules fournissent une documentation complète détaillant toutes les fonctions et attributs disponibles.
Python
- Maîtriser la conversion de types en C# : Implicite, Explicite, Parse et méthodes Convert
- Mots-clés et identifiants Python : Maîtriser les mots réservés et les conventions de nommage
- Instructions, indentation et commentaires en Python : Guide clair
- Variables, constantes et littéraux en Python – Guide complet
- Maîtriser la conversion et le transtypage de types en Python : Guide complet
- Maîtriser les E/S et l'importation de modules en Python : Guide pratique
- Comprendre les variables globales, locales et non locales en Python
- Maîtriser les opérations sur les répertoires et fichiers en Python
- Maîtriser les erreurs et exceptions intégrées de Python