Séance 02 · Partie A · Python pas à pas
Variables, nombres
et texte.
Un robot mesure, calcule et affiche. Aujourd’hui : stocker une information, faire un calcul, parler à l’utilisateur.
Durée : 60 à 90 min · Objectifs : créer des variables, distinguer entier / flottant / chaîne, écrire une formule, utiliser print() et input().
Ce que vous saurez faire à la fin
- Expliquer ce qu’est une variable et choisir un bon nom.
- Faire des calculs avec
+ - * / // % **et prédire le résultat. - Convertir entre texte et nombre avec
int(),float(),str(). - Écrire un petit programme qui pose une question et répond avec un calcul.
01 / Variables
Une variable, c’est une étiquette sur une valeur
=ne veut pas dire « égal » : il veut dire « donne le nomdistanceà la valeur 120 ».- Le nom est à gauche, la valeur à droite. Toujours.
- Une fois nommée, la valeur se réutilise partout par son nom.
Cliquez sur ▶ Exécuter, puis changez vitesse et relancez.
Pourquoi « étiquette » et pas « boîte » ?
Dans beaucoup de cours on dit qu’une variable est une boîte. En Python c’est plus juste de dire étiquette : le nom pointe vers un objet en mémoire (vous avez vu ça à la séance 01 avec a is b). Deux étiquettes peuvent désigner le même objet. Cette nuance deviendra importante avec les listes.
01 / Variables
Bien nommer, c’est déjà programmer
| Nom | Verdict | Pourquoi |
|---|---|---|
vitesse_robot | ✔ | On comprend sans lire le reste. |
v | ~ | Acceptable dans une formule courte, pas dans un grand programme. |
truc | ✘ | Ne dit rien. |
2roues | ✘ | Interdit : un nom ne commence pas par un chiffre. |
vitesse robot | ✘ | Interdit : pas d’espace. On utilise _. |
print | ✘ | Autorisé mais catastrophique : vous écrasez la fonction print ! |
Règles et convention
Un nom contient des lettres, des chiffres et _, ne commence pas par un chiffre, et distingue majuscules et minuscules (Vitesse et vitesse sont deux noms différents). La convention Python (appelée PEP 8) : minuscules et mots séparés par _. Évitez les accents dans les noms, même si Python les accepte : le clavier de votre voisin ne les a peut-être pas.
01 / Variables
Une variable peut changer de valeur
Ligne 3 : Python calcule d’abord la droite (0 + 1), puis colle l’étiquette compteur sur le résultat.
C’est pour cela que compteur = compteur + 1 a un sens en programmation, alors qu’en maths x = x + 1 est impossible.
Les raccourcis +=, -=, *=, /= existent tous.
02 / Nombres
Deux sortes de nombres
int — entier
0, 42, -7, 1_000_000
Exact, sans limite de taille en Python.
float — flottant
3.14, -0.5, 2.0, 1e-3
Nombre à virgule (avec un point, pas une virgule). Approché.
Pour aller plus loin — pourquoi « approché » ?
Un float est stocké sur 64 bits (séance 01 : tout est bits). On ne peut pas représenter exactement tous les nombres réels avec 64 bits, de même qu’on ne peut pas écrire 1/3 exactement avec un nombre fini de décimales. Essayez print(0.1 + 0.2). Le résultat surprend : il n’est pas faux, il est arrondi. Un roboticien garde toujours ça en tête quand il compare des mesures.
02 / Nombres
Priorités : Python calcule comme en maths
- Parenthèses
- Puissance
** - Signe
-x * / // %+ -
Devinez chaque résultat avant d’exécuter. Puis vérifiez.
Correction
14, 20, -4 (car la puissance passe avant le signe : c’est -(2**2)), 4, 3, 512 (car 3**2 = 9 puis 2**9). Quand vous hésitez, mettez des parenthèses : elles ne coûtent rien et rendent le code lisible.
02 / Nombres
Le modulo, l’opérateur préféré des roboticiens
a % b donne le reste de la division de a par b.
- Un robot qui a tourné de 450° pointe en réalité vers 90°.
n % 2 == 0teste sinest pair.- Convertir des secondes en h / min / s :
//et%travaillent ensemble.
Pour aller plus loin — esprit prépa
Le modulo est au cœur de l’arithmétique modulaire, utilisée en cryptographie (RSA), dans les codes correcteurs d’erreurs et les tables de hachage. On y reviendra en séance 13. Question : que vaut (-7) % 3 en Python ? Testez, puis cherchez pourquoi Python choisit ce résultat (indice : le résultat a toujours le signe du diviseur).
03 / Texte
Une chaîne de caractères : du texte entre guillemets
"…"ou'…': les deux marchent. Choisissez et restez cohérent.+colle deux chaînes (concaténation).len()compte les caractères.- Les positions commencent à 0.
[-1]est le dernier.
Pourquoi commencer à 0 ?
Parce qu’une position est un décalage par rapport au début : le premier caractère est à 0 caractère du début. C’est la convention de presque tous les langages (C, C++, Java, JavaScript…). Vous la retrouverez sur Arduino.
03 / Texte
Mélanger texte et nombres : les f-strings
Décryptage
Une f-string commence par f juste avant le guillemet. Tout ce qui est entre { } est du Python : une variable, un calcul, un appel de fonction. Après : on précise le format : .2f = flottant avec 2 décimales, >5 = aligné à droite sur 5 caractères, 05d = entier sur 5 chiffres avec des zéros devant. Décommentez la ligne « Mauvais » pour voir l’erreur TypeError : Python refuse de deviner.
03 / Texte
Convertir : int(), float(), str()
Le type d’une valeur décide de ce que fait un opérateur :
"42" + "42"→"4242"42 + 42→84
Même symbole, travail différent. C’est ce que vous avez vu au niveau du bytecode en séance 01.
Vérifiez avec type() quand vous doutez.
La surprise de round()
round(2.5) donne 2 et round(3.5) donne 4 : Python arrondit au pair le plus proche quand on est exactement au milieu (« arrondi bancaire »). Cela évite un biais systématique vers le haut quand on additionne beaucoup de valeurs arrondies. Les ingénieurs y tiennent.
04 / Dialoguer
input() : poser une question
input()affiche la question, attend, et renvoie ce qui a été tapé.- Ce qui est tapé est toujours du texte, même « 14 ». D’où le
int(...)autour. - Dans cette page, la question apparaît dans une petite fenêtre.
Que se passe-t-il si vous répondez « quatorze » à l’âge ?
Réponse
ValueError: invalid literal for int(). Le programme plante parce que « quatorze » n’est pas convertible. Un vrai programme doit prévoir cette erreur : c’est l’objet de la séance 08. Pour l’instant, on suppose que l’utilisateur est gentil.
05 / Défis
Défi ★ — Le convertisseur
Consigne
Demander une température en degrés Celsius et afficher son équivalent en Fahrenheit avec une décimale. Formule : F = C × 9/5 + 32.
Correction
celsius = float(input("Température en °C ? "))
fahrenheit = celsius * 9 / 5 + 32
print(f"{celsius} °C = {fahrenheit:.1f} °F")Vérifiez avec 0 °C → 32 °F et 100 °C → 212 °F. Tester avec des valeurs dont on connaît la réponse s’appelle… tester. Vous le ferez toute votre vie.
05 / Défis
Défi ★★ — L’autonomie du robot
Consigne
Un robot consomme conso milliampères. Sa batterie contient capacite milliampères-heures. Demander les deux valeurs, calculer l’autonomie en heures, puis l’afficher sous la forme « 2 h 45 min ». (Indices : //, %, et 1 h = 60 min.)
Correction
capacite = int(input("Capacité de la batterie (mAh) ? "))
conso = int(input("Consommation (mA) ? "))
minutes_totales = capacite * 60 // conso
heures = minutes_totales // 60
minutes = minutes_totales % 60
print(f"Autonomie : {heures} h {minutes} min")Avec 2200 mAh et 800 mA : 2 h 45 min. Remarquez qu’on convertit d’abord tout en minutes (un entier) pour éviter les flottants approximatifs.
05 / Défis
Défi ★★★ — Esprit prépa : les chiffres d’un nombre
Consigne
Demander un entier à trois chiffres et afficher la somme de ses chiffres sans convertir en texte, uniquement avec // et %. Exemple : 472 → 4 + 7 + 2 = 13.
Bonus : afficher le nombre écrit à l’envers (472 → 274), toujours sans texte.
Correction et ouverture
n = int(input("Un entier à trois chiffres ? "))
centaines = n // 100
dizaines = (n // 10) % 10
unites = n % 10
print(f"{centaines} + {dizaines} + {unites} = {centaines + dizaines + unites}")
print(f"À l'envers : {unites * 100 + dizaines * 10 + centaines}")Ce jeu avec // et % est exactement ce que fait un ordinateur pour extraire les bits d’un nombre (avec 2 au lieu de 10). C’est aussi la clé pour comprendre l’écriture en base 2, 8 ou 16 (séance 13). Question ouverte : comment faire si on ne connaît pas à l’avance le nombre de chiffres ? Il faudra une boucle (séance 04).
06 / Vérification
Que vaut x après x = input("?") + 1 si on tape 14 ?
Deux questions supplémentaires
1. Que vaut 7 // 2 * 2 + 7 % 2 ? Réponse : 7. En général (a // b) * b + a % b == a, c’est la définition de la division euclidienne.
2. Pourquoi 0.1 + 0.2 == 0.3 est-il faux ? Parce que les flottants sont approchés. On compare des flottants avec une tolérance : abs(a - b) < 1e-9.
Référence
Les mots à retenir
| Mot | Définition |
|---|---|
| Variable | Nom donné à une valeur pour la réutiliser. |
Affectation = | Donner un nom à une valeur (pas une égalité). |
| Type | Nature d’une valeur : int, float, str… |
Chaîne (str) | Suite de caractères entre guillemets. |
| Conversion | Changer de type avec int(), float(), str(). |
| f-string | Chaîne f"…{expr}…" qui insère des valeurs. |
Modulo % | Reste de la division entière. |
Pour continuer
Vous savez maintenant stocker et calculer
Un programme n’est encore qu’une suite d’ordres exécutés de haut en bas. Séance suivante : lui apprendre à décider.
À faire chez soi
- Refaire les trois défis sans regarder la correction.
- Écrire un programme qui demande la longueur et la largeur d’un terrain et affiche son périmètre et son aire.
- Chercher ce que fait
divmod(3725, 60).
Documentation
Tutoriel officiel : nombres et chaînes · Mini-langage de formatage