cours1 min de lecture

Constructions élémentaires

Variables, types, expressions, instructions, conditionnelles et boucles : le socle commun de la programmation.
programme

Introduction

Tout programme se construit à partir d'un petit nombre de briques de base. Affecter une valeur à un nom, évaluer une expression pour produire une valeur, enchaîner des instructions, choisir entre deux chemins avec une condition, répéter un bloc de code : ces cinq mécanismes suffisent à exprimer la quasi-totalité des programmes écrits en NSI.

L'objectif de ce cours n'est pas de faire découvrir ces notions (elles ont déjà été manipulées en Seconde et en début de Première), mais de les nommer précisément et de les distinguer les unes des autres.

Variables et affectation

Une variable est un nom associé à une valeur stockée en mémoire. L'affectation crée ou met à jour cette association.

age = 16          # création de la variable age, valeur 16
age = age + 1     # mise à jour : age vaut désormais 17
prenom = "Ada"    # variable de type chaîne de caractères

Le signe = n'est pas un signe d'égalité mathématique. Il signifie « range la valeur de droite dans la case nommée à gauche ». La ligne age = age + 1 n'a aucun sens en mathématiques (un nombre ne peut être égal à lui-même augmenté de 1), mais elle a un sens parfait en informatique.

Ne pas confondre = (affectation) et == (test d'égalité).
x = 5        # affecte 5 à x
x == 5       # renvoie True : test d'égalité

Types de base

Toute valeur en Python a un type qui détermine ce qu'on peut faire avec.

TypeExempleUsage
int42, -7entiers
float3.14, -0.5nombres à virgule
str"Bonjour"chaînes de caractères
boolTrue, Falsevaleurs logiques

La fonction type(...) permet d'interroger le type d'une valeur :

print(type(42))        # <class 'int'>
print(type(3.14))      # <class 'float'>
print(type("Ada"))     # <class 'str'>
print(type(True))      # <class 'bool'>

Quel est le type de l'expression 5 / 2 en Python 3 ?

Expressions et instructions

Distinction essentielle :

  • Une expression est évaluée et produit une valeur. Exemples : 2 + 3, x * 10, "a" + "b", len("Ada") > 2.
  • Une instruction fait une action sans nécessairement produire de valeur. Exemples : x = 5 (affectation), print(x) (affichage), if x > 0: (test conditionnel).

Une instruction peut contenir des expressions :

y = (x + 5) * 2      # (x + 5) * 2 est une expression, y = ... est une instruction
⏵ Ctrl+↵ pour exécuter
Aucune exécution pour l'instant.

Sortie attendue :

L'expression vaut : 20
Comparaison x > 5 : True

Séquence d'instructions

La forme la plus simple d'un programme est une séquence : on enchaîne les instructions, exécutées dans l'ordre, de haut en bas.

prix_ht = 100
taux_tva = 0.20
prix_ttc = prix_ht * (1 + taux_tva)
print("Prix TTC :", prix_ttc)   # 120.0

Changer l'ordre des deux premières lignes ne pose pas de problème ici, mais on ne peut pas calculer prix_ttc avant d'avoir défini prix_ht et taux_tva. L'ordre compte.

Conditionnelle

Une conditionnelle permet d'exécuter un bloc d'instructions seulement si une expression booléenne est vraie.

note = 12

if note >= 10:
    print("Admis")
else:
    print("Refusé")

Pour plusieurs cas, on enchaîne avec elif :

note = 14

if note >= 16:
    mention = "Très bien"
elif note >= 14:
    mention = "Bien"
elif note >= 12:
    mention = "Assez bien"
elif note >= 10:
    mention = "Passable"
else:
    mention = "Refusé"

print(mention)   # Bien
Indentation et : : en Python, le bloc qui suit un if est délimité uniquement par l'indentation, et la ligne du if se termine par :. Oublier l'un des deux est une erreur classique en début d'année.

Boucles bornées : for

Une boucle bornée est une boucle dont on connaît à l'avance le nombre d'itérations. En Python, c'est for.

# Affiche les carrés de 1 à 5
for i in range(1, 6):
    print(i, "→", i * i)

Sortie :

1 → 1
2 → 4
3 → 9
4 → 16
5 → 25

La fonction range(a, b) produit les entiers de a à b - 1 inclus. La borne supérieure b n'est jamais atteinte.

range(5) produit 0, 1, 2, 3, 4 : l'indice 5 n'est jamais atteint. C'est l'un des pièges les plus fréquents.

Combien de fois la boucle for i in range(3, 8): exécute-t-elle son corps ?

On peut aussi parcourir directement une séquence (liste, chaîne…) :

for lettre in "NSI":
    print(lettre)
# N
# S
# I

Boucles non bornées : while

Une boucle non bornée s'exécute tant qu'une condition est vraie, sans qu'on sache forcément à l'avance combien d'itérations auront lieu. C'est la boucle du « j'avance jusqu'à ce que… » plutôt que celle du « je fais N pas ».

# Compte à rebours qui s'arrête à 0
n = 3
while n >= 0:
    print(n)
    n = n - 1
print("Décollage !")

Sortie :

3
2
1
0
Décollage !

Question vitale : qu'est-ce qui garantit que la boucle s'arrête ? Ici, chaque itération diminue n, donc la condition n >= 0 finira par être fausse. Sans cette progression, la boucle tournerait à l'infini.

⏵ Ctrl+↵ pour exécuter
Aucune exécution pour l'instant.

Sortie attendue :

Le plus petit diviseur impair > 1 de 91 est 7
Boucle infinie : si la condition d'arrêt n'est jamais atteinte, le programme ne termine pas. Toujours se demander : qu'est-ce qui change à chaque itération pour rendre la condition fausse à terme ?

Quand utiliser for, quand utiliser while ?

SituationBoucle adaptée
Parcourir une liste ou un range connufor
Répéter un nombre connu de foisfor
Attendre qu'une condition devienne faussewhile
Lire jusqu'à une sentinelle (fin de fichier, mot-clé)while

Règle pratique : par défaut, préférer for, car le risque de boucle infinie y est nul. N'utiliser while que lorsque le nombre d'itérations n'est pas connu à l'avance.

Pièges courants

  • Confondre = et ==.
  • Oublier les : et l'indentation après if, for, while.
  • Oublier que range(n) exclut n.
  • Modifier la condition de boucle dans le mauvais sens (ex. n = n + 1 au lieu de n = n - 1 dans un compte à rebours) → boucle infinie.
  • Indentation mixte (tabulations + espaces) → erreur IndentationError.

Pour aller plus loin

Ces cinq constructions (affectation, expression, séquence, conditionnelle, boucle) constituent ce qu'on appelle le noyau impératif. Le corpus de l'item les recouvre en distinguant boucle bornée et boucle non bornée, et y ajoute les appels de fonctions, objet du cours suivant.