Récupérer puis modifier des informations☘
Ces exercices doivent être utilisés pour vous entraîner à programmer. Ils sont généralement accompagnés d'aide et de leur solution pour vous permettre de progresser.
Avant de vous précipiter sur ces solutions dès la première difficulté, n'oubliez pas les conseils suivants :
- Avez-vous bien fait un schéma au brouillon pour visualiser le problème posé ?
- Avez-vous essayé de rédiger un algorithme en français, avec vos propres mots, avant de vous lancer dans la programmation sur machine ?
- Avez-vous utilisé des affichages intermédiaires, des
print()
, pour visualiser au fur et à mesure le contenu des variables ? - Avez-vous testé le programme avec les propositions de tests donnés dans l'exercice ?
- Avez-vous testé le programme avec de nouveaux tests, différents de ceux proposés ?
Rappels
- Chaque programme Python doit être sauvegardé sous forme de fichier texte
avec l'extension
.py
.
Enregistrez ce fichier dans le dossier[F05-Les_Fichiers]
avec le nom donné à l'exercice :ProgF05.51.py
,ProgF05.52.py
, etc... - Pour exécuter ce programme, il suffit de le sauvegarder puis d'appuyer
sur la touche
[F5]
.
ProgF05.51☘
dico.txt
est un fichier texte qui contient environ 336 500 mots de la
langue française, avec un seul mot écrit (en minuscule et sans accent)
par ligne. Vous pouvez télécharger ce fichier en
cliquant ici (clic droit puis [enregistrer sous]).
-
Placez le fichier
dico.txt
dans votre répertoire courant. -
Copiez/collez les instructions ci-dessous dans un nouveau programme Python intitulé
ProgF05.51.py
.1 2 3 4 5 6 7 8 9 10
import os # Importation du module rep = os.getcwd() # Obtenir le chemin du répertoire courant os.chdir(rep) # Changer de répertoire courant ##----- Programme principal -----## with open('dico.txt', 'r', encoding='utf-8') as f_source: with open('dico2.txt', ……………, encoding='utf-8') as f_result: for ……………………………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………………………… ………………………………………………………………………………………………………………………………………
-
Pour chaque mot lu dans le dictionnaire
dico.txt
, le programme doit écrire, dans un nouveau fichierdico2.txt
à créer, ce mot suivi d'un saut à la ligne.
Remplacez les pointillés par les instructions nécessaires. L'ordre des mots doit, bien évidemment, être respecté.Une solution
Pour chaque ligne lue dans le fichier source, on réécrit cette ligne dans le fichier résultat puis on écrit un saut à la ligne
'\n'
:1 2 3 4 5 6 7 8 9 10
import os # Importation du module rep = os.getcwd() # Obtenir le chemin du répertoire courant os.chdir(rep) # Changer de répertoire courant ##----- Programme principal -----## with open('dico.txt', 'r', encoding='utf-8') as f_source: with open('dico2.txt', 'w', encoding='utf-8') as f_result: for ligne in f_source: f_result.write(ligne) f_result.write('\n')
-
Exécutez le programme
ProgF05.51.py
puis vérifiez la création du fichierdico2.txt
dans le répertoire courant. -
Ouvrez
dico2.txt
avec un bon éditeur de texte (c'est-à-dire pas le bloc-notes de Windows) pour vérifier le travail réalisé.Début du fichier
dico2.txt
a a abaissa abaissable abaissables abaissai
ProgF05.52☘
-
Dans un nouveau fichier, complétez la définition de la fonction
espace()
en respectant ses spécifications.1 2 3 4 5 6 7 8
def espace(texte): """ texte – str Sortie: str – la chaîne entrée dans laquelle un espace a été inséré entre chaque caractère >>> espace('caligraphie') 'c a l i g r a p h i e' """
Une solution
1 2 3 4 5 6 7 8 9 10 11 12
def espace(texte): """ texte – str Sortie: str – la chaîne entrée dans laquelle un espace a été inséré entre chaque caractère >>> espace('caligraphie') 'c a l i g r a p h i e' """ resultat = '' for lettre in texte: resultat = resultat + lettre + " " return resultat
-
On reprend le fichier
dico.txt
de l'exercice précédent. Si besoin, vous pouvez télécharger ce fichier en cliquant ici (clic droit puis [enregistrer sous]).
Placez le fichierdico.txt
dans votre répertoire courant. -
Copiez/collez les instructions ci-dessous dans votre programme.
14 15 16 17 18 19 20
##----- Programme principal -----## import os # Importation du module rep = os.getcwd() # Obtenir le chemin du répertoire courant os.chdir(rep) # Changer de répertoire courant with open('dico.txt', 'r', encoding='utf-8') as f_source: with ...
-
Pour chaque mot lu dans le dictionnaire
dico.txt
, le programme doit écrire, dans un nouveau fichierdico3.txt
à créer, ce mot en insérant un espace entre chaque caractère.
Remplacez les pointillés par les instructions nécessaires. L'ordre des mots doit, bien évidemment, être respecté.Une piste
On lit chaque ligne (donc chaque mot) de
dico.txt
.
On insère ensuite un espace entre chaque lettre de ce mot puis on écrit le nouveau mot ainsi obtenu dans le fichierdico3.txt
.Une solution
##----- Programme principal -----## import os # Importation du module rep = os.getcwd() # Obtenir le chemin du répertoire courant os.chdir(rep) # Changer de répertoire courant with open('dico.txt', 'r', encoding='utf-8') as f_source: with open('dico3.txt', 'w', encoding='utf-8') as f_result: for mot in f_source: mot = espace(mot) # On "espace" le mot f_result.write(mot) # On écrit dans le fichier résultat
-
Exécutez le programme
ProgF05.52.py
puis vérifiez la création du fichierdico3.txt
dans le répertoire courant. -
Ouvrez
dico3.txt
avec un bon éditeur de texte (c'est-à-dire pas le bloc-notes de Windows) pour vérifier le travail réalisé.Début du fichier
dico3.txt
a a a b a i s s a a b a i s s a b l e a b a i s s a b l e s a b a i s s a i a b a i s s a i e n t a b a i s s a i s a b a i s s a i t a b a i s s a m e s
- Pourquoi un espace a-t-il été inséré devant chaque mot sauf le premier ?
Corrigez votre programme pour que cela ne se produise plus.
Une réponse
Il ne faut pas oublier que le dernier caractère de chaque ligne est le saut de ligne :
'\n'
. Or la fonctionespace()
insére un espace après chaque caractère de la chaîne, y compris après le caractère de saut à la ligne.Un des moyens de contourner ce problème est de supprimer ce caractère
'\n'
de la chaîne, d'espacer puis d'ajouter ce caractère lorsqu'on écrit dans le fichier résultat.Le programme actualisé
def espace(texte): """ texte – str Sortie: str – la chaîne entrée dans laquelle un espace a été inséré entre chaque caractère >>> espace('caligraphie') 'c a l i g r a p h i e' """ resultat = '' for lettre in texte: resultat = resultat + lettre + " " return resultat ##----- Programme principal -----## import os # Importation du module rep = os.getcwd() # Obtenir le chemin du répertoire courant os.chdir(rep) # Changer de répertoire courant with open('dico.txt', 'r', encoding='utf-8') as f_source: with open('dico3.txt', 'w', encoding='utf-8') as f_result: for mot in f_source: mot = mot.rstrip('\n') # On enlève le saut pour espacer f_result.write(espace(mot)+'\n') # On remet le saut pour écrire dans le fichier
- Pourquoi un espace a-t-il été inséré devant chaque mot sauf le premier ?
ProgF05.53☘
-
Dans la console Python, testez les instructions suivantes :
>>> 'abCD'.upper() >>> 'abCD'.lower()
-
Dans un nouveau fichier, complétez la définition de la fonction
majuscules()
en respectant ses spécifications. Pensez à vous servir des constatations réalisées dans la question 1.1 2 3 4 5 6 7 8
def majuscules(texte): """ texte – str Sortie: str – la chaîne entrée dans laquelle le premier caractère est remplacé par le caractère majuscule correspondant. >>> majuscules('caligraphie') 'Caligraphie' """
Une solution
1 2 3 4 5 6 7 8 9 10 11 12
def majuscules(texte): """ texte – str Sortie: str – la chaîne entrée dans laquelle le premier caractère est remplacé par le caractère majuscule correspondant. >>> majuscules('caligraphie') 'Caligraphie' """ resultat = texte[0].upper() for indice in range(1, len(texte)): resultat = resultat + texte[indice] return resultat
-
On reprend le fichier
dico.txt
de l'exercice précédent. Si besoin, vous pouvez télécharger ce fichier en cliquant ici (clic droit puis [enregistrer sous]).
Placez le fichierdico.txt
dans votre répertoire courant. -
Copiez/collez les instructions ci-dessous dans votre programme.
14 15 16 17 18 19
##----- Programme principal -----## import os # Importation du module rep = os.getcwd() # Obtenir le chemin du répertoire courant os.chdir(rep) # Changer de répertoire courant with ...
-
Pour chaque mot lu dans le dictionnaire
dico.txt
, le programme doit écrire, dans un nouveau fichierdico4.txt
à créer, ce mot en remplaçant sa première lettre par la majuscule correspondante.
Remplacez les pointillés par les instructions nécessaires. L'ordre des mots doit, bien évidemment, être respecté.Une solution
def majuscules(texte): """ texte – str Sortie: str – la chaîne entrée dans laquelle le premier caractère est remplacé par le caractère majuscule correspondant. >>> majuscules('caligraphie') 'Caligraphie' """ resultat = texte[0].upper() for indice in range(1, len(texte)): resultat = resultat + texte[indice] return resultat ##----- Programme principal -----## import os # Importation du module rep = os.getcwd() # Obtenir le chemin du répertoire courant os.chdir(rep) # Changer de répertoire courant with open('dico.txt', 'r', encoding='utf-8') as f_source: with open('dico4.txt', 'w', encoding='utf-8') as f_result: for mot in f_source: mot = majuscules(mot) f_result.write(mot)
-
Exécutez le programme
ProgF05.53.py
puis vérifiez la création du fichierdico4.txt
dans le répertoire courant. -
Ouvrez
dico4.txt
avec un bon éditeur de texte (c'est-à-dire pas le bloc-notes de Windows) pour vérifier le travail réalisé.Début du fichier
dico4.txt
A A Abaissa Abaissable Abaissables Abaissai Abaissaient Abaissais Abaissait Abaissames