Aller au contenu

TP - Utiliser des dictionnaires

Dans ce TP, les différentes parties sont globalement indépendantes.

Dans le dossier [NSI], créez le répertoire [B04_Dictionnaires].

Consignes communes à chaque partie

Le programme principal contient un appel au module doctest :

##----- Programme principal et tests -----##
if __name__ == '__main__':
    import doctest
    doctest.testmod()
Dans le « main », il faudra penser à élaborer un plan de test (avec des affichages console).
Pensez à demander au professeur de valider ce plan de test...

TPB04.11 : Scrabble

Téléchargez le fichier à compléter TPB04.11.py (clic droit -> [Enregistrer la cible du lien sous]) et enregistrez-le dans le répertoire [B04_Dictionnaires].

On dispose du dictionnaire suivant, dans lequel chaque lettre de l'alphabet (en majuscules) est associé au nombre de points qui lui est attribué au scrabble :

1
2
3
4
scrabble = {'A': 1, 'B': 3, 'C': 3, 'D': 2, 'E': 1, 'F': 4, 'G': 2, 'H': 4,
            'I': 1, 'J': 8, 'K': 10, 'L': 1, 'M': 2, 'N': 1, 'O': 1,
            'P': 3, 'Q': 8, 'R': 1, 'S': 1, 'T': 1, 'U': 1, 'V': 4,
            'W': 10, 'X': 10, 'Y': 10, 'Z': 10}

  1. Complétez la définition de la fonction valeur_mot() qui prend en paramètre une chaîne de caractères constituée de lettres majuscules et qui renvoie le nombre de points que rapporterait ce mot au scrabble.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    def valeur_mot(chaine):
        """
        chaine – str, une chaîne de caractères constituées de lettres majuscules
        Sortie: int – nombre de points de ce mot au scrabble
        >>> valeur_mot("PYTHON")
        20
        >>> valeur_mot("JAVASCRIPT")
        24
        """
        pass
    
  2. Complétez la définition de la fonction meilleure_lettre() qui prend en paramètre un tableau dont les éléments sont des lettres majuscules et qui renvoie celle ayant la plus forte valeur au scrabble.
    En cas d'égalité, c'est la lettre ayant l'indice le plus élevé dans le tableau qui est renvoyée.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    def meilleure_lettre(tab):
        """
        tab – list, tableau NON VIDE de caractères 
        Sortie: str – caractère de tab ayant la plus forte valeur au scrabble
                En cas d'égalité, caractère ayant l'indice le plus grand dans tab
        >>> meilleure_lettre(['B', 'A', 'K', 'D'])
        'K'
        >>> meilleure_lettre(['A', 'E', 'I'])
        'I'
        """
        pass
    

TPB04.12 : Décompter des occurrences

Téléchargez le fichier à compléter TPB04.12.py (clic droit -> [Enregistrer la cible du lien sous]) et enregistrez-le dans le répertoire [B04_Dictionnaires].

  1. Complétez la définition de la fonction occurrences() en respectant ses spécifications.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    def occurrences(sequence):
        """
        sequence – Une séquence ordonnée (tuple, list ou str)
        Sortie: dict – dictionnaire tel que :
                - les clefs sont les valeurs de la séquence
                - les valeurs sont les occurrences de ces clefs dans la séquence
        >>> occurrences([4, 2, 3, 4, 1, 4, 3, 4])
        {4: 4, 2: 1, 3: 2, 1: 1}
        >>> occurrences("abracadrabra")
        {'a': 5, 'b': 2, 'r': 3, 'c': 1, 'd': 1}
        """
        pass
    
  2. Complétez la définition de la fonction compte_mots() en respectant ses spécifications.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    def compte_mots(chaine):
        """
        chaine – str, une chaîne de caractère comportant des espaces
        Sortie: dict – dictionnaire tel que :
                - les clés sont les mots de la chaine
                - les valeurs sont les occurrences des mots
        >>> compte_mots("a b a c ab")
        {'a': 2, 'b': 1, 'c': 1, 'ab': 1}
        """
        pass
    
    Une piste

    Vous pouvez utiliser la méthode .split().
    Pour comprendre son rôle, testez les instructions suivantes dans la console :

    >>> tab = "a b a c ab".split()
    >>> tab
    

  3. Téléchargez le texte du « Petit Chaperon Rouge » puis enregistrez-le dans le répertoire [B04_Dictionnaires].
    Dans le programme principal, importez ce texte puis écrivez les instructions nécessaires pour afficher, dans la console, chaque mot de ce texte suivi de son nombre d'occurrences dans le texte.

    Une piste

    Si f est le nom d'une variable faisant référence à un fichier texte, alors f.read() renvoie le contenu de ce fichier texte sous la forme d'une unique chaîne de caractères.

    Affichage à obtenir (10 premières lignes)

    Il : 9
    etait : 9
    une : 8
    fois : 4
    adorable : 1
    petite : 1
    fille : 1
    que : 22
    tout : 11
    le : 51
    
  4. Complétez la définition de la fonction compte_tous_mots() en respectant ses spécifications.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    def compte_tous_mots(chaine):
        """
        chaine – str, une chaîne de caractère comportant des espaces
        Sortie: dict – dictionnaire tel que :
                - les clés sont des entiers (longueurs possibles pour un mot)
                - les valeurs sont les occurrences des mots ayant cette longueur
        >>> compte_tous_mots("a b a c ab")
        {1: 4, 2: 1}
        """
        pass
    
    Appliquez ensuite, dans le programme principal, cette fonction au texte du « Petit Chaperon Rouge ».

    Affichage à obtenir

    {2: 454, 5: 241, 3: 189, 4: 295, 8: 78, 6: 120, 1: 98, 7: 109, 9: 22, 10: 9, 12: 1, 13: 1, 11: 1}
    
    Une piste

    Vous pouvez (à nouveau) utiliser la méthode .split().
    Pour comprendre son rôle, testez les instructions suivantes dans la console :

    >>> tab = "a b a c ab".split()
    >>> tab
    

  5. Complétez la définition de la fonction tab_plus_frequent() qui prend en paramètre un dictionnaire dont les clefs sont des chaînes de caractères et un entier strictement positif longueur. Cette fonction renvoie un tableau constitués des chaînes de caractères de taille la longueur spécifiée et associées à la plus grande valeur dans le dictionnaire.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    def tab_plus_frequent(dico, longueur):
        """
        dico – dictionnaire de chaines avec leur occurence
        Sortie : list – tableau de chaines de taille longueur ayant
                 l'occurence la plus grande.
        >>> tab_plus_frequent({'a': 3, 'b': 2, 'c': 3, 'ab': 5}, 1)
        ['a', 'c']
        """
        pass
    
    Appliquez ensuite, dans le programme principal, cette fonction au dictionnaire obtenu à la question 3. à partir du texte du « Petit Chaperon Rouge » afin d'afficher, pour chaque longueur possible de mot, le (ou les) plus présents dans le texte.

    Affichage à obtenir

    1 carac : ['a'] avec 32 occurences
    2 carac : ['et'] avec 61 occurences
    3 carac : ['que'] avec 22 occurences
    4 carac : ['mere'] avec 31 occurences
    5 carac : ['grand'] avec 29 occurences
    6 carac : ['encore'] avec 6 occurences
    7 carac : ['galette'] avec 5 occurences
    8 carac : ['Chaperon'] avec 24 occurences
    9 carac : ['bouteille', 'engloutir'] avec 2 occurences
    10 carac : ['rencontrer', 'noisetiers', 'brillaient', 'satisfaite', 'approchant', 'fourrerent', 'retrouvant', 'cadenasser', 'intentions'] avec 1 occurences
    11 carac : ['Allegrement'] avec 1 occurences
    12 carac : ['reconnaitras'] avec 1 occurences
    13 carac : ['renseignement'] avec 1 occurences
    
    Une piste

    C'est un algorithme de recherche du maximum légèrement modifié.
    Lorsqu'on rencontre un nouveau maximum, on ré-initialise le tableau ;
    lorsqu'on rencontre un mot de même « valeur », on l'incorpore au tableau.