PYTHON → ROBOTIQUE · 02

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 nom distance à 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

NomVerdictPourquoi
vitesse_robotOn comprend sans lire le reste.
v~Acceptable dans une formule courte, pas dans un grand programme.
trucNe dit rien.
2rouesInterdit : un nom ne commence pas par un chiffre.
vitesse robotInterdit : pas d’espace. On utilise _.
printAutorisé 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

  1. Parenthèses
  2. Puissance **
  3. Signe -x
  4. * / // %
  5. + -

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 == 0 teste si n est 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 + 4284

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

MotDéfinition
VariableNom donné à une valeur pour la réutiliser.
Affectation =Donner un nom à une valeur (pas une égalité).
TypeNature d’une valeur : int, float, str
Chaîne (str)Suite de caractères entre guillemets.
ConversionChanger de type avec int(), float(), str().
f-stringChaî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

Documentation

Tutoriel officiel : nombres et chaînes · Mini-langage de formatage

← Séance 01SommaireSéance 03 : Conditions et logique →