Vidéo 5 : Divisions¶
Division flottante¶
Pour obtenir la division exacte du nombre a
par le nombre b
, on utilise tout simplement la syntaxe a / b
:
1 2 | print(366/ 12)
print(3.14 / 2)
|
3 4 | 30.5
1.57
|
Les nombres a
et b
peuvent aussi bien être des entiers que des flottants. Le résultat a / b
sera toujours de type flottant.
Multiples, division entière¶
On rappelle quelques notions d’arithmétique élémentaire.
Multiples¶
Les nombres qui sont les résultats dans une table de multiplication sont appelés des multiples. Par exemple, les 10 premiers multiples de 9 sont :
1 x 9 = 9
2 x 9 = 18
3 x 9 = 27
4 x 9 = 36
5 x 9 = 45
6 x 9 = 54
7 x 9 = 63
8 x 9 = 72
9 x 9 = 81
10 x 9 = 90
Plus généralement, tout multiple de 9 est de la forme \(9\times k\) où \(k\) est un entier. Par exemple, \(720 = 9\times 80\) est un multiple de \(9\).
Si un nombre \(n\) est un multiple de 9, il est équivalent de dire que 9 est un diviseur de \(n\) ou encore que \(n\) est divisible par 9.
Réciproquement, soit le problème suivant :
474 est-il un multiple de 8 ?
Pour répondre, il suffit de faire la division à la façon de « l’école primaire » de 474 par 8 :
Si le reste de cette division vaut 0 autrement dit, si la division tombe juste, c’est que la réponse est oui et si le reste est non nul, la réponse est non. Ici, la division de 474 par 8 admet 2 pour reste, en sorte que la réponse est non.
La division de l’école primaire est en fait appelée division entière. La division entière fournit un reste et un quotient. Par exemple, la division entière de 474 par 8 admet 59 pour quotient et 2 pour reste.
Plus généralement, quand on effectue la division entière de \(a\) par \(b\), on obtient un quotient \(q\) et un reste \(r\). Noter que \(r\) vérifie : \(0\leq r< b\) autrement dit le reste est toujours plus petit que le diviseur.
La division entière est différente de la division dite « exacte ». La division exacte ne fournit qu’un quotient, supposé exact. Par exemple, la division exacte de 474 par 8 est 59.25, ce qui s’écrit
\(\frac {474}{8}=59.25\)
En réalité, très souvent, le quotient obtenu est une valeur approchée : par exemple, on écrit couramment \(\frac {474}{7}=67.71\) bien qu’en fait \(67.71\) ne soit qu’un approximation de la division de 474 par 7, qui « ne tombe pas juste ».
La notion de multiple donne fréquemment lieu à des questions de programmation.
Quotient et reste de division entière¶
Le quotient entier de l’entier a
par l’entier b
est obtenu par l’opération a // b
(double oblique) :
1 | print(42 // 10)
|
2 | 4
|
- Ligne 1 : Noter le double slash pour effectuer la division entière, et non
42 / 10
. - Ligne 2 : noter que la réponse n’est pas 4,2 (il ne s’agit pas de la division exacte).
Le reste entier de la division de l’entier a
par l’entier b
est noté a % b
:
1 | print(42 % 10)
|
2 | 2
|
- Ligne 1 : le calcul du reste se fait avec l’opérateur
%
« pourcent ».
L’opérateur %
est parfois appelé opérateur modulo.
Division par zéro¶
Toute forme de division par 0 est interdite et renvoie une erreur :
1 | print(42 // 0)
|
2 3 4 5 | Traceback (most recent call last):
File "division_par_zero.py", line 1, in <module>
print(42 // 0)
ZeroDivisionError: division by zero
|
- Ligne 1 : quotient par 0 : interdit
De même :
1 | print(42 % 0)
|
2 3 4 5 | Traceback (most recent call last):
File "reste_par_zero.py", line 1, in <module>
print(42 % 0)
ZeroDivisionError: integer division or modulo by zero
|
- Ligne 1 : reste en divisant par 0 : interdit
Division entière et quotient exact¶
Si \(b\) est un entier multiple de l’entier \(d\), la division exacte \(b/d\) a même valeur (mathématique) que le quotient entier de \(b\) par \(d\). Mais en Python, le quotient exact sera de type flottant tandis que le quotient entier de type entier :
1 2 3 4 5 6 7 | b = 42
d = 6
print(b // d)
print(b % d)
print(b / d)
|
8 9 10 | 7
0
7.0
|
- Lignes 5 et 9 :
b
est bien un multiple ded
puisque le reste est nul. - Lignes 8 et 10 : le quotient entier et le quotient exact ont même valeur mathématique mais pas même type.
Bien que les valeurs des quotients soient exactes, la différence de type peut entraîner des erreurs. Par exemple, la fonction range
, qui sera vue plus tard, n’admet en arguments que des objets de type entier :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | b = 42
d = 6
print(b // d)
print(b % d)
print(b / d)
print(list(range(b // d)))
print("----------------------------")
# Va entraîner une erreur
print(list(range(b / d)))
|
16 17 18 19 20 21 22 23 24 | 7
0
7.0
[0, 1, 2, 3, 4, 5, 6]
----------------------------
Traceback (most recent call last):
File "division_entiere_et_quotient_exact.py", line 13, in <module>
print(list(range(b / d)))
TypeError: 'float' object cannot be interpreted as an integer
|
Il se peut même que les quotients calculés soient différents alors que les valeurs mathématiques soient égales :
1 2 3 4 5 6 | b = 9563862022090661
d = 1
print(b // d)
print(b % d)
print(b / d)
|
7 8 9 | 9563862022090661
0
9563862022090660.0
|
En conclusion, si on cherche le quotient exact d’un entier \(b\) par un de ses diviseurs, on utilisera l’opérateur de division entière.
Traduire « multiple » en Python¶
<< Division entière
Pour savoir si un entier \(n\) est pair, on examine le reste \(r\) de \(n\) dans la division par 2. Si \(r\) vaut 0, l’entier \(n\) est pair et si le reste vaut 1 alors \(n\) est impair. Pour calculer \(r\), on utilise l’opérateur %
(modulo) :
1 2 3 4 5 | r = 2020 % 2
print(r == 0)
r = 421 % 2
print(r == 0)
|
6 7 | True
False
|
- Lignes 1-2 : le reste 0 montre que 2020 est bien pair
- Lignes 3-4 : le reste 1 montre que 421 est bien impair.
De même, pour savoir si un entier \(n\) est multiple de 10, on calcule le reste de \(n\) par 10 et on examine si ce reste vaut 0 ou pas :
1 2 3 4 5 | r = 2020 % 10
print(r == 0)
r = 421 % 10
print(r == 0)
|
6 7 | True
False
|
D’une façon générale, pour traduire que :
- d est diviseur de a
- a est un multiple de d
on examine si le reste a % d == 0
vaut True
ou False
.