Chapitre 8 : Les tuples et les dictionnaires.

Introduction :

Un tuple est une séquence immuable, c'est-à-dire que ses éléments ne peuvent pas être modifiés après sa création. Contrairement aux listes, les tuples sont souvent utilisés pour regrouper des éléments hétérogènes, tels que des coordonnées, dans un ensemble fixe et ordonné.

En informatique, un dictionnaire est une structure de données qui stocke des paires clé-valeur, permettant un accès rapide aux données via une clé unique. Il est très utile pour l'organisation des informations où chaque élément peut être récupéré rapidement par son identifiant.

1. Les tuples dans Python

A copier dans le cahier.

Dans Python, nous avons une structure qui s'apparente à une liste mais qui est différente : les tuples.

Les tuples se caractèrisent par l'utilisation de parenthèses lors de leurs créations.

Une autre caractéristique est le fait qu'ils soient non modifiables une fois créés.

2. Variables locales

Sans précision, les variables utilisées dans une fonction ne vivent que le temps de la fonction.

Si cela n'est pas souhaité, il faut intégrer la commande global.

3. Compter les voyelles

  1. Créer un tuple qui contient les voyelles, qu'elles soient majuscules ou minuscules.
  2. Créer une fonction compte_voyelle, qui prend en paramètre un string et qui retourne un integer correspondant au nombre de voyelles.

4. Exercice :

Écrivez une fonction qui prend en entrée une liste de tuples, où chaque tuple contient le nom d'un étudiant et sa note.

La fonction devra retourner le nom de l'étudiant ayant la meilleure note.

Voici une liste pour tester votre fonction :

student_scores = [
    ("Alice", 85),
    ("Bob", 72),
    ("Carol", 90),
    ("David", 60),
    ("Eve", 78),
    ("Frank", 88),
    ("Grace", 92),
    ("Henry", 70),
    ("Ivy", 68),
    ("Jack", 82),
    ("Kelly", 95),
    ("Leo", 73),
    ("Mia", 87),
    ("Nathan", 79),
    ("Olivia", 91),
    ("Paul", 67),
    ("Quinn", 76),
    ("Ryan", 83),
    ("Sophia", 89),
    ("Tyler", 74)
]

5. Les dictionnaires.

A copier dans le cahier.

Un dictionnaire dans Python est un objet qui est créé à l'aide d'accolades.

Il permet de faire correspondre des clés à des valeurs.

6. Exemple.

Regardons la commande coucou={1:"salut","chocolat":3,6:"avion"}.

1, "chocolat" et 6 sont des clefs.

"salut", 3 et "avion" sont les valeurs associées.

La commande coucou[6] renvoie "avion".

7. Exercice :

Créez un dictionnaire vide appelé personne_1 et ajoutez-y les clés "nom", "âge" et "ville" avec des valeurs correspondantes pour représenter une personne.

8. Exercice :

Créez un dictionnaire qui associe trois jours de la semaine à leur numéro (1 pour lundi, 2 pour mardi, etc.). Affichez ensuite le numéro associé à "mercredi".

Exemple de dictionnaire :

jours = {
    "lundi": 1,
    "mardi": 2,
    "mercredi": 3
}

9. Exercice :

Ajoutez un nouvel élément au dictionnaire suivant, où le fruit "kiwi" est associé à la couleur "vert". Affichez ensuite le dictionnaire mis à jour.

fruits = {
    "pomme": "rouge",
    "banane": "jaune",
    "orange": "orange"
}

10. Exercice :

Écrivez une fonction couleur_fruit qui prend en entrée un dictionnaire de fruits et de couleurs dico ainsi qu'un string nom_fruit correspondant au nom d'un fruit. Elle retourne la couleur associée à un fruit donné. Si le fruit n'est pas dans le dictionnaire, retournez "Fruit inconnu".

Voici un dictionnaire pour tester votre fonction :

fruits = {
    "pomme": "rouge",
    "banane": "jaune",
    "orange": "orange"
}

11. Exercice :

Écrivez une fonction qui prend en entrée une liste de nombres et renvoie un dictionnaire contenant la fréquence de chaque nombre dans la liste.

def frequences_nbs(liste):
    dico={}
    for nb in liste:
            if ...............: #le nb est deja une clef du dictionnaire
                ..............
            else:               #on créé une nouvelle clef
                ..............

    for clef in dico.keys():
            dico[clef]=dico[clef]/ ..........   #on transforme les occurences en frequences
    return dico

12. Exercice :

Ecrire une fonction population_totale qui prend comme paramètre un dictionnaire dont les clefs sont des pays et les valeurs associées leur population et qui renvoie un integer correspondant à la population totale.

Voici un exemple de dictionnaire pouvant être pris comme paramètre.

country_populations = {
    "Chine": 1444216107,
    "Inde": 1393409038,
    "États-Unis": 332915073,
    "Indonésie": 276361783,
    "Pakistan": 225199937,
    "Brésil": 213993437,
    "Nigéria": 211400708,
    "Bangladesh": 166303498,
    "Russie": 145912025,
    "Mexique": 130262216,
    "Japon": 126050804,
    "Éthiopie": 123849456,
    "Philippines": 113530590,
    "Égypte": 112411076,
    "Vietnam": 97580000,
    "République démocratique du Congo": 89561403,
    "Turquie": 84495243,
    "Iran": 85075571,
    "Allemagne": 83900473,
    "Thaïlande": 69953881,
    "France": 67406000,  # Population de la France
    "Monaco": 38300  # Population de Monaco
}

13. Exercice :

Écrivez une fonction qui prend en entrée un dictionnaire de produits et leur prix, et qui retourne le produit le plus cher.

Voici un dictionnaire pour tester votre fonction :

products = {
    "lait": 1.50,
    "pain": 1.20,
    "beurre": 2.30,
    "fromage": 3.50,
    "jus de fruit": 2.80,
    "pâtes": 1.00,
    "riz": 1.10
}

14. La bataille

  1. Dans le jeu de carte "la bataille", la carte "9" l'emporte sur la carte "7" et la carte "dame" l'emporte sur la carte "5".

    Créer un dictionnaire qui fait correspondre à une valeur entre 2 et 14 une carte.

    Ainsi :

    • les nombres entiers de 2 à 10 sont associés aux strings de 2 à 10.
    • 11 est associé à "valet", 12 à "dame", 13 à "roi" et 14 à "as".
  2. Programmer une fonction bataille qui prend en paramètres deux integers entre 2 et 14 et qui affiche le résultat d'une bataille comme dans les exemples ci-dessous.

    Exemples :

    >>> bataille(3,11)
    "Le premier joueur a la carte 3 et le deuxième joueur a la carte valet."
    "C'est le deuxième joueur qui l'emporte avec la carte valet."
    >>> bataille(9,9)
    "Le premier joueur a la carte 9 et le deuxième joueur a la carte 9."
    "Egalité entre les deux joueurs."

15. Exercice : (sujet 24 - 2023)

Le nombre d’occurrences d’un caractère dans une chaîne de caractère est le nombre d’apparitions de ce caractère dans la chaîne.

Exemples :

On cherche le nombre d’occurrences des caractères dans une chaîne de caractères. On souhaite stocker ces nombres d’occurrences dans un dictionnaire dont les clefs seraient les caractères de la chaîne et les valeurs le nombre d’occurrences de ces caractères.

Par exemple : avec la phrase 'Hello world !' le dictionnaire est le suivant :

{'H': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 2, 'w': 1, 'r': 1, 'd': 1, '!': 1}

L’ordre des clefs n’a pas d’importance.

Écrire une fonction nbr_occurrences prenant comme paramètre une chaîne de caractères chaine et renvoyant le dictionnaire des nombres d’occurrences des caractères de cette chaîne.

16. Exercice :

Écrivez une fonction qui prend en entrée une liste de mots et retourne un dictionnaire où les clés sont les longueurs des mots, et les valeurs sont des listes de mots ayant cette longueur.

Voici une liste pour tester votre fonction :

word_list = ["chat", "chien", "éléphant", "souris", "cheval", "oiseau", "abeille", "tigre", "serpent"]

17. Exercice :

Écrivez une fonction qui prend en entrée une liste de dictionnaires représentant des étudiants (chaque dictionnaire contient un nom et une note), et retourne un dictionnaire qui associe chaque note à une liste des étudiants ayant obtenu cette note.

Voici une liste pour tester votre fonction :

students = [
    {"nom": "Alice", "note": 85},
    {"nom": "Bob", "note": 72},
    {"nom": "Carol", "note": 90},
    {"nom": "David", "note": 60},
    {"nom": "Eve", "note": 78},
    {"nom": "Frank", "note": 88},
    {"nom": "Grace", "note": 92},
    {"nom": "Henry", "note": 70},
    {"nom": "Ivy", "note": 68},
    {"nom": "Jack", "note": 82},
    {"nom": "Kelly", "note": 95},
    {"nom": "Leo", "note": 73},
    {"nom": "Mia", "note": 87},
    {"nom": "Nathan", "note": 79},
    {"nom": "Olivia", "note": 91},
    {"nom": "Paul", "note": 67},
    {"nom": "Quinn", "note": 76},
    {"nom": "Ryan", "note": 83},
    {"nom": "Sophia", "note": 89},
    {"nom": "Tyler", "note": 74}
]