Adloun

Un tirage sans remise

Exercice supplémentaire · niveau 3 (difficile) · sciences numériques et technologie (seconde), chapitre 6 — Listes et simulations aléatoires · Le module random et les simulations

Énoncé

Le tirage du loto ne redonne jamais deux fois le même numéro. Écrire une fonction tirage_loto() renvoyant numéros distincts entre et , sans utiliser random.sample. Comparer deux stratégies.

Corrigé

Stratégie 1 — rejeter les doublons :

import random

def tirage_loto():
    tirage = []
    while len(tirage) < 6:
        n = random.randint(1, 49)
        if n not in tirage:
            tirage.append(n)
    return tirage

Stratégie 2 — piocher dans une urne :

def tirage_loto_urne():
    urne = [i for i in range(1, 50)]
    tirage = []
    for k in range(6):
        i = random.randint(0, len(urne) - 1)
        tirage.append(urne[i])
        urne.pop(i)              # le numéro sorti quitte l'urne
    return tirage

Comparaison. La première est plus courte, mais son nombre de tours est imprévisible : chaque doublon oblige à recommencer. Ici la probabilité de collision reste faible, donc elle convient ; mais pour tirer numéros sur , elle deviendrait très lente — et pour en tirer elle ne s'arrêterait jamais.

La seconde effectue exactement tours quoi qu'il arrive, et modélise fidèlement le tirage physique. C'est celle qu'il faut préférer, parce que sa terminaison ne dépend pas de la chance.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.