les nombres¶
types de base int
, float
, complex
¶
conversion automatique si nécessaire
les
int
ont une précision illimitéePython peut calculer nativement
92857234957203457234572203957 * 948572349572039457029347529347
88081805538117400166084413860573792922096998567618527026079
ceux qui ont eu à faire ça en C apprécieront
division¶
# division exacte/flottante
5 / 2
2.5
# division entière
8 // 3
2
# division entière
8.0 // 3
2.0
nombres : opérateurs¶
# reste div. entière
5 % 3
2
# reste div. entière
5 % 1.5
0.5
2 ** 32 # puissance
4294967296
int(234.5) # cast float ➔ int
234
nombres complexes¶
1j * 1j # nombres complexes
(-1+0j)
a = 3 + 4j
a.real # partie réelle
3.0
a.imag # partie imaginaire
4.0
sous forme hexa, binaire, octale¶
hex(255) # traduire en hexa (-> str)
'0xff'
bin(255) # traduire en binaire (-> str)
'0b11111111'
oct(255) # traduire en octal (-> str)
'0o377'
décalages¶
x = 3
y = x << 10 # décalage à gauche
y
3072
2**11 + 2**10
3072
x # l'argument n'est pas modifié
3
y >> 3 # décalage à droite
384
2**8 + 2**7
384
opérations bitwise¶
y = 4
y | 2 # bitwise OR de 0100 (4) et 0010 (2)
6
y & 2 # bitwise AND de 0100 (4) et 0010 (2)
0
y & 15 # bitwise AND de 0100 (4) et 1111 (15)
4
y ^ 15 # bitwise XOR de 0100 (4) et 1111 (15)
11
rarement utile d’utiliser les opérations bitwise en Python
mieux vaut utiliser les structures de données fournies
parfois utile avec numpy toutefois
le module math
¶
# pour anticiper un peu
# sur les listes...
# les 6 derniers symboles
# dans le module math
import math
dir(math)[-6:]
['sqrt', 'tan', 'tanh', 'tau', 'trunc', 'ulp']
math.tau
6.283185307179586
math.sin(math.pi)
1.2246467991473532e-16
Important: Entraînez vous aussi à trouver la doc dans google:
https://www.google.com/search?q=python+module+math
booléens¶
True == 1
True
False == 0
True
3 + True
4
3 + False
3
booléens et tests (1)¶
# on peut faire un `if`
# (ou un while) sur un booléen
a = 3
b = 4
type(a == b)
bool
# sujet du if = booléen
if a == b:
print("pareils")
else:
print("différents")
différents
booléens et tests (2)¶
# mais aussi : avec n'importe quoi d'autre
if a:
print("pas faux")
pas faux
# en fait équivalent à ceci:
if bool(a):
print("pas faux")
pas faux
conversions¶
c’est la mécanique générale pour convertir entre types de données:
# si on appelle int() on convertit en entier
int(3.4)
3
# si on appelle bool() on convertit en booléen
bool(3.4)
True
bool(0)
False
bool("")
False
booléens - épilogue¶
attention à ne pas confondre
les opérations bit à bit avec les opérations booléennes
a = True; b = True
print("a", bool(a), "b", bool(b), "a^b", bool(a^b))
a True b True a^b False
a = 1; b = 2
print("a", bool(a), "b", bool(b), "a^b", bool(a^b))
a True b True a^b True
l’encodage des flottants¶
représentés en machine comme des fractions en base 2
le plus souvent une approximation
quand pas une fraction binaire exacte
pas une spécificité de Python
IEE-754: WikiPedia - interactif 64bits
0.1 + 0.2
0.30000000000000004
0.1 + 0.2 == 0.3
False
contournements¶
selon les usages¶
le module
decimal
, pour travailler sur des nombres décimauxavec plus de précision et de contrôle qu’avec le type
float
le module
fractions
permet de travailler sur des rationnels
exemples - decimal
¶
from decimal import Decimal
x = Decimal('0.1') + Decimal('0.2')
x == Decimal('0.3')
True
exemples - fractions
¶
from fractions import Fraction
x = Fraction(1, 10) + Fraction(2, 10)
x
Fraction(3, 10)
x == Fraction(3, 10)
True
x == 0.3
False