Jour 1
Bien commencer avec Python
Pourquoi utiliser Python plutôt qu'un autre langage ?
Exemples de projet en Python
Différences entre les versions de Python
Installation de Python (pré-requis, fichiers, arborescence détaillée)
Fonctionnement de l'interpréteur Python
Les apports de l'interpréteur interactif iPython
Un premier programme...Travaux pratiquesObjectif : Prendre en main rapidement son environnement de développement
Description : Premier programme simple interactif de saisie et d’affichage de texte afin de prendre en main l'interpréteur Python. Passage en script du programme interactif précédent.Les bases de Python (la syntaxe, les types)
Organisation du code (modules, package, importations)
Recommandations de nommage
Les types de base (entier, chaîne, réel, ...)
Erreurs classiques sur les types
Boucles (for), opérateurs, tests (if/else)
Définition et appel de fonction
Introduction à la syntaxe conditionnelle avec match/caseTravaux pratiquesObjectif : Mettre en œuvre la syntaxe fondamentale de Python
Description : Écriture d’un script permettant de charger un fichier CSV contenant des transactions bancaires (date, libellé, montant, catégorie). Affichage simple des totaux (dépenses, revenus, solde) en s’appuyant sur la syntaxe de base (boucles, conditions, …) et les fonctions de base.Jour 2Programmer objet en Python
Limites de la programmation « simplement » structurée
Philosophie, concepts, et vocabulaire de la programmation objet
Représentation des données en programmation objet (classes, propriétés)
Représentation des traitements (méthodes)
Contrôler l’accès aux données (encapsulation)
Exemples de classes prédéfinies en Python permettant de profiter pleinement de l’approche objet
Cycle de vie d’un objet (constructeur, destructeur)
Accéder aux attributs et fonctionnalités de l’objet cible (self)
Comment les objets communiquent entre eux ?
Classe mère et classe fille (héritage)Travaux pratiquesObjectif : Savoir programmer objet en Python. Comprendre les liens entre les classes.
Description : Structuration objet de notre projet fil rouge, conception et implémentations des classes TRANSACTION, CLIENT, PORTEFEUILLE. Implémentation des méthodes de filtrage, de tri, et de calculs.Des fonctions différentes avec … le même nom (polymorphisme)
Héritage simple et héritage multiple
La fonction super()
Protection des traitements (public, protected, private)
Le mécanisme de traitement des exceptions
Exemple de formalisme UML (diagramme de classe)
Tour d’horizon des classes fondamentales existantes en Python
Notion de Design PatternsTravaux pratiquesObjectifs : Comprendre quand utiliser l’héritage, le polymorphisme et la composition dans notre conception d’application Python
Description : On enrichit le cahier des charges de notre application pour faire apparaitre de nouveaux besoins qui amènent à faire des choix d’héritage, de polymorphisme, etc. avec par exemple une classe TransactionRécurrente qui hérite de Transaction et des concepts de validation de transaction (source, auteur, est_validée par, …)Types de données évolués
Savoir choisir les bonnes structures de données
Tuples, séquences et listes (append, extend, insert, ...)
Fonctions utiles avec les listes (filter, map, reduce)
Gestion des piles ou des files
La puissance des dictionnaires (tableaux associatifs)
Construire une liste sur la base d'une expression (compréhension)Travaux pratiquesObjectif : Savoir utiliser les listes en Python
Description : On reprend notre fichier CSV contenant des transactions bancaires (date, libellé, montant, catégorie) et on le stocke dans un tuple pour figer les valeurs. On ajoute ensuite ces tuples à une liste de transactions que l’on analyse avec map, filter, et reduce pour ne garder que des transactions supérieures à un certain montant et les convertir en dollars. Ensuite reduce permet de calculer le total global dépenses. On créé ensuite une liste des catégories où les dépenses dépassent 1000€ et une pile pour simuler une liste d’actions utilisateurs pour annuler les dernières opérations.Jour 3Compléments sur le langage Python
Générateurs et itérateurs
Scripts exécutables
Opérateurs associés aux listes
Enchaînement de tests par rapport aux listes
Comparer les séquencesTravaux pratiquesObjectif : Savoir utiliser les itérateurs
Description : Création d’une classe portefeuille avec itérateur. Elle contient une liste de transactions et permet d’itérer sur les transactions par date croissante.Les modules de Python
Philosophie de Python avec les modules (standard, tiers, ...)
Tour d'horizon des modules standards
Module re (expressions rationnelles)
Modules os et sys (services du système d'exploitation)
Module csv (fichiers structurés par séparateur)
Comment trouver les modules ?
Installer des modules tiers (setuptools, EasyInstall)
Le dépôt central : Python Package index (Pypi)
Importer des modules
Mieux gérer son environnement avec venv, pipx, poetry ou pip-toolsTravaux pratiquesObjectif : Savoir structurer son application en modules pour la rendre plus lisible et facile à maintenir
Description : On crée un module pour nos classes (le modèle des données), un module pour les services offerts (filtrage, calculs, résumé, etc.), un module dédié aux entrées/sorties (chargement/sauvegarde de notre CSV dans notre projet). On utilise bien sûr des modules standards comme CSV ou RE (filtrages des données avec les expressions régulières) pour montrer comment les modules existants cohabitent avec nos propres modules.Jour 4Gestion des données (Fichiers, SGBD, XML, JSON, API)
Accéder aux fichiers (objet File)
Conformité des modules Python pour accéder à une base de données (DB-API
Python et requêtes SQL, ORM avec SQLAlchem
Filtrer les données grâce aux expressions régulière (RE)
Présentation de la manipulation de flux XMl en Python (ElementTree)
Manipuler des fichiers CSVTravaux pratiquesObjectif : Connexion à une base de données pour extraire ou sauvegarder des données
Description : Notre application évolue et on abandonne notre CSV pour dialoguer avec une base de données (MySQL ou PostgreSQL). On complète donc l’exercice précédent en construisant une classe TransactionDao dans notre module dédié aux entrées sorties, qui permet toutes les actions standards sur la table Transaction (insérer, mettre à jour, supprimer, lister, rechercher).Échange de données via API et formats standards
Le format JSON : encodage/décodage, gestion de structures complexe
Sérialisation avec dataclasses et pydanti
Principe des API et des Web Service
Requêtes HTTP avec requests (GET, POST, headers, paramètres
Récupérer des données via des API externe
Traitement et validation des données reçues (modèles Pydantic, typage fort, gestion des erreurs)Travaux pratiquesObjectif : Consommer une API REST dans un programme Python et intégrer « proprement » les données dans son application.
Description : On cherche à actualiser en temps réel notre application avec des actualités économiques. Pour cela on va appeler une API publique qui nous retourne un taux de change au format JSON. On définit un modèle de validation avec Pydantic et on créé 2 classes TauxChange et Reponse API. Affichage ou traitement des données dans le terminal ou via un petit script CLI. Bonus : exporter les résultats vers un fichier CSV ou JSON local.Jour 5Création d’interface graphique
Spécificités du développement d’interface graphique (programmation événementielle)
Présentation de la bibliothèque TkInter.
Les principaux conteneurs.
Présentation des widgets disponibles (Button, Radiobutton, Entry, Label, Listbox, Canvas, Menu, Scrollbar, Text...).
Le gestionnaire de fenêtres.
Le placement des composants, les différents layouts.
La gestion des événements, l'objet event.
Les applications multifenêtres.
Un petit mot sur la bibliothèque Qt
Les autres librairies d’IHM (PyQt, PySide, ..) les IHM web (flask/streamlit)Travaux pratiquesObjectif : Mettre en œuvre une IHM en Python avec TkInter
Description : Développement d’une maquette pour compléter l’atelier précédent sous forme graphique (menu, boîtes de dialogue, liste, boutons, …) afin de proposer une interface pour la saisie des actions de manipulations des données et l’affichage des résultatsQualité et outils
En quoi consiste l’assurance qualité d’un programme Python (QA) ?
Vue d’ensemble de la « trousse à outils » proposée au développeur
Utiliser les plugins des IDEs IntelliJ ou VSCode
Rechercher des bugs avec PyChecker
Vérifier le respect des standards avec PyLint
Utiliser le guide de style PEP 8 (Python Enhancement Proposals)
Générer de la documentation
Disposer de statistiques sur l’exécution de son programme (profiling)
Comprendre l'intérêt des outils de Tests (Doctests, Unit tests)Travaux pratiquesObjectif : Bien comprendre le champ fonctionnel de chaque outil présenté dans ce chapitre et savoir les utiliser
Description : Audit de code Python ne respectant pas les standards professionnels en termes de lisibilité. Bonnes pratiques dans le déboguage d’un programme. Mise en œuvre de tests unitaires simples dans le cadre de notre projet fil rouge. Génération de documentation. Repérage des parties consommatrices d’un programme Python d’analyse de données (profiling de notre application fil rouge).