07 — Générateur de mots de passe

Niveau requis : 4 (fonctions, paramètres) / Difficulté : 2/5 / Durée estimée : 1–2 h

Objectif

Le programme génère des mots de passe aléatoires sur mesure : l'utilisateur choisit la longueur et les familles de caractères (minuscules, majuscules, chiffres, symboles), et obtient un ou plusieurs mots de passe.

Longueur (8-64) : 16
Majuscules ? (o/n) : o
Chiffres ? (o/n) : o
Symboles ? (o/n) : n
Combien de mots de passe ? 3
kR8mtwQ2nXbfP4ae
J7cVpz9qLsWm3dHu
x2NfB6ykUcT8rGwa

Le vrai sujet du projet n'est pas le hasard : c'est la conception de fonctions — qui décide quoi, qui reçoit quoi, qui retourne quoi.

Notions utilisées

Cahier des charges

Étapes de construction

  1. Sans fonction ni options : construis un pool string.ascii_lowercase et génère une chaîne de 12 caractères avec une boucle et random.choice(). print() du résultat. Lance plusieurs fois : ça change.
  2. Emballe ce code dans generate_password(length) et appelle-la depuis le bas du fichier avec plusieurs longueurs. Vérifie len() des résultats.
  3. Ajoute les paramètres use_upper, use_digits, use_symbols (défauts raisonnables) : le pool se construit par concaténation conditionnelle. Teste chaque combinaison en appelant la fonction directement — pas encore de menu, c'est plus rapide à tester ainsi.
  4. Écris l'interface : questions input(), conversion des réponses o/n en booléens, validation de la longueur en boucle, puis appel de la fonction et affichage. Le programme complet tourne.
  5. Implémente la garantie de composition : tire d'abord UN caractère de chaque famille active, complète avec le pool général, puis mélange (random.shuffle() travaille sur une liste — passe par list(password) puis "".join(...)). Vérifie en générant des mots de passe courts (8) avec tout activé : chaque famille est représentée.
  6. Ajoute « Combien de mots de passe ? » et la boucle d'affichage. Relis la fonction : toujours aucun input()/print() dedans ? Fini.

Extensions possibles

  1. Mode « phrase de passe » : 4-5 mots tirés d'une liste de mots français, séparés par des tirets (correct-cheval-pile-orange).
  2. Estimer et afficher la force : taille du pool ** longueur, traduite en « faible / correct / fort ».
  3. Remplacer random par le module secrets (secrets.choice()) et comprendre pourquoi c'est la bonne pratique pour des secrets réels.
  4. Option --length 20 en ligne de commande via sys.argv (avant-goût du niveau 10, où argparse fera ça proprement).

Erreurs fréquentes sur ce projet

Critères de réussite

Commit conseillé

git add projects/mini-projects/07-generateur-mots-de-passe/
git commit -m "project: add password generator"

Puis entrée de journal + git push.