Instructions conditionnelles et simulation

Publié le 31 mai 2026 à 17:31
Chapitre V-2 - Instructions conditionnelles et simulation | Révision Bac Mathématiques
1

Structures conditionnelles : if, elif, else

En programmation, on a souvent besoin d'exécuter un bloc de code seulement si une certaine condition est remplie. Python utilise les instructions if, elif et else pour cela.

Syntaxe de base :
if condition1:
    # instructions exécutées si condition1 est vraie
elif condition2:
    # instructions si condition1 est fausse et condition2 vraie
else:
    # instructions si aucune condition n'est vraie

Le elif (contraction de "else if") est optionnel et peut apparaître plusieurs fois. Le else est facultatif également. On peut avoir un simple if sans rien d'autre.

Opérateurs de comparaison

OpérateurSignificationExemple
==égal àx == 0
!=différent dex != 5
<strictement inférieurx < 10
>strictement supérieurx > 0
<=inférieur ou égalx <= 100
>=supérieur ou égalx >= 18
andet logiquex > 0 and x < 10
orou logiquex < 0 or x > 10
notnégationnot (x == 3)
Exemple : fonction valeur absolue
def valeur_absolue(x):
    if x >= 0:
        return x
    else:
        return -x
Exemple avec elif : mention au bac
def mention(moyenne):
    if moyenne < 8:
        return "Refusé"
    elif moyenne < 10:
        return "Rattrapage"
    elif moyenne < 12:
        return "Admis"
    elif moyenne < 14:
        return "Assez bien"
    elif moyenne < 16:
        return "Bien"
    else:
        return "Très bien"
⚠️ Attention à l'indentation : Python utilise l'indentation (espaces ou tabulations) pour délimiter les blocs de code. Tout ce qui est à l'intérieur d'un if doit être décalé d'un même nombre d'espaces.
2

Le module random

Pour simuler le hasard en Python, on importe le module random qui fournit plusieurs fonctions utiles.

Importation : On écrit import random en début de programme. Ensuite, on utilise les fonctions du module en les préfixant par random..

Les fonctions essentielles

FonctionDescriptionExemple
random.random()Réel aléatoire dans $[0;1[$0.3742...
random.randint(a, b)Entier aléatoire entre a et b inclusrandom.randint(1,6) → 1,2,3,4,5 ou 6
random.uniform(a, b)Réel aléatoire entre a et brandom.uniform(0,10)
random.choice(liste)Un élément au hasard d'une listerandom.choice(["pile","face"])
Simuler un lancer de dé :
import random
de = random.randint(1, 6)
print("Le dé donne :", de)
Simuler un tirage pile ou face avec random.random() :
if random.random() < 0.5:
    print("Pile")
else:
    print("Face")
On compare à 0.5 car random.random() donne un nombre uniforme dans $[0;1[$.
Méthode générale : Pour simuler un événement de probabilité $p$, on utilise random.random() < p qui renvoie True avec probabilité $p$ et False sinon.
3

Simulation d'expériences aléatoires

On peut répéter une expérience aléatoire un grand nombre de fois pour estimer la probabilité d'un événement par la fréquence observée (loi des grands nombres).

Principe d'une simulation :
  1. Définir une fonction qui simule une expérience et renvoie True si l'événement cherché est réalisé, False sinon.
  2. Répéter cette expérience $N$ fois (avec une boucle for) en comptant le nombre de True.
  3. La fréquence (nombre de succès / $N$) donne une estimation de la probabilité.
Exemple : probabilité d'obtenir au moins un 6 en 4 lancers de dé.
import random

def un_succes():
    """Simule 4 lancers, renvoie True si au moins un 6"""
    for _ in range(4):
        if random.randint(1, 6) == 6:
            return True
    return False

def estimation(N):
    succes = 0
    for _ in range(N):
        if un_succes():
            succes = succes + 1
    return succes / N

print(estimation(100000))  # Environ 0.5177

La probabilité exacte est $1 - (5/6)^4 \approx 0,5177$, ce que l'on retrouve approximativement.

Exemple : jeu de la roulette (pair/impair). On mise sur « pair ». La roulette comporte les nombres de 0 à 36. Le 0 n'est ni pair ni impair et fait perdre. La probabilité exacte de gagner est $18/37 \approx 0,4865$. On peut le vérifier par simulation.
def roulette():
    numero = random.randint(0, 36)
    return numero != 0 and numero % 2 == 0  # pair sauf 0

def simule(N):
    gagne = 0
    for _ in range(N):
        if roulette():
            gagne += 1
    return gagne / N

print(simule(100000))  # ~0.486
⚠️ Précision : Plus $N$ est grand, plus la fréquence se rapproche de la probabilité théorique. En pratique, quelques dizaines de milliers de simulations suffisent pour avoir une bonne estimation.
4

Exercices corrigés

Exercice 1 – Année bissextile

Écrire une fonction est_bissextile(annee) qui renvoie True si l'année est bissextile (divisible par 4, mais pas par 100 sauf si divisible par 400).

Solution :

def est_bissextile(annee):
    if annee % 400 == 0:
        return True
    elif annee % 100 == 0:
        return False
    elif annee % 4 == 0:
        return True
    else:
        return False

Exercice 2 – Lancer de pièces jusqu'à obtenir Pile

Écrire une fonction qui compte le nombre de lancers nécessaires pour obtenir Pile (pièce équilibrée). Simuler cette expérience 1000 fois et estimer l'espérance (nombre moyen de lancers).

Solution :

def un_jeu():
    n = 0
    while True:
        n = n + 1
        if random.random() < 0.5:  # Pile
            return n

def simulation(N):
    total = 0
    for _ in range(N):
        total = total + un_jeu()
    return total / N

print(simulation(10000))  # ~2.0 (espérance = 2)

Exercice 3 – Aiguillage conditionnel avec elif

Écrire une fonction temperature(degres) qui retourne "Glace" si la température est $\le 0$, "Eau liquide" si $0 < T < 100$, et "Vapeur" si $T \ge 100$.

Solution :

def temperature(T):
    if T <= 0:
        return "Glace"
    elif T < 100:
        return "Eau liquide"
    else:
        return "Vapeur"

Exercice 4 – Simulation d'une probabilité conditionnelle

On lance deux dés. On s'intéresse à la probabilité que la somme soit $\ge 8$ sachant que le premier dé donne 6. Écrire une simulation pour estimer cette probabilité conditionnelle.

Solution :

def simulation_cond(N):
    total_cond = 0  # cas où premier dé = 6
    succes = 0      # cas où premier dé = 6 ET somme >= 8
    for _ in range(N):
        d1 = random.randint(1, 6)
        d2 = random.randint(1, 6)
        if d1 == 6:
            total_cond += 1
            if d1 + d2 >= 8:
                succes += 1
    return succes / total_cond

print(simulation_cond(100000))  # ~0.666... (exact = 4/6)

© 2026 – Cours de spécialité Mathématiques Première • Préparation au Bac

Ce cours est conforme au programme officiel en vigueur.