Quels exercices pour débutants en Python ?


Quand quelqu’un commence à programmer avec Python, il faut lui apprendre les bases : les conditions, les boucles, les listes, les dicos, les fichiers, les fonctions, les classes et tout le bordel.

Pour que ça rentre, et pour identifier les points à consolider, les exercices sont indispensables.

Malheureusement un bon exercice est très dur à construire :

  • Il faut qu’il soit suffisamment intéressant pour garder l’élève en éveil. Découvrir quelque chose, faire un truc qui paraisse un peu utile, etc.
  • Mais il ne faut pas mélanger trop de notions nouvelles à la fois (et donc on est limité par ce que l’élève sait).
  • Si possible, il est bon d’éviter de se répéter. Or quand on travaille sur des notions connexes (ex: liste et boucle for) ou qu’on fait un autre exo sur le même thème, c’est chaud.

Il y a des grands classiques :

  • Le jeu “deviner un nombre”
  • Le master mind
  • La todo list
  • Calculer le nombre de fois qu’apparait chaque mot dans dans un texte.
  • Parcourir tout un tas de fichiers et en trouver un avec une caractéristique particulière.
  • Déplacer ses fichiers récursivement pour les organiser selon une hiérarchie nom/dossier.
  • Lire une page web et en extraire une partie.
  • Parcourir son historique Web Chrome/Firefox et trouver les 5 sites les plus visités.

Certains ne sont plus possibles : parcourir l’API tweeter par exemple est devenu beaucoup trop compliqué alors qu’avant c’était un truc super fun à faire faire.

D’autres sont vachement plus faciles : s’envoyer un sms d’alerte si il va pleuvoir aujourd’hui est un jeu d’enfant si on est chez free qui a une URL pour ça.

Est-ce que vous avez des exos sympas à proposer ? Je cherche l’inspiration.

Si vous postez un exo, merci d’y joindre les notions testées et les pré-requis ainsi que, si nécessaire, le public visé.

40 thoughts on “Quels exercices pour débutants en Python ?

  • NosCandidats

    Du web scrapping en Pyton est un excellent moment d’apprendre Python par l’exercice pour un développeur ayant déjà fait du web.

  • Sam Post author

    Si on touche les web dev ayant déjà fait du web, le panel d’exercices possibles est beaucoup plus large et fun. Mais pour apprendre les set à un débutant forcément, c’est plus restraint.

  • Romain

    J’aime assez le principe des katas mais ils vont peut-être plus convenir à des gens qui maîtrisent un autre langage. Cela permet sur un problème simple et connu de comparer les idiomes d’un langage à un autre.

    http://cyber-dojo.org/

  • Sam Post author

    Ce que je reproche à toutes ces sources d’exo, c’est qu’ils sont académiques. Ce sont des exercices pour écrire du code, pas pour résoudre un problème.

    Pire, parfois ils supposent certaines connaissances dans des domaines qui n’ont rien à voir. Par exemple :

    Problem

    Given: Two positive integers a and b, each less than 1000.

    Return: The integer corresponding to the square of the hypotenuse of the right triangle whose legs have lengths a and b.

    J’enseigne en ce moment Python à une chanteuse. Je vous garanti que Pythagore, elle sait plus du tout ce que c’est.

    J’aime bien par contre l’exemple du répertoire téléphonique pour les dicos, je vais le réutiliser. C’est pas mal car on peut itérer : mettre de la persistence, faire de la recherche, du tri, etc.

    Celui du pourboire de code academy est sympas aussi. Simple et parlant. Mais encore une fois il suppose que qu’on sait calculer les %, et je si la personne ne connait pas, ben faut expliquer ça aussi. Après si une règle de 3 ça rentre pas, on pourra pas apprendre beaucoup de prog, alors c’est sur que je chipote.

    Le coup du code pyg latin est sympas, mais je crois que je préférerais faire un exercice sur le code caesar.

    Merci pour les suggestions en tout cas.

  • laule

    Quelques pistes :

    Bot irc ou un chatterbot
    Un jeu de black jack
    Afficheur de VDM (bon ok c’est dans ‘Lire une page web et en extraire une partie’)
    Un générateur de phrases wtf
    Associer des musiques à des couleurs (en se basant sur le SHA1 par exemple)
    Ascii art (dessiner un zizi)
    Un mini rpg
    Gestionnaire de favoris

  • buffalo974

    * FLASK-CITY *

    notions testées : web développement python, faire un mini serveur raspberry.

    pré-requis : bases de la POO, un doigt de HTML, et un poil de javascript +- bdd SQL.

    le public visé : débutants-intermédiaires

    intérêt : faire un jeu sans véritable GUI ( ça change de pygame qu’on voit partout)

    Une page HTML affiche au centre de l’écran, des images de terrains vierges

    (disons 5×5 faisant 40px sur 30 px).Sous le terrain, un mouse over permet de dérouler une liste de bâtiments à construire ainsi que le prix et la conso électrique.

    A gauche de l’écran, votre budget et votre conso/production d’électricité,conso/production de nourriture, etc. ainsi que votre population active/totale.

    Les images sont des jpg chopées sur internet, les sons proviennent d’une banque de mp3 libres.

    Le jeu décrit ici est une ébauche, et un beau prétexte pour bosser sérieusement;

    mais il pourrait servir à illustrer de très nombreux mécanismes importants de façon ludique.

    Il pourrait bénéficier de vagues successives d’ amélioration : pour intéresser les

    seniors du python, ainsi que les joueurs non codeurs.

    Si le projet marche, on pourrait faire que votre ville est dans une région.Lorsqu’un nouveau joueur humain s’inscrit,il apparaît sur une région adjacente à un joueur déjà existant afin de développer un commerce, ou une guerre.

    J’aimerai beaucoup voir du crossbar et du autobahn ici. En effet, je crois que je viens de comprendre l’ intérêt de l’ asynchrone.

    sinon j’ai un projet depuis un moment, qui s’ appelle Pythoria:

    c’est un rogue-like prevu pour tourner avec pygcurse, mais y’a encore beaucoup de travail, faut que je m’y remette à fond, et que je corrige BEAUCOUP de choses.

    C’est avec ce projet perso que j’ai le plus appris en python.

    Je partagerai quand il sera partageable.

  • Sam Post author

    Oula, c’est trop gros comme exo ça. Faut des petits bouts pour faire passer les premières notions.

  • ashgan

    un 1er exercice vu dans un cours de debutants chez coursera consistait a implementer un jeu de ‘pierre feuille ciseaux’.

    une copie de l’ennoncé est lisible par exemple ici: http://blog.csdn.net/caozhk/article/details/12751317.

    au menu: quelques fonctions, des comparaisons, du modulo, des input/output, des conditions…

    bref, de quoi occupper quelques heures les etudiants qui débarquent.

    un 2eme etait un “guess the number”, 1er nommé dans l’article.

    celui la est fourni en standard dans tous les cours juste apres le “hello world”, non?

    je vais m’arreter la, je vais pas piller les mooc python :D

  • Sam Post author

    Oh, pierre / papier / ciseau, quelle bonne idée !

    On peut commencer par une version avec que des if, puis une version avec une liste, puis une version avec une boucle while pour trouver qui est le premier à 3 victoires, puis une avec une boucle for pour afficher tous les résultats, puis une version avec des stats dans un dico, puis une version avec des stats persistentes. C’est vraiment top.

  • GVA

    Perso j’ai beaucoup aimé le bouquin “Python for kids” quand j’ai voulu apprendre Python, qui était mon premier langage. Quelques exercices reviennent régulièrement, enrichis pour aller plus loin: l’histoire d’une machine à répliquer des pièces d’or, où on peut faire un nombre de copie max par jour, puis arrive une maj de la machine qui permet de prendre en compte le total de la veille, puis d’un oiseau qui pique quelques pièces par jour; ou une autre histoire où on doit faire “danser” des animaux pour comprendre le concept des classes et objets.

    J’étais réticent au début d’utiliser un tel bouquin n’ayant plus 20 ans, et je me suis finalement surpris à me prendre au jeu. Ca changeais des exos qu’on peut trouver ailleurs et dont je me souviens beaucoup moins voire pas du tout. Ou alors c’est le fait qu’on me parlait comme à un gamin de 6 ans.

  • ashgan

    j’y penses apres la bataille, mais dans les sites ludiques pour pythonistes, y’a aussi http://www.codingame.com qui peut avoir 2-3 exercices sympa, comme afficher du texte en ascii art, ou bien plus avance, un space invader.

  • Krilivye

    http://learnpythonthehardway.org/book/

    C’est simple, didactique et pour les grands débutants avec des exos “ciblé” et y’as “hard” dedans… :)

    Quelques exos simples:

    http://codingbat.com/python

    Sinon des classiques:

    -démineur,

    -jeu du pendu

    -Algo de tri (simple à expliqué :) ) http://www.sorting-algorithms.com/ , parfait pour introduire la notion de perf.

    -Afficher la structure d’un répertoire ala “tree”.

    -FizzBuzz!

    -Afficher une table de multiplication

    -Faire des Carré / Rectangle / Triangle / Losange en ASCII (et de taille variable, plein ou creux!)

    -Un shi-fu-mi!

    Plus dur:

    Récuperer la météo sur openweather:

    http://openweathermap.org/current

    Taper dans des donnés «Open data» type fichier excel, csv:

    http://opendata.paris.fr/page/home/

    Sinon y’as https://www.publicapis.com/ qui donne de quoi taper sur des services :)

    Plus dur:

    Faire une interface à GTP : Go Text Protocol, testé avec des BTS en deuxième année en TP.

    http://www.lysator.liu.se/~gunnar/gtp/gtp2-spec-draft2/gtp2-spec.html

    En gros dix commandes à implémenter pour faire tourner un jeu en mode texte.

    Dont 3 “rapide” à mettre en place: Demander un plateau, jouer, demander a GNUGo de jouer.

    La seconde étape étant de coller une GUI a tout ça :). Pas de moteur, “juste” une interface avec des commandes.

  • Sam Post author

    Les gros jeux, les puzzles, les enigmes, il faut oublier. Ca ne s’inscrit pas bien dans une formation. C’est bien pour les curieux, mais pedagogiquement, ça ne peut être qu’un complément pour certains types de profile, pas les exos de base.

    Pas contre le coup de la météo sur open weather et open data, c’est une super idée.

  • apeyrard

    J’ai été devancé, mais je plussoie http://www.codingame.com/

    C’est ludique, on peut imaginer que ce genre de problème peut avoir des applications, et les exercices de la rubrique facile sont très adaptés aux débutants. En plus, il y a pas que python mais plein d’autres langages.

  • Thierry

    Post très intéressant. Il y a également les ebooks gratuits Invent with Python qui proposent des mini-projets intéressants. J’ai bien aimé Python for Kids, mais c’est vrai que je coach surtout des 8-16 ans. Il y a également pas mal de choses sympa à faire avec un Raspberry Pi. J’ai quelques notes à ce sujet mais je dois fouiller un peu. Avec mes meilleures salutations, Thierry

  • vazywilly

    en tant que mega debutant j’ai enormement appris sur checkio au debut

  • Miki

    Bonjour à tous,

    Ce sujet m’intéresse énormément, car cela fait un moment que je souhaite me mettre au python. Ne me taclez pas, le seul code que je sais pondre est du VBA… (par contre, je m’amuse bien le modèle objet des différentes applications d’Office).

    Bref, je ne suis pas du tout un développeur, mais j’ai quelques (toutes petites) notions en programmation qui font que je suis ce blog . Je ne comprends vraiment pas tout, mais j’arrive à apprécier quelques subtilités, même si je ne les mets pas en œuvre.

    Le python m’attire beaucoup depuis quelques temps, mais je ne sais pas du tout par quel bout prendre l’animal…

    Aujourd’hui, j’aimerai bien arriver à faire la même chose que je sais faire en VBA, c’est-à-dire interagir avec une base de données (via des formulaires ou autre), générer des documents à partir des données de la BDD (sorte de publipostage), et générer des rapports (analyses, graphiques) à partir de ces mêmes données. Pourquoi pas envoyer des mails aussi…

    C’est vrai que cela peut paraitre tout bête pour certains, mais ce genre d’exercice me serait très utile pour découvrir le python et enfin basculer sur de la vrai programmation. Si ça plait, je peux approfondir le sujet et proposer un cas d’application plus concret, avec la BDD et quelques données pipo et des specs sur le résultat attendu.

    A+

    • Sam Post author

      En auto formation, les services de gamifications ont vachement plus de valeur qu’avec un formateur. Lis tous les commentaires et test les trucs genre code academy, checkio et coding game, c’est vraiment bien foutu.

  • Sam Post author

    Autant j’ai aimé le bouquin pour son côté abordable, autant certains exemples ne m’ont pas plus. Par exemple le coup des electrons pour expliquer la hiérarchie des classes, meh.

    Par contre, c’est vrai qu’un bon raspi ça pourrait être pas mal quand même pour enseigner. Je vais peut être investir dans une collection pour mes formations, avec quelques senseurs et tout le bordel.

  • Nattefrost

    Salut, premier post ici alors que je lis depuis +- 1an, l’émotion me submerge.

    J’étais tombé sur une liste d’idées de projets, y a des choses plus ou moins avancées mais c’est regroupé par catégorie “numbers” , “strings” ou encore “files” jusqu’à faire de vrais programmes.

    http://www.dreamincode.net/forums/topic/78802-martyr2s-mega-project-ideas-list/

    J’en ai fait quelque-uns dont un soft pour faire des archives .tar (avec une interface tkinter) ou un générateur de personnages pour JDR papier.

    Dans l’optique de Sam c’est peut-être trop avancé mais il y a aussi des choses simples du genre détecter des palyndromes dans une string, compter le nombre de mots dans une string. Un petit gestionnaire de passwords en générant les strings aléatoirement.

    Bref y a des idées à prendre.

  • jean Cule

    Je vois pas mal de coding game proposés.

    Je dévie un peu du sujet:

    Quelqu’un connais un coding game pour prendre du skill en IA ? Pas des trucs à la RoboCode qui demandes déjà de s’y connaître, mais des trucs pour apprendre ?

  • Zanguu

    Pour du perso/coding-game il y a Code Combat qui est pas mal.

    Le premier monde c’est surtout de l’instruction en chaine (va à droite, en haut, à droite, tape… etc) mais petit à petit ils intègrent boucles, conditions et variables. La suite je sais pas ma pause déj était finie =D

    @sam, sur le shifumi tu as aussi l’option de partir sur un “classique” puis de le transformer en Pierre-Papier-Ciseaux-Lézard-Spock obligeant doublant les conditions de victoire et de défaite de chaque “attaque”.

    Voir plus si on veux vraiment pousser le truc (par contre pour les jouer “en vrai” ceux là il faut une sacré mémoire)

  • kontre

    @Zanguu C’est rigolo code combat, mais c’est quoi ce “loop:” qu’ils rajoutent à python ? Toutes les notions ne sont pas introduites alors que ça commence vraiment lentement au début, c’est dommage. Et l’interface bug un peu. Mais coder une mini IA pour trucider des orcs, j’aime bien !

    @doublePenetration Bah, c’est juste du bruteforce avec 3 boucles for imbriquées, c’est tout ! :)

  • Zanguu

    @doublePrenetration

    Ca depend à quel point il veut le détail de l’algo (et parce que mon cerveau est déjà en weekend) mais en gros

    Recuperer les inputs

    Pour chaque position possible:

    – compter le nombres d’arbres présents

    – si c’est le plus peuplé jusqu’à maintenant, le mettre de coté

    retourner la position mise de coté.

    et en python ça doit se faire à base de set imbriqué et de slices.

    Mais j’avoue que à froid en entretient j’aurais bafouillé.

    @kontre, surement pour simplifier avant de mettre des conditions et pour pas sortir un while true TGCM

  • recher

    Idées en vrac :

    *) diviseur

    L’utilisateur saisit deux nombres.

    Le programme renvoie la division, avec le détail des étapes comme on apprenait à le faire à l’école primaire. Le tout présenté comme il faut.

    Tiens au fait, qui saurait encore faire une division à la main ?

    *) résolveur de match-3

    En entrée : un tableau de nombres, correspondant à une aire de jeu de match-3.

    Le programme doit détecter les éléments censés disparaître, et le type de match associé : ligne de 3, ligne de 4, croix, angle, …

    Si le programme détecte deux lignes de 3 là où il devrait détecter une croix, ce n’est pas acceptable.

    *) équilibreur d’équations-bilans pour les cours de chimie

    L’utilisateur saisit :

    “Cu + O2 -> Cu2O”

    Le programme répond :

    “4 Cu + O2 -> 2 Cu2O”

    Avec un algo en brute force, ou un truc un peu plus intelligent (graphe de dépendance ou un truc du genre).

    *) mini-moteur physique

    Une planète et un satellite avec des masses définies. Une position et une vitesse initiale pour le satellite.

    Simulation des forces, de l’accélération, de la vitesse, etc. Le satellite est censé tourner autour de la planète.

    Avec éventuellement un affichage graphique. Mais si ça renvoit juste une liste de position, c’est bien aussi.

    *) auto-Rrrrrr !!!

    Le programme détermine la position géographique de l’ordinateur (géoloc / récupération de la timezone / saisie utilisateur).

    Tous les jours, il récupère l’heure à laquelle le soleil se couche, en interrogeant un site internet fait pour ça, ou à l’aide de données en dur.

    Il envoie un mail / sms / tweet à ce moment là, indiquant “ça va être tout noir”.

    Le programme reste en tâche de fond, et idéalement, il agit uniquement au bon moment, et non pas toutes les minutes pour checker si c’est le bon moment d’agir.

    *) auto-démineur

    L’utilisateur lance le démineur de Windows, puis il lance le programme, qui effectue les actions suivantes :

    – copie d’écran, puis analyse de l’image récupérée pour déterminer la position de la fenêtre du démineur.

    – simulation d’un clic au bon endroit pour démarrer une partie.

    – jouage automatique au démineur (copie d’écran, récupération des chiffres affichés, déduction de la grille, clic sur une case safe, et ainsi de suite)

    *) l’application mobile pochtronScheduler

    Chaque fois que l’utilisateur boit un verre, il clique sur le bouton de l’app. (On suppose qu’il boit des doses standard de bar).

    L’app indique la concentration actuelle d’alcool dans le sang, en fonction des verres bus et des moments de buvage.

    Elle émet un son lorsque la concentration descend sous le minimum légal pour conduire.

  • ashgan

    @recher

    t’as oublié la contrepartie obligatoire de ton auto-Rrrrrr: a la reception du message, il faut un script qui reponde “ta gueule!!” via le meme canal :D

  • Morkav

    Je ne l’ai pas encore vu mentionné mais dans le style pierre-feuille-ciseau, tu peux faire un touché coulé.

    Pour le faire plus simple, tu peux commencé par du 1D, avec une IA qui prend des cases au hasard.

    Notions testées:

    – Objets (pour les différents types de bateaux) – tu peux pousser jusqu’à forcer l’utilisation d’un pattern; singleton par ex pour limiter les nombres de créations d’objet, c’est un peu overkill mais en général, c’est pas facile de comprendre les patterns et la ca me semble pas mal ..

    – affichage (plateau peut etre fait en . si y a un bateau, – si c’est touché, * si c’est non touché… Puis partir sur un truc plus complexe

    – dico ou autre systeme pour garder les scores

    – IA (genre si il a touché qu’il reste dans le coin etc..)

  • Thierry Chappuis

    En fait, cela dépend beaucoup de si on donne un cours à une classe ou si on donne un enseignement personnalisé. Beaucoup de ces sites pour apprendre à programmer propose de réaliser des jeux. Si l’apprenant est adulte, un bon exercice est parfois d’essayer d’automatiser des tâches ennuyeuses de la vie quotidienne comme parcourir un système de fichiers et renommer les photos selon les données EXIF ou

  • dineptus

    2048 est un peu plus avancé qu’un shifumi évidemment mais permet de toucher pas mal de notions, et ce n’est pas non plus hyper long pour un niveau intermédiaire on va dire.

    En débutant j’avais fais une fois un simulateur de système de ponzi :

    – disons que chaque personne donne 1 000€

    – pour chaque année, tu entres le nombre de personnes que tu recrutes, et ça calcule le taux de rendement de ton fond si tu reverses les fonds récoltés aux anciens (le principe de Ponzi quoi :p). Si le nombre ne suffit pas à payer un bon rendement aux anciens (des années 0 à n-1 donc), tu as perdu (évidemment c’est exponentiel donc il faut très vite recruter plein de monde).

    C’est tout con mais in touche déjà à des opérations classiques. Bon par contre il y a des % à calculer c’est clair

    Un simulateur de blackjack aussi c’est cool (que des propositions morales n’est-ce pas ?). Il faut coder le paquet de carte avec les valeurs associées (mais c’est assez simple), simuler ensuite le tirage de carte, la valeur du tirage, les différentes possibilités pou le joueur et la banque. On peut aussi faire un compteur de l’argent dépense / gagné / perdu, des montants minimaux/maximaux, un moment ou les videurs viennent te chercher parce que tu as un peu exagéré, et même des cheat codes pour des demoiselles de compagnies en ASCII !

    Pour toucher aux API tu peux faire un script qui génère automatiquement des réunions avec des titres aléatoires quand il fera beau selon la météo (afin d’avoir une excuse pour glander), ou alors un script qui commande automatique tes courses pour le jeudi soir quand tu sors, en fonction d’un stock de divers items que tu mets à jour (hum).

    S’il y a des objets connectés et un détecteur de présence, un script pour lancer automatiquement l’arrosage et une petite musique de compagnie quand un passant est détecté entre 10h et 11h30 pour dire bonjour au facteur.

    Désolé j’ai du mal à avoir des idées sérieuses, elles ont pour beaucoup déjà été faites te en plus c’est souvent chiant à faire.

  • christophe

    Merci pour l’info sur la possibilité d’envoyer un SMS au moyen de l’API free (déjà mis en application pour savoir si la connexion Internet que j’utilise pendant mes vacances fonctionne bien; histoire d’être sûr de pouvoir en disposer en arrivant).

  • Astragon

    Il y a aussi les concours organisés par Isograd, c’est en général une suite de 5 challenges à programmer, à la difficulté croissante.

    Il y a les années bissextiles, le traitement de num de tél, la notation polonaise,, des jeux de géométrie…

    Les énoncés et solutions sont publiés sur leur site : http://www.isograd.com/FR/solutionconcours.php?contest_id=X avec X entre 2 et 10 à ce jour.

    • Thierry

      Merci pour le lien, je ne connaissais pas ! Avec mes meilleures salutations

      Thierry

  • jerry1pige

    Un petit mot .. merci pour le blog que je viens de découvrir et cet humour décalé ..

    Le meilleur exercice du monde est celui que l’étudiant VOUDRA résoudre à tout prix.

    Les meilleurs apprentissages viennent du ventre qui se noue car vous n’arrivez pas a vos fins ..

    1 doze de drogue peut faire Einstein d’une blonde ..

    Le prof de ouf c’est celui qui tient l’étudiant par les tripes ..

    Tout est aussi question de psychologie.

    Genre d’exercise pour le COM / DCOM : faire un programme qui trouve le password d’une feuille Excel :-)

    Faire un démineur en Tk

    Bon c’est compliqué … pour mon gamin je lui ai proposé de faire un outil en ligne de commande demandant la traduction en anglais d’un mot français et inversement… ce qui donne des points quand la réponse est bonne

    Le jeu ? avoir plus de points que sa mère ou ses frères. et il l’a fait pour le latin et l’allemand ….

    Il a beaucoup plus appris comme cela …

Comments are closed.

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.