Applications des différents types de variables

Applications 1 à 4 : Ensembles, listes et dictionnaires

Applications 5 à 7 : Les fichiers

 

Application 1 : création de l'ensemble vide

Proposez une solution qui affecte à la variable vide l'ensemble vide, c'est-à-dire le seul ensemble (de type set) qui ne possède aucun élément. En testant votre variable vide vous devriez obtenir les résultats suivants :

>>> type(vide)
<class 'set'>
>>> len(vide)
0

 

Application 2 : supression des doublons dans une liste

On part d'une liste liste1 contenant des doublons. Par exemple : liste1=[1,2,4,1,2,3,2,3,2,1,4,1,2,3,3,4,1,2]

Proposez une solution simple affectant à la variable liste2 les éléments de liste1 sans les doublons, c'est-à-dire en un seul exemplaire chacun.

Par exemple si au départ liste1=[1,2,4,1,2,3,2,3,2,1,4,1,2,3,3,4,1,2] alors liste2 devra être égale à [1, 2, 3, 4]

 

Application 3 : création d'un dictionniare à partir de 2 listes

On part de 2 listes représentant respectivement les clés et les valeurs associées d'un dictionniare.

La liste des clés est liste_cle=["ville","couleur","taille"]

La liste des valeurs est liste_valeur=["Paris","rouge",200]

Proposez une solution qui, à partir de ces 2 listes, affecte à la variable dico un dictionniare à 3 éléments (3 paires clé/valeur). En testant votre variable dico vous devriez obtenir les renseignements suivants :

>>> type(dico)
<class 'dict'>
>>> len(dico)
3
>>> print(dico)
{'couleur': 'rouge', 'ville': 'Paris', 'taille': 200}
>>> dico["ville"]
'Paris'
>>> dico["couleur"]
'rouge'
>>> dico["taille"]
200

 

Application 4 : comparaison entre deux variables de différents types

Nous connaissons déjà les 6 opérateurs de comparaison :

Les 6 opérateurs de comparaison
opérateur
test effectué
exemple
==
  égal à
a==b
!=
  différent de
a!=b
>
  strictement supérieur à
a>b
>=
  supérieur ou égal à
a>=b
<
  strictement inférieur à
a<b
<=
  inférieur ou égal à
a<=b

Appliqués à 2 variables a et b ces opérateurs renvoient une valeur booléenne : True ou False.

Si les variables a et b sont des valeurs numériques (nombres entiers ou nombres décimaux) le résultat est sans surprise et déjà connu.

Or Python permet également d'effectuer la comparaison entre deux variables non numériques (autres que int et float).

Que donne alors chacun de ces 6 opérateurs de comparaison dans les cas suivants :

  • si a et b sont deux booléens
  • si a et b sont deux caractères (chaîne de caractère contenant un seul caractère)
  • si a et b sont deux chaînes de caractère
  • si a et b sont deux listes
  • si a et b sont deux tuples
  • si a et b sont deux ensembles

Vous effectuerez tous vos tests directement dans la console de Python en observant bien les résultats et en testant les différents types les uns après les autres, tout en donnant différentes valeurs aux variables a et b avant de les comparer.

A part dans le cas où a et b sont des nombres (int ou float) dans quel cas la comparaison est-elle autorisée entre deux types différents ?

Vous noterez dans une fiche papier sous forme d'un tableau de synthèse l'ensemble de vos remarques résumant le mécanisme mis en place par Python lors de la comparaison de deux variables non numériques.

 

 

Application 5 : lecture d'un fichier texte

Dans EduPython, créez un fichier texte contenant les 5 lignes suivantes (par copier/coller) puis enregistrez-le sous le nom fichier.txt dans votre répertoire de travail :

Ceci est un fichier texte
Pour le lire en Python il faut créer un descripteur de fichier avec open()
La méthode read() permet de lire le fichier
La méthode write() permet d'écrire dans le fichier
Dernière ligne du fichier

1 - Dans la console de Python, configurez votre répertoire courant grâce à la méthode chdir() du module os, puis ouvrez votre fichier en lecture seule.

2 - Affichez dans la console chacune des 5 lignes de ce fichier texte, en corrigeant les éventuelles erreurs de décodages des caractères accentués. Nous voulons ici un affichage clair et formaté de chaque ligne, sans crochet, ni \n visible, ni simple quote, etc. Voici le résultat attendu dans la console :

Ceci est un fichier texte
Pour le lire en Python il faut créer un descripteur de fichier avec open()
La méthode read() permet de lire le fichier
La méthode write() permet d'écrire dans le fichier
Dernière ligne du fichier

3 - Une fois au point, réalisez un programme Python qui ouvre en lecture seule et qui affiche proprement dans la console toutes les lignes de ce fichier texte.

4 - Insérez à la main quelques nouvelles lignes dans le fichier texte en l'éditant dans EduPython et en utilisant des caractères spéciaux tel que l'Euro, l'e dans l'a (minuscule et majuscule) l'e dans l'o (minuscule et majuscule), les caractères accentués ou le cédille (minuscule et majuscule), puis vérifiez si votre programme affiche toujours correctement toutes les lignes de ce fichier texte. Voici quelques exemples de nouvelles lignes à tester dans votre fichier :

Un cœur en mosaïques coûte à peu près 8 €
BOUQUET D'ŒILLETS : 14 €
À l’œuvre on reconnaît l’artisan
Ça c'est le curriculum vitæ de LÆTICIA
¼ + ¼ = ½
Le symbole © signifie « copyright »

Le symbole Ø signifie « ensemble vide »
± 5 ‰
3 × ¼ = ¾

5 - Si votre fichier texte est actuellement encodé en ANSI, encodez-le en UTF-8 puis adaptez votre programme pour pouvoir le lire et l'afficher sans problème au niveau des caractères spéciaux ou accentués. Si votre fichier texte est actuellement encodé en UTF-8, encodez-le en ANSI puis adaptez votre programme pour pouvoir le lire et l'afficher sans problème au niveau des caractères spéciaux ou accentués.

6 - Lorsque le fichier texte est encodé en ANSI, les jeux de caractères suivants sont-il tous équivalents pour une lecture correcte des caractères spéciaux et accentués ?

fic=open('fichier.txt','r',encoding='cp1252')
fic=open('fichier.txt','r',encoding='latin1')
fic=open('fichier.txt','r',encoding='latin_1')
fic=open('fichier.txt','r',encoding='iso8859')
fic=open('fichier.txt','r',encoding='iso8859-15')
fic=open('fichier.txt','r')

S'il y avait un seul nom de jeu de caractères à utiliser pour ouvrir dans Python avec la fonction open() un fichier codé en ANSI lequel serait-ce ? Notez votre conclusion dans votre cahier.

 

Application 6 : écriture d'un fichier texte

Nous allons maintenant créer un programme qui va écrire un certain nombre de lignes dans un fichier texte.

Le programme devra demander le nom du fichier texte à créer ainsi que le nombre de lignes à saisir et à écrire dans le fichier.

Chaque ligne sera une petite phrase simple saisie sous forme d'une chaîne de caractères pouvant contenir des caractères accentués.

1 - écrire ce programme qui demande le nom du fichier à créer puis le nombre de ligne à saisir et qui les écrit dans le fichier

2 - améliorer votre programme pour qu'il affiche à la fin le contenu du fichier en précisant le nombre de lignes affichés

3 - améliorer le programme afin qu'en plus du nom du fichier il demande au début si on souhaite créer un nouveau fichier (en écrasant le fichier existant) ou si on souhaite ajouter des nouvelles lignes à la fin du fichier

4 - améliorer le programme pour qu'il propose un simple mode de lecture du ficher, sans le modifier, en plus des 2 modes d'écriture. On poura pour cela demander au démarage de saisir un caractère en fonction de l'action désirée :

saisir L pour la simple Lecture du fichier

saisir C pour la Création d'un nouveau fichier

saisir A pour Ajouter des lignes à un fichier existant

Dans les 3 cas on précisera le nom du fichier à traiter.

5 - la méthode listdir() du module os de Python permet d'obtenir sous forme de liste l'ensemble des fichiers présents dans le répertoire courant. Exemple :

>>> os.listdir()
['fichier.txt',
'toto.txt',
'programme.py',
'fic2.txt',
'fichier_1.txt']

Problème : lors de la lecture d'un fichier, si l'utilisateur saisit le nom d'un fichier qui n'existe pas, Python renverra une erreur lors de l'ouverture du fichier par open('fichier.txt','r')

Solution : lorsque l'utilisateur demande une simple lecture du fichier, vérifiez si le fichier existe bien sur le disque avant de l'ouvrir en lecture en comparant le nom saisie par l'utilisateur à la liste des fichiers renvoyées par os.listdir()

6 - Afin de faciliter la saisie des noms de fichiers dans le cas d'un fichier déjà existant, proposez à l'utilisateur de saisir un simple numéro en lui présentant dans la console la liste des fichiers déjà existants dans le répertoire courant en exploitant la liste renvoyées par os.listdir(). Exemple de présentation attendue :

1 : fichier.txt
2 : toto.txt
3 : programme.py
4 : fic2.txt
5 : fichier_1.txt

Saisissez le numéro du fichier à traiter

7 - Lors de la création d'un nouveau fichier, en plus du nom de fichier demandez à l'utilisateur le type d'encodage : ANSI ou UTF-8 ? Après cette modification votre programme Python doit être capable de créer, de compléter ou de lire aussi bien des fichiers codés en UTF-8 qu'en ANSI, en détectant automatiquement l'encodage du fichier dans le cas de la lecture ou de l'ajout de nouvelles lignes dans un ficher déjà existant.

8 - Proposez une solution simple pour supprimer une ligne dans le fichier : affichage numérotée de toutes les lignes existantes afin que l'utilisateur saisisse seulement le numéro de la ligne à détruire.

 

 

Application 7 : traitement d'un fichier CSV

Un fichier CSV est un fichier texte dans lequel chaque ligne correspond à un enregistrement, et où dans chaque enregistrement les valeurs sont séparées par une virgule.

Le sigle CSV signifie Comma-Separated Values et désigne un fichier dont les valeurs sont séparées par des virgules.

Nous allons nous intéresser aux renseignements suivants concernant des personnes (chaque enregistrement contient 6 valeurs) :

  • prénom
  • NOM
  • adresse
  • code postal (entier à 5 chiffres)
  • ville
  • numéro de téléphone (entier à 10 chiffres)

Voici un exemple d'enregistrement où chacun des 6 champs (ou 6 valeurs) est séparé par une virgule :

laurent,DUPONT,5 rue de la liberté,75000,PARIS,0611223344

Et voici un exemple de fichier CSV, chacune des lignes contenant un nouvel enregistrement des informations concernant une nouvelle personne :

laurent,DUPONT,5 rue de la liberté,75000,PARIS,0611223344
paule,MARTIN,10 rue des loups,33063,BORDEAUX,0677885544
jean,DURANT,3 place d'armes,44109,NANTES,0697877767
valérie,CHALET,56 avenue de verdun,59350,LILLE,0601020304

Enregistrez ce fichier CSV de base dans un fichier texte nommé fic_csv.txt et en l'encodant en ANSI.

Avec une présentation adaptée, voici les informations contenues dans notre fichier CSV :

Prénom
NOM
Adresse
Code postal
Ville
Téléphone
laurent
DUPONT
5 rue de la liberté
75000
PARIS
0611223344
paule
MARTIN
10 rue des loups
33063
BORDEAUX
0677885544
jean
DURANT
3 place d'armes
44109
NANTES
0697877767
valérie
CHALET
56 avenue de verdun
59350
LILLE
0601020304

Une telle organisation des données s'appelle une organisation des données en table.

 

Travail demandé :

1 - Écrire un programme en Python permettant de lire ce fichier CSV et d'afficher proprement les informations qu'il contient.

Après la lecture du fichier l'ensemble des informations sera enregistré en mémoire dans une structure de données appropriée. La structure de données correspondant à un fichier CSV est une liste de dictionnaires :

  • chaque ligne du fichier CSV (contenant 6 champs) est enregistrée dans un dictionnaire (contenant 6 clés)
  • l'ensemble des dictionnaires est enregistré dans une liste
  • le nombre d'éléments (nombre de dictionnaires) présent dans cette liste correspond au nombre d'enregistrements (nombre de lignes) présents dans le fichier CSV

Les 6 clés des dictionnaire seront les suivantes afin de rappeler clairement l'étiquette de chaque champ :

  • prénom
  • nom
  • adresse
  • cp
  • ville
  • téléphone

Rappel : les clés d'un dictionnaire sont de simple étiquettes. Il ne s'agit pas de phrases complètes, elles s'écrive entièrement en minuscule, en un seul mot, et en utilisant évantuellement une abréviation ou un acronyme simple (exemple : cp pour code postal).

Une fois la structure de données remplie c'est en la consultant qu'on procèdera à un affichage clair, ordonné et formaté des imformations.

Voici un exemple d'affichage formaté :

Laurent DUPONT
5 rue de la liberté
75000 PARIS
Téléphone : 0611223344

Paule MARTIN
10 rue des loups
33063 BORDEAUX
Téléphone : 0677885544

Jean DURANT
3 place d'armes
44109 NANTES
Téléphone : 0697877767

Valérie CHALET
56 avenue de verdun
59350 LILLE
Téléphone : 0601020304

 

2 - Améliorez votre programme afin qu'il permettent d'ajouter de nouveaux enregistrements dans le fichier CSV. Pour chaque nouvel enregistrement la saisie des 6 champs sera clairement demandée, et le contenu formaté du fichier sera affiché après chaque saisie.

Un menu simple dans la console présentera à l'utilisateur les différentes possibilités afin qu'il ne saisisse qu'un simple numéro selon son choix :

Que voulez-vous faire ?
1 : lire le fichier
2 : ajouter un nouvel enregistrement

3 - Améliorez votre programme afin de n'afficher qu'un champ particulier : prénom, nom, adresse, code postal, ville ou numéro de téléphone.

Un menu simple dans la console présentera à l'utilisateur les différentes possibilités afin qu'il ne saisisse qu'un simple numéro selon son choix :

Quels champs voulez-vous afficher ?
1 : tous les prénoms
2 : tous les noms
3 : toutes les adresses
4 : tous les codes postaux
5 : toutes les villes
6 : tous les numéros de téléphone

 

4 - Améliorez votre programme afin d'afficher les informations du fichier mais en les triant selon un champ particuler (exemple : affichage dans l'odre alphabétique de NOM, tri dans l'ordre décroissant des codes postaux, etc.).

Il convient alors de poser 2 questions à l'utilisateur pour connaître son choix :

Selon quel champs voulez-vous trier les enregistrements ?
1 : les prénoms
2 : les noms
3 : les adresses
4 : les codes postaux
5 : les villes
6 : les numéros de téléphone

 

Dans quel ordre voulez-vous trier les informations ?
1 : dans l'ordre croissant
2 : dans l'ordre décroissant

 

5 - Améliorez votre programme afin de filtrer l'affichage, en affichant seulement les enregistrements correspondant à un critère précis (exemple : seulement les enregistrements contenant 'rue' dans leur adresse, seulement les codes postaux commençant par 33, etc.). Là encore, plusieurs questions sont peut-être nécesssaires pour connaître la volonté de l'utilisateur.

6 - Proposez une solution simple pour supprimer une ligne dans le fichier : affichage numérotée de toutes les lignes existantes afin que l'utilisateur saisisse seulement le numéro de la ligne à détruire.

Le menu principal affiché au lancement du programme s'est évidemment affiné au fil des évolutions :

Que voulez-vous faire ?
1 : lire tout le fichier
2 : ajouter un nouvel enregistrement
3 : afficher un seul champ
4 : trier les enregistrements selon un champ particulier
5 : filtrer les enregistrements
6 : supprimer un enregistrement

 

 

 


 

 

Site Internet : python.gecif.net

Auteur : Jean-Christophe MICHEL

Professeur de Sciences Industrielles de l'Ingénieur
option Informatique et Numérique

Courriel : jc.michel@gecif.net