VJOURNAL

Innovation • Rédaction internationale •

Projets Python pour débutants : 13 petits programmes classés selon la compétence que chacun entraîne

Treize projets Python pour débutants, classés des bases input et if jusqu’aux fichiers, à JSON et à pathlib. Chacun indique la fonction entraînée, un défi supplémentaire, le piège signalé par la documentation officielle et comment le finir en une soirée.

Couverture VJOURNAL pour « Projets Python pour débutants : 13 petits programmes classés selon la compétence que chacun entraîne »

Réponse en bref

Commencez par un jeu du nombre mystère : il ne demande que input, if, une boucle et le module random, et tient en une soirée. Enchaînez ensuite des projets qui ajoutent chacun une idée nouvelle, comme les listes, les dictionnaires, les fichiers, CSV et JSON, puis terminez par un renommeur de fichiers avec pathlib, testé d’abord sur des copies.

18 sources
Choisissez un premier projet qui n’utilise que ce que vous savez plus une idée nouvelle, et réduisez-le jusqu’à ce qu’il tienne en une soirée.
Lisez une trace d’erreur de bas en haut : le tutoriel officiel dit que la dernière ligne nomme ce qui s’est passé, et les lignes au-dessus, où.
Un générateur de mots de passe relève du module secrets : la documentation de random précise qu’il ne doit pas servir à la sécurité.

Comment choisir un premier projet Python que vous pouvez finir en une soirée

La plupart des listes de projets python pour débutants sont des idées en vrac. Celle-ci suit le concept que chaque projet entraîne, si bien que chaque réalisation apporte une seule nouveauté : d’abord input et if, puis les boucles et les listes, les dictionnaires, les fichiers et enfin les modules de la bibliothèque standard qui font un vrai travail.

La règle de choix est simple. Prenez un projet qui n’utilise que ce que vous savez plus une idée nouvelle, et réduisez-le jusqu’à ce que la première version tienne en une soirée. Une liste de tâches qui ajoute et retire des éléments est un projet ; avec utilisateurs et rappels, c’est un mois. Le tutoriel Python dit qu’il ne cherche pas à couvrir toutes les fonctionnalités, ni même toutes les plus courantes, et renvoie à la référence de la bibliothèque standard pour le reste ; lire une page de cette référence par projet fait partie de l’exercice.

Nombre mystère, calculatrice de pourboire et pierre-feuille-ciseaux : input et if

Le jeu du nombre mystère est le grand classique des premiers projets Python. Le programme choisit un nombre avec random.randint, qui renvoie selon la documentation de Python un entier entre a et b, bornes comprises, puis demande des essais et répond plus grand ou plus petit. Il entraîne input, int, la comparaison et une boucle while. Défi supplémentaire : compter les essais, avec une limite de sept.

Son erreur habituelle enseigne la compétence clé de toute la liste. La fonction input renvoie toujours une chaîne de caractères : la comparer à un nombre échoue, et taper un mot là où int attend un nombre lève une erreur. Le tutoriel officiel montre le remède : une boucle while True autour d’un bloc try qui convertit la réponse, avec une branche except ValueError qui redemande. Il explique aussi comment lire le message d’erreur : sa dernière ligne dit ce qui s’est passé, et la trace de la pile au-dessus indique où.

La calculatrice de pourboire demande une note, un pourcentage et un nombre de personnes, puis affiche chaque part avec une f-string à deux décimales. La page des fonctions intégrées note que round(2.675, 2) donne 2.67 et non 2.68, car la plupart des fractions décimales ne peuvent pas être stockées exactement en float. Pierre-feuille-ciseaux ajoute random.choice et une suite de branches if et elif ; le défi supplémentaire est un score au meilleur des cinq manches.

Dés avec histogramme, compte à rebours et quiz à dictionnaire : les boucles

Le simulateur de dés lance deux dés dix mille fois avec for et range, compte la fréquence de chaque total et affiche un histogramme en texte, une ligne de dièses par total. Il entraîne les boucles, les listes et le comptage. Défi supplémentaire : demander le nombre de dés et de lancers. L’erreur habituelle est une liste décalée d’un cran, sans case pour le total le plus élevé.

Le compte à rebours affiche le temps restant chaque seconde avec time.sleep. La documentation du module time avertit que la pause peut dépasser la durée demandée d’une quantité arbitraire, donc un long compte à rebours qui ne fait que dormir va dériver. Le défi supplémentaire corrige cela : relevez une valeur de départ avec time.monotonic, une horloge qui, d’après la documentation, ne peut pas reculer, et calculez le temps restant à partir d’elle à chaque tour.

Le quiz range les questions comme clés d’un dictionnaire et les réponses comme valeurs, parcourt les paires, compare après lower et strip et affiche un score. C’est le premier projet où données et logique sont séparées. Défi supplémentaire : mélanger l’ordre des questions avec random.shuffle sur une liste des clés, et enregistrer le meilleur score.

Compteur de mots et convertisseur d’unités : chaînes, dictionnaires et fonctions

Le compteur de mots lit un fichier texte et indique les caractères, les mots, les lignes, la longueur moyenne des mots et les dix mots les plus fréquents. Faites-le d’abord avec split et un dictionnaire, puis avec collections.Counter, que la documentation décrit comme une sous-classe de dict pour compter des objets hachables. Son propre exemple trouve les dix mots les plus courants de Hamlet en passant le texte en minuscules, en extrayant les mots par expression régulière et en appelant most_common. L’erreur habituelle est de compter The et the comme deux mots, ce qu’évite la mise en minuscules préalable ; le défi supplémentaire est une liste de mots courts à ignorer.

Le convertisseur d’unités est le projet qui enseigne les fonctions. Rangez les facteurs de conversion dans un dictionnaire dont la clé est la paire d’unités, écrivez une fonction qui prend une valeur et deux unités et renvoie le résultat, et gardez tout l’affichage hors d’elle. Les températures demandent leur propre fonction : passer de Celsius à Fahrenheit exige un décalage en plus d’un facteur. Défi supplémentaire : convertir en boucle jusqu’à ce que l’utilisateur tape quit.

Un générateur de mots de passe avec secrets plutôt que random

Ici, le choix du module compte. La documentation de random avertit que ses générateurs ne doivent pas servir à la sécurité et renvoie vers secrets. La documentation de secrets en donne la raison : random est conçu pour la modélisation et la simulation, pas pour la sécurité ni la cryptographie, alors que secrets produit des valeurs cryptographiquement fortes pour les mots de passe, les jetons et les données du même genre. Le module fait partie de Python depuis la version 3.6.

La réalisation suit la recette de cette page. Assemblez string.ascii_letters et string.digits en un alphabet, tirez des caractères avec secrets.choice dans une boucle et joignez-les en mot de passe. La documentation montre ensuite une version plus stricte qui régénère un mot de passe de dix caractères jusqu’à ce qu’il contienne au moins une minuscule, une majuscule et trois chiffres. Défi supplémentaire : choisir la longueur, ajouter string.punctuation et afficher plusieurs candidats.

Liste de tâches, suivi de dépenses et carnet de contacts qui sauvegardent dans des fichiers

Une liste de tâches dans un fichier texte entraîne l’ouverture, la lecture et l’écriture. Le tutoriel recommande l’instruction with pour les fichiers, car le fichier est correctement fermé même en cas d’exception, et il détaille les modes : r lit, a ajoute à la fin et w efface un fichier existant du même nom. L’erreur habituelle : ouvrir la liste en mode w pour ajouter une tâche efface les autres. Défi supplémentaire : numéroter et supprimer par numéro.

Le suivi de dépenses écrit date, catégorie et montant dans un fichier CSV et affiche un total par catégorie. La documentation de csv demande d’ouvrir les fichiers avec newline égal à une chaîne vide ; sans cela, les sauts de ligne à l’intérieur de champs entre guillemets sont mal lus et, sur les plateformes qui terminent les lignes par un retour chariot et un saut de ligne, un retour chariot en trop est écrit. Utilisez DictWriter, dont l’argument fieldnames n’est pas facultatif, et appelez writeheader une seule fois. Comme le chapitre du tutoriel sur les nombres à virgule flottante oriente la comptabilité vers le module decimal, employez Decimal pour les montants en défi supplémentaire.

Le carnet de contacts range les personnes dans un dictionnaire et le sauvegarde avec json.dump, indent servant à la lisibilité. La documentation de json prévient que chaque clé devient une chaîne à l’écriture : un dictionnaire à clés numériques ne revient donc pas identique à l’original. Elle échappe aussi par défaut les lettres non ASCII, si bien que des noms comme José ne restent lisibles qu’avec ensure_ascii réglé sur False. Transformer chaque contact en classe dotée de ses propres méthodes est le défi supplémentaire.

Un renommeur de fichiers avec pathlib et les habitudes qui tiennent un projet

Le renommeur de fichiers donne à un dossier de photos ou de scans des noms comme holiday-001.jpg. Il s’appuie sur pathlib : Path.iterdir liste le dossier, Path.suffix donne l’extension, with_suffix ou with_name construisent le nom. La documentation de pathlib avertit que iterdir et glob renvoient les fichiers dans un ordre arbitraire, il faut donc les trier avant de numéroter. Elle précise que rename remplace sans prévenir un fichier existant sous Unix, mais lève FileExistsError sous Windows. Lancez chaque version sur une copie du dossier, avec un mode à blanc qui se contente d’afficher les noms prévus.

Quelques habitudes de la PEP 8, le guide de style de Python, valent d’être prises dès le premier projet : quatre espaces par niveau d’indentation, des lignes de 79 caractères au plus, des noms de fonctions et de variables en minuscules avec des tirets bas, des classes en CapWords et les imports en tête de fichier. Raison : le code est lu bien plus souvent qu’il n’est écrit. La page __main__ de la documentation ajoute une habitude : placer le programme dans une fonction main et l’appeler sous le test if __name__, pour que le fichier puisse être importé sans s’exécuter.

Aucun de ces projets n’exige de paquet tiers. Quand il en faut un, la documentation de venv décrit comment créer un environnement dans le dossier du projet avec python -m venv .venv, l’activer et le tenir hors du contrôle de version, en notant les paquets dans requirements.txt. Publier les projets terminés sur GitHub entraîne aux commits et aux readme ; GitHub Docs explique qu’un fichier .gitignore à la racine du dépôt indique à Git ce qu’il doit ignorer, et que GitHub tient une liste publique de modèles recommandés.

Ce qu’il faut pratiquer seul et ce qu’ajoute le cours Python gratuit

Seul, cette semaine, prenez un projet dans chacun des trois premiers groupes et terminez-les dans l’ordre, une soirée chacun. Lisez chaque trace d’erreur depuis la dernière ligne avant de la chercher en ligne et notez chaque correction. Le Guide du débutant du wiki Python renvoie vers d’autres petits programmes d’exemple du même niveau.

Un cours structuré apporte de l’ordre et de la vérification. Le cours Python gratuit de VITON13 SCHOOL compte 16 leçons qui s’exécutent dans le navigateur, sans rien installer : premier programme, variables, nombres, chaînes et f-strings, if et elif, listes, boucles for et while, fonctions, dictionnaires, tuples et ensembles, compréhensions de listes, try et except, classes, modules et un projet final de statistiques de texte. Chaque leçon donne un exemple, demande d’écrire du code, affiche le résultat et vérifie l’exercice. Ces leçons couvrent les idées des trois premiers groupes de projets python pour débutants, et le projet final reprend l’idée du compteur de mots ; les fichiers viennent des projets et de la documentation.

Checklist pratique

  • Écrivez en trois phrases la plus petite version qui fonctionne de votre projet avant d’ouvrir l’éditeur.
  • Entourez chaque appel à int(input()) d’un bloc try avec une branche except ValueError qui redemande.
  • Employez secrets.choice, jamais random, pour tout ce qui servira de mot de passe ou de jeton.
  • Ouvrez les CSV avec newline égal à une chaîne vide et n’ouvrez jamais en mode w une liste à laquelle vous ajoutez.
  • Copiez le dossier avant de lancer un renommeur et faites d’abord un essai à blanc qui n’affiche que les nouveaux noms.

Questions et réponses

Quel devrait être mon premier projet en Python ?

Un jeu du nombre mystère. Il ne demande que input, int, if, une boucle while et une fonction du module random, il tient en une soirée, et son vrai piège, un mot tapé là où un nombre était attendu, apprend try et except et la lecture d’une trace d’erreur.

Ces projets sont-ils difficiles pour un débutant complet en Python ?

Le premier groupe ne demande que les bases des premiers chapitres du tutoriel officiel. La difficulté croît à chaque groupe, car chacun ajoute une seule idée nouvelle : en les terminant dans l’ordre, on ne rencontre jamais deux choses inconnues dans le même programme.

Quels exercices Python de départ sont les plus utiles ensuite ?

Le suivi de dépenses et le renommeur de fichiers. L’un donne un fichier CSV qu’on ouvre dans un tableur ; l’autre range de vrais dossiers de photos ou de scans. Les deux valent d’être gardés, à condition que le renommeur soit essayé sur des copies et dispose d’un mode à blanc.

Faut-il installer des paquets ou créer un environnement virtuel pour ces projets ?

Non. Les treize n’emploient que la bibliothèque standard fournie avec Python. Un environnement virtuel devient utile le jour où un projet exige un paquet tiers ; la documentation de venv explique comment le créer dans le dossier du projet et le tenir hors de Git.

Pourquoi mon générateur de mots de passe Python a-t-il besoin du module secrets ?

Parce que la documentation de Python indique que le module random est conçu pour la modélisation et la simulation et ne doit pas servir à la sécurité. Le module secrets produit des choix cryptographiquement forts et sa documentation contient une recette toute prête de mot de passe alphanumérique.