edubun
Français

Nombres et arithmétique

En Python 3, 7 / 2 donne 3.5, 7 // 2 donne 3 et 7 % 2 donne le reste 1.

Quatre divisions à prédire avant de lire la suite

Cache la sortie ci-dessous et note ce que tu attends de chaque ligne. La plupart des gens ont juste la première et au moins une erreur parmi les autres, et cette erreur est le point de départ de cette unité.

print(7 / 2)
print(8 / 2)
print(7 // 2)
print(7 % 2)
Sortie
3.5
4.0
3
1

La deuxième ligne surprend. 8 / 2 vaut exactement 4, pourtant Python affiche 4.0. La raison est que / donne toujours un float, un nombre à virgule, même quand la division tombe juste. Si tu veux la division entière, Python a un opérateur séparé, //, appelé division entière. Il divise puis arrondit vers le bas à l'entier inférieur. L'opérateur partenaire % donne le reste. Ensemble, ils répondent à la question d'école primaire « 7 divisé par 2 fait 3, reste 1 ».

Trois sauts de 2 tiennent dans 7, avec 1 de reste : 7 // 2 est le nombre de sauts, 7 % 2 est ce qui reste.

% apparaît à plus d'endroits qu'on le croirait. Un nombre est pair quand n % 2 vaut 0. Le dernier chiffre d'un nombre est n % 10. Transformer 135 minutes en heures et minutes, c'est 135 // 60 heures et 135 % 60 minutes.

minutes = 135
print(minutes // 60, "h", minutes % 60, "min")
print(2026 % 2, 2027 % 2)
print(4589 % 10)
Sortie
2 h 15 min
0 1
9

Les autres opérateurs, et l'ordre que Python utilise

OpérateurSignificationExempleRésultat
+addition7 + 29
-soustraction7 - 25
*multiplication7 * 214
/division (float)7 / 23.5
//division entière7 // 23
%reste7 % 21
**puissance7 ** 249

Python suit le même ordre qu'en cours de maths : ** d'abord, puis *, /, // et %, puis + et -, de gauche à droite dans chaque groupe. Les parenthèses passent avant tout, donc en cas de doute, ajoute-en. Elles ne coûtent rien et rendent l'intention claire pour le prochain lecteur.

print(2 + 3 * 4)
print((2 + 3) * 4)
print(2 ** 10)
print(10_000 * 3)
Sortie
14
20
1024
30000

La dernière ligne montre une petite aide : Python te laisse écrire des tirets bas dans les grands nombres, donc 10_000 est plus facile à lire que 10000. Ils sont ignorés dans le calcul et n'apparaissent pas dans la sortie. On ne peut pas utiliser de virgules ainsi, car une virgule veut déjà dire « valeur suivante ».

Les nombres décimaux sont stockés en binaire, ce qui peut rendre certains résultats légèrement imprécis

Essaie 0.1 + 0.2. Le tutoriel Python consacre tout un chapitre à la raison pour laquelle la réponse est 0.30000000000000004 plutôt que 0.3. Les floats sont stockés en binaire, et 0.1 n'a pas de forme binaire exacte, comme 1/3 n'a pas de forme décimale exacte. L'erreur est minuscule, et round() la cache à l'affichage. Sache que round() arrondit une valeur exactement à mi-chemin vers le voisin pair : la page des fonctions intégrées donne round(0.5) égal à 0 et round(1.5) égal à 2. Pour l'argent en wons entiers ou en centimes entiers, garde les montants en int et évite complètement le problème.

print(0.1 + 0.2)
print(round(0.1 + 0.2, 2))
print(round(0.5), round(1.5), round(2.5))
print(int(3.99), float(7))
Sortie
0.30000000000000004
0.3
0 2 2
3 7.0

input() te donne toujours une chaîne

input() affiche une invite, attend que l'utilisateur tape quelque chose et appuie sur Entrée, et renvoie ce qu'il a tapé sous forme de chaîne. Même s'il tape 15, tu obtiens "15", du texte. Pour faire de l'arithmétique avec, convertis-le avec int() ou float(). int() sur un float coupe la partie décimale au lieu d'arrondir, donc int(3.99) vaut 3.

age = input("How old are you? ")
next_year = int(age) + 1
print("Next year you will be", next_year)
Sortie
How old are you? 14
Next year you will be 15
Dans l'exemple ci-dessus, 14 est ce que l'utilisateur a tapé. Le programme lui-même ne contient pas le nombre 14.
/Division qui donne toujours un float : 8 / 2 vaut 4.0
//Division entière : 7 // 2 vaut 3
%Reste : 7 % 2 vaut 1
**Puissance : 2 ** 3 vaut 8
int()Transforme "15" ou 3.9 en nombre entier (15, 3)
input()Lit une ligne tapée par l'utilisateur, sous forme de chaîne
round(x, n)Arrondit à n décimales ; les valeurs exactement à mi-chemin sont arrondies vers le voisin pair
  1. Qu'affiche ce code ?
    print(9 / 3)
  2. Qu'affiche ce code ?
    print(17 // 5, 17 % 5)
  3. Qu'affiche ce code ?
    print(2 + 3 * 4 ** 2)
  4. Qu'affiche ce code ?
    print(2 ** 3)
  5. Qu'affiche ce code ?
    print(2 ^ 3)
    • 8
    • 6
    • 1
    • Une erreur
  6. Qu'affiche ce code ?
    print(int("20") + 5)
  7. Qu'affiche ce code ?
    print("20" + "5")
  8. Qu'affiche ce code ?
    print(int(7.9))
  9. Qu'affiche ce code ?
    print(round(2.5))
  10. Un petit pain coûte 3500 wons et tu as 10 000 wons. Qu'affiche ce code ?
    won = 10000
    price = 3500
    print(won // price, won % price)
  11. Quelle expression te dit si n est pair ?
    • n / 2 == 0
    • n // 2 == 0
    • n % 2 == 0
    • n ** 2 == 0
Erreurs fréquentes
  • « 2 ^ 3 vaut 8. » En Python, ^ est un opérateur bit à bit et 2 ^ 3 vaut 1. Les puissances utilisent **, donc 2 ** 3 vaut 8. Le programme s'exécute sans erreur, ce qui rend cette faute difficile à repérer.
  • « input() me donne un nombre si je tape un nombre. » Il donne toujours une chaîne. "14" + 1 s'arrête avec TypeError: can only concatenate str (not "int") to str. Convertis d'abord avec int(input(...)).
  • « 0.1 + 0.2 == 0.3 est True. » C'est False, car 0.1 + 0.2 vaut 0.30000000000000004. Compare des valeurs arrondies, comme round(0.1 + 0.2, 2) == 0.3, ou compte en unités entières (wons, centimes) avec int.
Note du professeurCommence par l'exercice de prédiction et laisse la surprise du 4.0 faire le travail. Les apprenants qui connaissent la division avec reste depuis l'école primaire retiennent vite // et % une fois qu'ils portent ces noms. L'erreur d'arrondi des floats mérite d'être montrée une fois sans s'y attarder ; l'habitude importante est de garder l'argent en nombres entiers. round(2.5) donnant 2 contredit l'arrondi enseigné en cours de maths : attends-toi donc à une question, et renvoie à la documentation des fonctions intégrées plutôt que de discuter. L'erreur de conversion d'input() est celle que les apprenants rencontrent le plus dans leurs premiers projets.
L'essentiel
  • / donne toujours un float ; // donne le quotient entier ; % donne le reste.
  • ** est la puissance ; ^ ne l'est pas.
  • Ordre : parenthèses, **, puis * / // %, puis + -.
  • 0.1 + 0.2 vaut 0.30000000000000004 ; garde l'argent en int.
  • input() renvoie une chaîne ; convertis avec int() ou float().
Sources de ce cours (6)
  • Python Software Foundation, The Python Tutorial for Python 3.12 (docs.python.org/3.12/tutorial: 2 Using the Python Interpreter, 3 An Informal Introduction to Python (numbers, text, lists), 4 More Control Flow Tools (if, for, range, break and continue, defining functions, default argument values, 4.10 coding style: 4-space indentation), 5 Data Structures (list methods, 5.5 dictionaries, insertion order), 8 Errors and Exceptions (syntax errors, exceptions, reading the traceback, handling exceptions), 15 Floating-Point Arithmetic (0.1 + 0.2))
  • Built-in Functions (docs.python.org/3.12/library/functions.html: print, input, len, int, float, str, type, round (round half to even: round(0.5) and round(-0.5) are 0, round(1.5) is 2), range, sum, min, max, sorted)
  • Built-in Types (str methods upper, lower, replace, strip; dict.get; list.append, pop, remove, sort returning None)
  • General Python FAQ (docs.python.org/3.12/faq/general.html: Guido van Rossum began Python in the 1989 Christmas holidays, posted it to USENET in February 1991, named it after Monty Python's Flying Circus)
  • Curriculum for the Korean pages: 교육부 고시 제2022-33호 [별책 10] 정보과 교육과정 (PDF read 2026-10-19: 중학교 정보 [9정03-05] 리스트 등 데이터를 순차적으로 저장하는 구조, [9정03-06] 논리 연산과 중첩 제어 구조, [9정03-07] 함수 활용과 디버거로 오류 수정, [9정03-08] 실생활 문제를 프로그래밍으로 해결, 적용 시 고려 사항 「학생의 수준을 고려하여 적합한 프로그래밍 언어를 선정」; 고등학교 정보 [12정03-04] 자료형, [12정03-05] 표준입출력, [12정03-07] 제어 구조)
  • Bug story only: Smithsonian National Museum of American History, Log Book With Computer Bug, 1947, Harvard Mark II, "first actual case of bug being found", probably not Hopper's log book (americanhistory.si.edu/collections/object/nmah_334663, read 2026-10-19)

Consulté le: 2026-10-19