Les articles de GNU/Linux Magazine Hors-Série N°86

Article mis en avant

Préface

Comment lire un fichier XML ? Comment créer un itérateur ? Lorsque l'on ne programme pas en Python tous les jours, les solutions aux problèmes les plus triviaux ne nous sont pas toujours directement accessibles, enfouies dans un recoin de notre cerveau. Des efforts longs et coûteux en temps et en énergie seront alors nécessaires pour tenter de se les remémorer. Et parfois, malgré des efforts intenses, de nombreux tests et des apports énergétiques salutaires (tablette de chocolat, bonbons divers, etc.), la solution ne vient toujours pas. Il faut alors plonger dans les méandres du Web... avec plus ou moins de réussite. N'existerait-il pas une autre alternative ?

L'objectif : Nous disposons d'une chaîne de caractères comportant des personnages de séries sous la forme nom_serie:personnage. Tous les personnages sont séparés par un point-virgule et on souhaite retrouver facilement l'ensemble des personnages d'une série donnée.
L'objectif : Lire des données saisies au clavier par l'utilisateur : - un entier ; - une chaîne de caractères ; - des réels.
L'objectif : Une application contenant du texte doit pouvoir être utilisée par des personnes parlant uniquement français, ou allemand, ou anglais, ou ...
L'objectif : Avoir un modèle (template) permettant de générer un document en lui transmettant des valeurs.
L'objectif : Travailler sur des objets de type matrix et pouvoir les enregistrer.
L'objectif : Générer aléatoirement des entiers entre 0 et 10 et des réels entre 5 et 25. Pendant la phase de développement, les nombres générés devront toujours être les mêmes (pour pouvoir détecter plus facilement les erreurs). À la mise en production, les séquences devront être différentes à chaque exécution.
L'objectif : Une date a été fournie par un utilisateur et l'on souhaite s'assurer qu'il s'agit bien d'une date présente dans le calendrier.
L'objectif : Ouvrir un fichier texte en lecture en gérant les erreurs possibles et afficher son contenu en le lisant ligne à ligne.
L'objectif : On veut lire les caractères 7 à 10 (4 caractères) et 21 à 25 (5 caractères) d'un fichier.
L'objectif : Créer un fichier xml correctement structuré.
L'objectif : Ouvrir un fichier xml et en lire le contenu.
L'objectif : Un fichier json a une structure de dictionnaire. La création depuis Python est donc très simple si l'on s'appuie sur cette structure.
L'objectif : Lire un fichier json de manière à stocker toutes les données dans un dictionnaire.
L'objectif : Créer un fichier de configuration ini ayant la structure suivante :
L'objectif : Lire les données issues d'un fichier series.ini.
L'objectif : Un fichier hdf5 est un fichier structuré (forme arborescente) qui permet de stocker de très grands volumes de données (la seule limitation de taille est liée au système).
L'objectif : Lire un fichier hdf5 ayant la structure suivante :
L'objectif : Créer un petit fichier .odt ayant l'apparence suivante :
L'objectif : Accéder au contenu textuel d'un fichier odt.
L'objectif : Parcourir une liste et afficher les éléments en les préfixant par leur position dans la liste.
L'objectif : Une chaîne de caractères contient des entiers séparés par un point-virgule. Cette chaîne peut contenir des caractères parasites invisibles (espaces, tabulations, sauts de ligne et retours chariot). Nous souhaitons obtenir une liste de ces entiers triés par ordre croissant.
L'objectif : Trier une liste en utilisant une fonction de tri définie par nos soins permettant ainsi de travailler sur une structure complexe. Nous prendrons pour exemple une liste de tuples contenant chacun une chaîne de caractères et un entier. Nous voulons trier ces tuples par ordre d'entiers décroissants.
L'objectif : Une liste d'entiers contient des doublons et l'on souhaite les supprimer pour ne conserver qu'une seule occurrence de chaque entier.
L'objectif : Afficher toutes les valeurs contenues dans un dictionnaire en les triant par ordre alphabétique.
L'objectif : Par définition, un dictionnaire est une structure non ordonnée : vous ne pourrez pas lire ses éléments dans l'ordre dans lequel ils ont été insérés. Nous allons créer un dictionnaire ordonné grâce à l'objet OrderedDict.
L'objectif : À partir d'une liste alternant des noms et des prénoms en minuscule, nous voulons créer un dictionnaire dont la clé sera le nom en majuscules et la valeur le prénom avec la première lettre en majuscule.
L'objectif : Étant donnés deux dictionnaires, nous souhaitons créer un nouveau dictionnaire contenant toutes les données des deux dictionnaires précédents.
L'objectif : Nous allons créer deux listes : - la première contient des tuples avec une valeur, son carré et son cube ; - la seconde contient toutes les coordonnées entières de (0, 0) à (10, 10).
L'objectif : Créer un équivalent de la fonction réalisant la somme du carré de tous les entiers qui lui sont passés en paramètre.
L'objectif : Créer et utiliser une fonction qui sera détruite immédiatement après emploi. Nous utiliserons comme exemple une liste d'entiers (sous forme de chaîne de caractères) dont nous voulons obtenir les carrés.
L'objectif : Créer une fonction qui, en fonction des paramètres qui lui seront passés, créera une autre fonction. Nous prendrons pour exemple une fonction qui renverra une liste constituée de l'ensemble des paramètres qui lui auront été transmis et qui seront élevés à une puissance passée en paramètre de la fonction de génération. Sur l'exemple ce sera plus compréhensible...
L'objectif : Savoir si une boucle for a été interrompue par un break ou non. Nous utiliserons comme exemple l'analyse d'une liste d'entiers pour savoir si cette dernière contient au moins un nombre pair.
L'objectif : Affecter une valeur à une variable en fonction d'une autre variable sur une seule ligne.
L'objectif : Nous souhaitons créer une fonction réagissant différemment suivant que l'on utilise des entiers ou des chaînes de caractères en paramètre. Pour cela, nous allons définir une fonction permettant d'ajouter soit deux entiers et le résultat sera la somme, soit deux chaînes de caractères et le résultat sera la somme des valeurs ASCII des caractères des deux chaînes.
L'objectif : Créer un décorateur affichant les paramètres transmis à une fonction.
L'objectif : Créer un décorateur affichant les types attendus par les paramètres d'une fonction et le type de la valeur retournée. Pour indiquer les types des paramètres et de la valeur de retour, nous utiliserons les annotations de fonctions.
L'objectif : Créer un objet itérable fournissant aléatoirement des entiers compris entre 1 et 6 (comme un dé) et qui s'arrête lorsque l'on tire un 6.
L'objectif : Créer un objet itérable fournissant aléatoirement des entiers compris entre 1 et 6 (comme un dé) et qui s'arrête lorsque l'on tire un 6.
L'objectif : Organiser des modules dans un paquetage contenant des sous-paquetages.
L'objectif : Créer une constante, c'est-à-dire stocker une valeur qui ne pourra pas être modifiée.
L'objectif : Créer un attribut qui sera commun à l'ensemble des instances d'une classe (chaque élément créé à partir de cette classe pourra lire et écrire dans un attribut commun).
L'objectif : Créer une méthode qui sera commune à l'ensemble des instances d'une classe et qui pourra être appelée même si aucune instance de cette classe n'a été créée.
L'objectif : Nous définissons une classe dont une seule instance peut être créée grâce au patron de conception (design pattern) Singleton.
L'objectif : Créer une pile d'entiers dans laquelle nous pourrons ajouter des éléments à l'aide de l'opérateur +.
L'objectif : Nous voulons pouvoir appeler une instance d'un objet comme s'il s'agissait d'une fonction et que cette dernière fournisse un résultat. Ici, la fonction renverra la somme d'un attribut de l'objet avec une valeur passée en paramètre lors de l'appel.
L'objectif : Nous souhaitons ajouter un attribut permettant de nommer une liste (ou de la décrire, ou...) mais nous ne voulons surtout pas perdre le comportement de la liste.
L'objectif : Nous souhaitons ajouter une méthode à une classe existante sans avoir recours à l'héritage.
L'objectif : Nous voulons créer une méthode qui appelle une autre méthode d'après un paramètre qui lui est transmis.
L'objectif : Créer une base SQLite3 contenant la table suivante Personnage incluant les champs Nom et Prenom.
L'objectif : Récupérer les arguments transmis à un programme Python via la ligne de commandes.
L'objectif : Insérer des données dans une base SQLite3 contenant la table personnage incluant les champs nom et prenom.
L'objectif : Lire des données dans une base SQLite3 contenant la table personnage incluant les champs nom et prenom.
L'objectif : Exécuter depuis un script Python une commande shell : 1 - une commande ne retournant rien (exemple avec espeak, le synthétiseur vocal) ; 2 - une commande retournant un résultat que l'on souhaite traiter en Python (exemple avec ls -l pour afficher la liste des fichiers).
L'objectif : Transmettre un calcul à une fonction et faire exécuter ce calcul à plusieurs CPUs.
L'objectif : Charger sous forme de chaîne de caractères une page html depuis une URL donnée.
L'objectif : Un document json est structuré sous la forme d'un ensemble de paires clé/valeur à la manière d'un dictionnaire Python. Mais contrairement aux dictionnaires, un document json est une simple chaîne de caractères (une sérialisation d'un dictionnaire). Nous voulons passer d'une donnée « plate » json à un dictionnaire exploitable en Python.
L'objectif : Envoyer un mail au format texte en utilisant un serveur SMTP distant.
L'objectif : Créer un serveur XML-RPC proposant deux services : - hello : pour s'assurer que le serveur est actif ; - getTime : pour obtenir l'heure et la date.
L'objectif : Créer rapidement un petit serveur CGI capable de servir des documents html.
L'objectif : Télécharger un fichier sur Internet en connaissant son URL.
L'objectif : Établir une communication entre deux machines (un serveur et un client) à l'aide des sockets.
L'objectif : Écrire des informations en couleur sur le terminal.
L'objectif : Écrire une phrase et corriger un mot en écrivant par-dessus un autre mot.
L'objectif : Afficher un menu à l'écran et renvoyer le choix de l'utilisateur si ce choix est autorisé. Dans le cas contraire, gérer proprement les erreurs et redemander à l'utilisateur de sélectionner une entrée.
L'objectif : Tracer la courbe sin(2πx)e-x de et ses asymptotes, donner sa légende et annoter le point (5, 0).
L'objectif : Lorsqu'une tâche s'exécute, elle peut être plus ou moins longue et il faut donc signaler à l'utilisateur que le programme est toujours « vivant ». Pour cela, on peut afficher une petite animation (une barre qui tournoie) ou bien une barre de progression.
L'objectif : Créer une petite calculatrice graphique acceptant deux flottants et permettant de réaliser l'une des quatre opérations élémentaires.
L'objectif : Regrouper au sein d'un seul fichier compressé exécutable l'ensemble des fichiers d'un projet.
L'objectif : Utiliser pip pour installer et supprimer des paquets Python.
L'objectif : Créer un environnement virtuel pour installer ses dépendances sans polluer le système de la machine de développement. Notre environnement s'appellera env_test.
L'objectif : Créer un fichier de tests unitaires permettant de s'assurer du fonctionnement d'une classe.
L'objectif : Nous voulons débugger le programme factorielle.py suivant qui devrait calculer la factorielle d'un entier tiré au hasard entre 0 et 10.
L'objectif : Un programme renvoie une erreur et l'on souhaite obtenir plus de précisions sur cette erreur.
L'objectif : Disposer d'un fichier de log permettant de suivre l'exécution d'un programme et pouvoir ainsi le déboguer plus simplement. Les informations seront affichées à l'écran et également dans un fichier, mais avec un niveau de détail différent.
L'objectif : Nous disposons de deux implémentations d'une fonction factorielle et nous souhaitons déterminer laquelle est la plus efficace.