Aller au contenu

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]).

  1. Placez le fichier dico.txt dans votre répertoire courant.

  2. 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 ………………………………………………………………………………………………………………………………………
                ………………………………………………………………………………………………………………………………………
                ………………………………………………………………………………………………………………………………………
    
  3. Pour chaque mot lu dans le dictionnaire dico.txt, le programme doit écrire, dans un nouveau fichier dico2.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')
    
  4. Exécutez le programme ProgF05.51.py puis vérifiez la création du fichier dico2.txt dans le répertoire courant.

  5. 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

  1. 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
    
  2. 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 fichier dico.txt dans votre répertoire courant.

  3. 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 ...
    
  4. Pour chaque mot lu dans le dictionnaire dico.txt, le programme doit écrire, dans un nouveau fichier dico3.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 fichier dico3.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
    
  5. Exécutez le programme ProgF05.52.py puis vérifiez la création du fichier dico3.txt dans le répertoire courant.

  6. 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
    
    1. 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 fonction espace() 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
    

ProgF05.53

  1. Dans la console Python, testez les instructions suivantes :

    >>> 'abCD'.upper()
    
    >>> 'abCD'.lower()
    
  2. 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
    
  3. 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 fichier dico.txt dans votre répertoire courant.

  4. 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 ...
    
  5. Pour chaque mot lu dans le dictionnaire dico.txt, le programme doit écrire, dans un nouveau fichier dico4.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)
    
  6. Exécutez le programme ProgF05.53.py puis vérifiez la création du fichier dico4.txt dans le répertoire courant.

  7. 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