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)3.5
4.0
3
1La 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 ».
% 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)2 h 15 min
0 1
9Les autres opérateurs, et l'ordre que Python utilise
| Opérateur | Signification | Exemple | Résultat |
|---|---|---|---|
| + | addition | 7 + 2 | 9 |
| - | soustraction | 7 - 2 | 5 |
| * | multiplication | 7 * 2 | 14 |
| / | division (float) | 7 / 2 | 3.5 |
| // | division entière | 7 // 2 | 3 |
| % | reste | 7 % 2 | 1 |
| ** | puissance | 7 ** 2 | 49 |
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)14
20
1024
30000La 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))0.30000000000000004
0.3
0 2 2
3 7.0input() 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)How old are you? 14
Next year you will be 15| / | 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 |
- Qu'affiche ce code ?
print(9 / 3) - Qu'affiche ce code ?
print(17 // 5, 17 % 5) - Qu'affiche ce code ?
print(2 + 3 * 4 ** 2) - Qu'affiche ce code ?
print(2 ** 3) - Qu'affiche ce code ?
print(2 ^ 3)861Une erreur
- Qu'affiche ce code ?
print(int("20") + 5) - Qu'affiche ce code ?
print("20" + "5") - Qu'affiche ce code ?
print(int(7.9)) - Qu'affiche ce code ?
print(round(2.5)) - 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) - Quelle expression te dit si n est pair ?
- n / 2 == 0
- n // 2 == 0
- n % 2 == 0
- n ** 2 == 0
- « 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.
- / 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