Dictionnaires

Consignes

Dans ce TP, les différents exercices sont indépendants.

Enregistrez chaque fichier dans le dossier [Dictionnaires] sous le nom donné à l'exercice : dictionnaire.py, titanic.py, scrabble.py, occurence.py...

Exercice n°1 : Dictionnaire Français / Anglais

On souhaite réaliser un dictionnaire Français / Anglais, afin que l'utilisateur demande un mot en français et l'ordinateur répond par la traduction anglaise du mot.

Le dictionnaire Python contiendra donc des paires de clé/valeur définies telles que :

  • La clé est un mot en français.

  • La valeur est la traduction anglaise du mot associé à sa clé.

Question

  1. Créer un dictionnaire dico_fr_en de 10 éléments permettant cette traduction.

  2. Rédiger une fonction traduction() qui prend comme argument le terme français et renvoie le terme anglais.

  3. Enrichir le programme avec une question à l'utilisateur pour connaître le mot à traduire. Le programme doit afficher l'ensemble des mots français disponibles.

Indice

Question 1 : Pour créer ce dictionnaire, il faut utiliser la syntaxe vue en cours :

1
dico_fr_en = {
2
    "bonjour": "hello",
3
    "ordinateur": "computer",
4
    ...
5
}

Indice

Question 2 : Le terme français est utilisé en tant que clé, il faut donc vérifier que cette clé existe avant de la réupérer.

Indice

Question 3 : On doit utiliser la fonction input() pour demander un mot à l'utilisateur. Pour consulter l'ensemble des mots disponibles, on devra parcourir le dictionnaire.

Solution

1
dico_fr_en = {
2
    "bonjour": "hello",
3
    "ordinateur": "computer",
4
    "lycée": "high school",
5
    "au-revoir": "goodbye",
6
    "pardon": "sorry",
7
    "bienvenue": "welcome",
8
    "nouveau": "new",
9
    "heure": "hour",
10
    "année": "year",
11
    "mois": "month",
12
    "jour": "day"
13
}
14
15
16
def traduction(mot_fr):
17
    assert mot_fr in dico_fr_en, f"Le mot {mot_fr} n'est pas présent dans le dictionnaire"
18
    return dico_fr_en[mot_fr]
19
20
21
print(traduction("lycée"))
22
23
# Affichage des mots
24
print("Les mots disponibles sont :")
25
for mot in dico_fr_en:
26
    print(f"- {mot}")
27
28
# Demande utilisateur
29
mot = input("Choisissez un mot à traduire en anglais : ")
30
mot_en = traduction(mot)
31
print(f"Le mot {mot} se traduit {mot_en} en anglais.")
32
33
# On a bien une erreur due à l'assert.
34
print(traduction("absent"))

Exercice n°2 : Scrabble

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

Télécharger ce fichier qui sera à compléter selon les questions ci-dessous.

Question

  1. Compléter la définition de la fonction valeur_mot(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.

  2. Compléter 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.

Indice

Question 1 : Le nombre de points d'un mot se calcule grâce à la somme des points de chaque lettre du mot. Il faut donc parcourir toutes les lettres du mot et consulter sa valeur dans le dictionnaire.

Indice

Question 2 : Simple parcours de liste où on regarde chaque éléments dans notre dictionnaire scrabble. La spécificité est que la meilleure lettre doit être sauvegardée dans une variable, et on compare sa valeur à chaque nouvelle lettre dans la liste.

Cela ressemble à la fonction indice_min sauf que :

  • on ne veut pas le minimum mais le maximum ;

  • on ne regarde pas la valeur de l'élément, mais sa valeur via le dictionnaire ;

  • on ne renvoie pas l'indice mais l'élément (la lettre).

Solution

1
scrabble = {'A': 1, 'B': 3, 'C': 3, 'D': 2, 'E': 1, 'F': 4, 'G': 2, 'H': 4,
2
            'I': 1, 'J': 8, 'K': 10, 'L': 1, 'M': 2, 'N': 1, 'O': 1,
3
            'P': 3, 'Q': 8, 'R': 1, 'S': 1, 'T': 1, 'U': 1, 'V': 4,
4
            'W': 10, 'X': 10, 'Y': 10, 'Z': 10}
5
6
7
def valeur_mot(mot):
8
    """
9
    Renvoie le nombre de points du mot passé en paramètre
10
    :param mot: une chaîne de caractères constituée de lettres majuscules
11
    :return: nombre de points de ce mot au scrabble
12
    >>> valeur_mot("PYTHON")
13
    20
14
    >>> valeur_mot("JAVASCRIPT")
15
    24
16
    """
17
    score = 0
18
    for lettre in mot:
19
        score += scrabble[lettre]
20
    return score
21
22
23
def meilleure_lettre(liste):
24
    """
25
    Renvoie la lettre qui a le plus forte valeur dans le mot.
26
    :param liste: liste NON VIDE de caractères
27
    :return: caractère de liste ayant la plus forte valeur au scrabble
28
    >>> meilleure_lettre(['B', 'A', 'K', 'D'])
29
    'K'
30
    >>> meilleure_lettre(['A', 'E', 'I'])
31
    'I'
32
    """
33
    # Cette variable enregistre la meilleure lettre. Par défaut, c'est la première de la liste
34
    maximum = liste[0]
35
    for lettre in liste:
36
        # Supérieur ou égal, car en cas d'égalité, on renvoie la dernière rencontrée ayant la plus grande valeur.
37
        if scrabble[lettre] >= scrabble[maximum]:
38
            maximum = lettre
39
    return maximum
40
41
##----- Programme principal et tests -----##
42
if __name__ == '__main__':
43
    import doctest
44
    doctest.testmod()