Licence CC BY-NC-ND Thierry Parmentelat

les nombres

types de base int, float, complex

  • conversion automatique si nécessaire

  • les int ont une précision illimitée

    • Python 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

en hexa, binaire, octal

0xff            # hexadécimal
255
0b11111111      # binaire
255
0o377           # octal
255

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

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écimaux

    • avec 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