Bloc A — Représenter une donnée⚓︎
Au programme
Variables et affectation · calculs · affichage · dialogue avec l'utilisateur · chaînes de caractères
Séance 1 — Prise en main, variables et calculs
Basthon et Capytale, premier programme, variable et affectation, opérateurs arithmétiques.
Programmer, c'est quoi ?⚓︎
Avant de traiter une information, il faut la représenter d'une manière qu'une machine puisse manipuler : un nombre, un texte, une valeur vraie ou fausse. C'est l'objet de ce premier bloc.
Programmer, c'est écrire une suite d'ordres (des instructions) qu'un ordinateur exécutera dans l'ordre. Sans programme, une machine ne sait rien faire.
Python est un langage de programmation : un ensemble de mots et de règles d'écriture que l'ordinateur sait interpréter.
Premier programme⚓︎
Activité 1 — Hello World
Par tradition, tout apprenti programmeur commence par afficher un message à l'écran. Dans l'éditeur de Basthon ou de Capytale, recopie puis exécute :
print("Hello World !")
Le message doit apparaître dans la console.
Question : remplace les guillemets doubles " par des apostrophes '. Le programme fonctionne-t-il toujours ?
Réponse
Oui. Python accepte indifféremment '...' et "..." pour délimiter du texte. Le choix se fait selon le contenu : si le texte contient une apostrophe, on l'entoure de guillemets doubles.
print("C'est parti !")
À toi de jouer 1.1 ⭐
Écris un programme qui affiche ton prénom à l'écran.
Variables et affectation⚓︎
Une variable est l'association :
- d'un nom, qui permet de la retrouver ;
- d'un espace en mémoire ;
- d'une valeur que l'on y stocke.
En Python, l'affectation se fait avec l'opérateur = :
note = 15 # stocke l'entier 15
prenom = "Camille" # stocke la chaîne de caractères "Camille"
Le piège du signe =
En Python, = ne veut pas dire « est égal à ». Il veut dire « reçoit ».
note = 15 se lit : la variable note reçoit la valeur 15.
On verra plus loin que le test d'égalité, lui, s'écrit ==.
Afficher le contenu d'une variable⚓︎
Activité 2 — Avec ou sans guillemets
Teste successivement ces deux programmes :
moyenne = 15
print(moyenne)
moyenne = 15
print("moyenne")
Question : qu'est-ce qui change, et pourquoi ?
Réponse
print(moyenne)affiche 15 : Python va chercher la valeur stockée dans la variable.print("moyenne")affiche moyenne : entre guillemets, c'est un simple texte, Python ne cherche aucune variable.
Les guillemets font toute la différence entre le nom et le contenu.
À toi de jouer 1.2 ⭐
Écris un programme qui range la note 12 dans une variable nommée moyenne, puis affiche cette moyenne.
Bien nommer ses variables
Un nom de variable doit dire ce qu'elle contient. moyenne est un bon nom ; x, truc ou a1 n'en sont pas.
Règles à respecter : pas d'espace, pas d'accent, pas de tiret, et on ne commence pas par un chiffre. On écrit nombre_eleves, pas nombre élèves.
Permuter deux variables⚓︎
Activité 3 — L'échange raté
On veut échanger les valeurs de deux variables a et b.
Proposition de Luc :
a = 8
b = -3
a = b
b = a
Complète le tableau d'exécution, ligne par ligne :
| Après la ligne | a vaut |
b vaut |
|---|---|---|
a = 8 |
8 | (rien) |
b = -3 |
… | … |
a = b |
… | … |
b = a |
… | … |
L'échange a-t-il fonctionné ?
Corrigé
| Après la ligne | a vaut |
b vaut |
|---|---|---|
a = 8 |
8 | (rien) |
b = -3 |
8 | -3 |
a = b |
-3 | -3 |
b = a |
-3 | -3 |
Non. Dès la ligne a = b, la valeur 8 est écrasée : elle est définitivement perdue. Les deux variables finissent avec la même valeur.
L'ordre inverse (b = a puis a = b) échoue exactement de la même façon, en perdant cette fois la valeur -3.
À toi de jouer 1.3 ⭐⭐
Propose un programme qui échange vraiment les valeurs de a et b.
Indice concret : tu as deux verres, l'un avec de l'eau, l'autre avec du jus. Comment échanger leur contenu sans changer de verre ?
Corrigé
Il faut un troisième verre : une variable temporaire qui met une valeur de côté avant qu'elle soit écrasée.
a = 8
b = -3
temporaire = a # on met 8 de côté
a = b # a reçoit -3
b = temporaire # b reçoit 8
print(a, b) # affiche -3 8
Faire des calculs⚓︎
Python connaît les opérations usuelles :
| Opérateur | Rôle | Exemple | Résultat |
|---|---|---|---|
+ - * |
addition, soustraction, multiplication | 3 * 4 |
12 |
/ |
division (résultat décimal) | 13 / 4 |
3.25 |
// |
quotient de la division euclidienne | 13 // 4 |
3 |
% |
reste de la division euclidienne | 13 % 4 |
1 |
** |
puissance | 2 ** 3 |
8 |
Activité 4 — Que vaut a à la fin ?
Prédis le résultat avant d'exécuter, puis vérifie :
a = 1
b = -1
a = a * b
a = a + b
print(a)
Réponse
a = a * b donne a = 1 * (-1) = -1, puis a = a + b donne a = -1 + (-1) = -2.
Le programme affiche -2.
Retiens la mécanique : dans a = a + b, Python calcule d'abord le membre de droite avec les valeurs actuelles, puis range le résultat dans a.
Activité 5 — Incrémenter
compteur = 11
print(compteur)
compteur = compteur + 1 # incrémentation
print(compteur)
Cette instruction compteur = compteur + 1 reviendra constamment dans le cours : c'est ainsi qu'on compte des choses.
À toi de jouer 1.4 ⭐⭐ — Combien d'octets pèse une photo ?
Une photo de smartphone fait 4032 pixels de large et 3024 pixels de haut. Chaque pixel est codé sur 3 octets (un pour le rouge, un pour le vert, un pour le bleu).
Écris un programme qui calcule et affiche le poids de cette photo en octets, puis en mégaoctets (1 Mo = 1024 × 1024 octets). Arrondis à l'aide de round(valeur, 1).
Corrigé
largeur = 4032
hauteur = 3024
octets = largeur * hauteur * 3
print("Poids brut :", octets, "octets")
print("Soit :", round(octets / 1024 / 1024, 1), "Mo")
Résultat :
Poids brut : 36578304 octets
Soit : 34.9 Mo
Lien avec le module Images
Une vraie photo JPEG fait plutôt 3 à 5 Mo. L'écart vient de la compression, que l'on étudiera dans le module Images numériques.
Séance 2 — Dialoguer avec l'utilisateur
Affichage composé, input, conversions de type.
Afficher : la fonction print⚓︎
Une chaîne de caractères est un texte, délimité par " ou '.
print() peut afficher plusieurs éléments d'affilée, séparés par des virgules :
Activité 6
prenom = "Bob"
print("Vivement les vacances !")
print("Mon prénom est :", prenom)
Observe : Python ajoute automatiquement une espace à la place de chaque virgule.
À toi de jouer 1.5 ⭐
Crée trois variables prenom, nom et age, puis affiche une phrase de la forme :
Bonjour, je m'appelle Ada Lovelace, j'ai 36 ans.
Corrigé
prenom = "Ada"
nom = "Lovelace"
age = 36
print("Bonjour, je m'appelle", prenom, nom + ",", "j'ai", age, "ans.")
Au fait…
Ada Lovelace (1815-1852) est considérée comme la première personne à avoir écrit un programme informatique, un siècle avant la construction du premier ordinateur.
Dialoguer avec l'utilisateur : input⚓︎
La fonction input() affiche une question et récupère ce que l'utilisateur tape au clavier.
Activité 7
prenom = input("Quel est ton prénom ? ")
print("Bonjour", prenom)
Point crucial : input renvoie toujours du TEXTE
Même si l'utilisateur tape 2, Python reçoit la chaîne de caractères "2", pas le nombre 2.
Activité 8 — L'erreur du boulanger
Une baguette coûte 1,10 €. Teste ce programme en saisissant 2 :
nombre = input("Combien de baguettes ? ")
prix = nombre * 1.1
print("Vous devez payer", prix, "euros.")
Question : quel message d'erreur obtiens-tu ? Teste maintenant cette version :
nombre = int(input("Combien de baguettes ? "))
prix = nombre * 1.1
print("Vous devez payer", round(prix, 2), "euros.")
Réponse
Le premier programme provoque une erreur du type :
TypeError: can't multiply sequence by non-int of type 'float'
Python refuse de multiplier un texte par un nombre décimal.
Dans la seconde version, int(...) convertit le texte saisi en nombre entier. Le calcul devient possible.
Les fonctions de conversion
int("2")→2(nombre entier)float("2.5")→2.5(nombre décimal, appelé flottant)str(2)→"2"(texte)
À toi de jouer 1.6 ⭐⭐ — Fil rouge : la fiche élève
Écris un programme qui demande à l'utilisateur son prénom, puis deux notes, et affiche :
Camille, ta moyenne est de 13.5
Attention à la conversion des notes !
Corrigé
prenom = input("Ton prénom ? ")
note1 = float(input("Première note ? "))
note2 = float(input("Deuxième note ? "))
moyenne = (note1 + note2) / 2
print(prenom + ", ta moyenne est de", moyenne)
On utilise float et non int : une note peut valoir 13,5.
Test avec Camille, 12 et 15 :
Camille, ta moyenne est de 13.5
À toi de jouer 1.7 ⭐⭐ — La borne du parc
Tu programmes la borne automatique d'un parc d'attractions. L'entrée coûte 21 € par adulte et 13 € par enfant.
Écris un programme qui demande le nombre d'adultes et le nombre d'enfants, puis affiche le prix total à payer.
Corrigé
adultes = int(input("Nombre d'adultes : "))
enfants = int(input("Nombre d'enfants : "))
prix = adultes * 21 + enfants * 13
print("Total à payer :", prix, "€")
Test avec 2 adultes et 3 enfants : Total à payer : 81 €
Séance 3 — Les chaînes de caractères
Longueur, appartenance, indexation, slicing.
Les chaînes de caractères⚓︎
En Python, le type des textes s'appelle str (string).
Afficher des guillemets et des apostrophes⚓︎
À toi de jouer 1.8 ⭐
Fais afficher exactement ces deux lignes :
C'est bientôt les vacances
Bonjour se dit "Hello"
Corrigé
La règle : on délimite avec le symbole que le texte ne contient pas.
print("C'est bientôt les vacances") # apostrophe dedans → guillemets autour
print('Bonjour se dit "Hello"') # guillemets dedans → apostrophes autour
Longueur, appartenance, concaténation⚓︎
| Opération | Syntaxe | Exemple | Résultat |
|---|---|---|---|
| Longueur | len(chaine) |
len("Bonjour") |
7 |
| Appartenance | in |
"B" in "Bonjour" |
True |
| Concaténation | + |
"Bon" + "jour" |
"Bonjour" |
| Répétition | * |
"ab" * 3 |
"ababab" |
Activité 9 — Attention à la casse
chaine = "Bonjour"
print("b" in chaine)
print("B" in chaine)
Question : pourquoi les deux résultats diffèrent-ils ?
Réponse
Le premier affiche False, le second True.
Python distingue majuscules et minuscules : "b" et "B" sont deux caractères différents. On parle de sensibilité à la casse.
Conséquence pratique : un mot de passe Motdepasse et motdepasse ne sont pas le même.
Accéder aux caractères : l'indexation⚓︎
Les caractères d'une chaîne sont numérotés à partir de 0 :
B o n j o u r
0 1 2 3 4 5 6
-7 -6 -5 -4 -3 -2 -1
Activité 10
chaine = "Bonjour"
print(chaine[0]) # B
print(chaine[1]) # o
print(chaine[-1]) # r
print(chaine[-2]) # u
Le premier caractère a l'indice 0
C'est une source d'erreur classique. Dans une chaîne de longueur n, les indices valides vont de 0 à n - 1. chaine[7] sur "Bonjour" provoque une erreur.
Extraire un morceau : le slicing⚓︎
La syntaxe chaine[debut:fin:pas] extrait les caractères de l'indice debut inclus à l'indice fin exclu.
Activité 11
Prédis chaque affichage, puis vérifie :
chaine = "Bonjour"
print(chaine[0:2]) # ?
print(chaine[2:5]) # ?
print(chaine[1:]) # ?
print(chaine[::2]) # ?
print(chaine[::-1]) # ?
Réponse
Bo les indices 0 et 1 (le 2 est exclu)
njo les indices 2, 3, 4
onjour de l'indice 1 jusqu'à la fin
Bnor un caractère sur deux
ruojnoB la chaîne à l'envers (pas négatif)
À toi de jouer 1.9 ⭐⭐⭐ — Anonymiser un prénom
Pour publier des résultats sans révéler l'identité des élèves, on veut afficher un prénom sous la forme C...... : la première lettre, puis autant de points que de lettres restantes.
Écris un programme qui, à partir de prenom = "Camille", affiche C.......
Indices : len() donne la longueur, et "." * 3 produit "...".
Corrigé
prenom = "Camille"
anonyme = prenom[0] + "." * (len(prenom) - 1)
print(anonyme)
Résultat : C......
On prend la première lettre prenom[0], puis on répète le point len(prenom) - 1 fois.
Lien avec le module Données
C'est une forme très simple de pseudonymisation. On verra dans le module Données pourquoi cette technique reste insuffisante pour protéger réellement une identité : dans une classe, C...... de 7 lettres suffit souvent à retrouver la personne.
Exercices corrigés⚓︎
Exercice 1 ⭐ — Suivre une affectation
Que vaut a à la fin de ce script ? Réponds sans exécuter, puis vérifie.
a = 5
a = 2 * a
b = 2 * a
a = a * a
a = a - b + 1
Corrigé
Ligne par ligne :
| Instruction | a |
b |
|---|---|---|
a = 5 |
5 | — |
a = 2 * a |
10 | — |
b = 2 * a |
10 | 20 |
a = a * a |
100 | 20 |
a = a - b + 1 |
81 | 20 |
Pour vérifier, on peut insérer des print :
a = 5
a = 2 * a
print("a devient", a)
b = 2 * a
print("b vaut", b)
a = a * a
print("a devient", a)
a = a - b + 1
print("a devient", a)
Exercice 2 ⭐ — Une fiche de contact
Crée trois variables prenom, nom et num_tel, puis affiche :
Bonjour, je veux joindre Mélusine Hamphaïte au 0665432100
Corrigé
prenom = "Mélusine"
nom = "Hamphaïte"
num_tel = "0665432100"
print("Bonjour, je veux joindre", prenom, nom, "au", num_tel)
Pourquoi le numéro est-il entre guillemets ?
Parce qu'un numéro de téléphone n'est pas un nombre : on ne fait pas de calcul dessus, et le 0 initial disparaîtrait s'il était stocké comme entier (0665432100 deviendrait 665432100).
C'est un premier réflexe de modélisation des données : le type qu'on choisit dépend de l'usage, pas de l'apparence.
Exercice 3 ⭐⭐ — La même chose, avec saisie
Reprends l'exercice 2, mais cette fois les trois informations sont demandées à l'utilisateur.
Corrigé
prenom = input("Prénom : ")
nom = input("Nom : ")
num_tel = input("Numéro : ")
print("Bonjour, je veux joindre", prenom, nom, "au", num_tel)
Ici, aucune conversion n'est nécessaire : les trois valeurs restent du texte.
Exercice 4 ⭐⭐ — Billetterie de concert
Un concert applique trois tarifs : 10 € par adulte, 8 € par adolescent de 12 à 18 ans, gratuit pour les moins de 12 ans.
Écris un programme qui demande le nombre de personnes de chaque catégorie et affiche le prix total.
Corrigé
adultes = int(input("Nombre d'adultes : "))
ados = int(input("Nombre d'ados (12-18 ans) : "))
enfants = int(input("Nombre d'enfants (moins de 12 ans) : "))
prix = adultes * 10 + ados * 8 + enfants * 0
print("Le prix à payer est", prix, "€")
Test avec 2, 3 et 1 :
Le prix à payer est 44 €
Le terme enfants * 0 est inutile au calcul, mais on le garde pour que le programme documente le tarif : un lecteur voit immédiatement que la gratuité a été prise en compte.
Exercice 5 ⭐⭐⭐ — Jouer avec les chaînes
À partir de chaine1 = "algorithmique", construis :
chaine2: le premier et le dernier caractère ;chaine3: les deux premiers suivis des deux derniers ;chaine4: les caractères d'indice pair ;chaine5: les caractères d'indice impair ;chaine6: la chaîne inversée.
Corrigé
chaine1 = "algorithmique"
chaine2 = chaine1[0] + chaine1[-1]
chaine3 = chaine1[:2] + chaine1[-2:]
chaine4 = chaine1[::2]
chaine5 = chaine1[1::2]
chaine6 = chaine1[::-1]
print(chaine2)
print(chaine3)
print(chaine4)
print(chaine5)
print(chaine6)
Résultat :
ae
alue
agrtmqe
loihiu
euqimhtirogla
Exercice 6 ⭐⭐⭐ — Pourquoi il ne faut pas comparer deux nombres décimaux
Saisis ce code, prédis l'affichage, puis exécute :
a = 3
b = 4
c = 5
print(c ** 2 == a ** 2 + b ** 2)
Complète maintenant avec :
a = a / 10
b = b / 10
c = c / 10
print(a, b, c)
print(c ** 2 == a ** 2 + b ** 2)
Que constates-tu ? Comment l'expliquer ?
Corrigé
Le premier test affiche True : (3, 4, 5) est un triplet pythagoricien.
Le second affiche… False, alors que mathématiquement l'égalité reste vraie : si c² = a² + b², alors (c/10)² = (a/10)² + (b/10)².
Explication. L'ordinateur représente les entiers de façon exacte, mais pas les nombres décimaux. Ces derniers sont stockés sous forme de flottants, en base 2, avec un nombre fini de chiffres. Or 0,3 n'a pas d'écriture finie en base 2 : la valeur stockée est une approximation.
On peut le voir directement :
print(0.1 + 0.2)
0.30000000000000004
Règle à retenir
On ne compare jamais deux flottants avec ==. On teste plutôt si leur écart est très petit :
from math import isclose
print(isclose(c ** 2, a ** 2 + b ** 2)) # True
Cette limite n'est pas un défaut de Python : elle est commune à tous les langages, et elle est une conséquence directe du fait qu'un ordinateur travaille en binaire avec une mémoire finie.
Auto-évaluation⚓︎
Teste tes connaissances
- Que fait l'instruction
age = 15? - Quelle est la différence entre
print(note)etprint("note")? - Que renvoie
input(): un nombre ou du texte ? - Que vaut
len("SNT")? - Que vaut
"Python"[0]? Et"Python"[-1]? - Pourquoi
int(input(...))est-il souvent nécessaire ?
Réponses
- Elle range la valeur 15 dans une variable nommée
age(le=signifie « reçoit »). print(note)affiche la valeur contenue dans la variable ;print("note")affiche le mot « note ».- Toujours du texte (type
str), même si l'utilisateur tape des chiffres. 3."P"et"n".- Parce que
inputrenvoie du texte : sans conversion, aucun calcul arithmétique n'est possible.
Ce qu'il faut retenir⚓︎
L'essentiel de la page
- Une variable associe un nom à une valeur ;
=signifie « reçoit », pas « est égal à ». print()affiche ; les virgules séparent les éléments affichés.input()renvoie toujours du texte → convertir avecint()oufloat()pour calculer.- Les caractères d'une chaîne sont indexés à partir de 0.
- On ne compare jamais deux nombres décimaux avec
==.