Aller au contenu

Tous les TP seront notés (barème indicatif).

  • Tout TP non rendu avant la fin de la séance sera noté zéro.
  • Tout copié collé de solution provenant d'internet ou d'un de ses camarades sera noté zéro.
  • Veuillez mettre clairement vos noms sur votre code source ou noms de fichiers.

Dictionnaires - 3ème activité

Exercice 1 (5 points)

Écrire une fonction ajoute_dictionnaires qui prend en paramètres deux dictionnaires d1 et d2 dont les clés sont des nombres et renvoie le dictionnaire d défini de la façon suivante :

  • Les clés de d sont celles de d1 et celles de d2 réunies.

  • Si une clé est présente dans les deux dictionnaires d1 et d2, sa valeur associée dans le dictionnaire d est la somme de la valeur v1 au carré du dictionnaires d1 et la valeur v2 au carré du dictionnaire d2.

  • Si une clé n’est présente que dans un des deux dictionnaires, sa valeur associée dans le dictionnaire d est la même que sa valeur dans le dictionnaire où elle est présente.

Exemples :

>>> ajoute_dictionnaires({1: 5, 2: 2}, {2: 3, 3: 11})
{1: 5, 2: 13, 3: 11}
>>> ajoute_dictionnaires({}, {2: 9, 3: 11})
{2: 9, 3: 11}
>>> ajoute_dictionnaires({1: 5, 2: 7}, {})
{1: 5, 2: 7}

Exercice 2 (4 points)

On considère des tables (des tableaux de dictionnaires) qui contiennent des enregistrements relatifs à des animaux hébergés dans un refuge. Les attributs des enregistrements sont 'nom', 'espece', 'age', 'code'. Voici un exemple d'une telle table :

animaux = [ {'nom':'Medor', 'espece':'chien', 'age':5, 'code':2},
{'nom':'Titine', 'espece':'chat', 'age':2, 'code':5},
{'nom':'Tom', 'espece':'chat', 'age':7, 'code':4},
{'nom':'Belle', 'espece':'chien', 'age':6, 'code':3},
{'nom':'Mirza', 'espece':'chat', 'age':6, 'code':5}]

Programmer une fonction selection_codes qui : prend en paramètres :

  • une table table_animaux contenant des enregistrements relatifs à des animaux (comme dans l'exemple ci-dessus)
  • un code "code" ;

Et renvoie une table contenant les enregistrements de table_animaux dont l'attribut 'code' n'est pas code. Exemples avec la table animaux ci-dessus :

>>> selection_enclos(animaux, 5)
[{'nom':'Medor', 'espece':'chien', 'age':5, 'code':2},
{'nom':'Tom', 'espece':'chat', 'age':7, 'code':4},
{'nom':'Belle', 'espece':'chien', 'age':6, 'code':3}
]
>>> selection_enclos(animaux, 2)
[{'nom':'Titine', 'espece':'chat', 'age':2, 'code':5},
{'nom':'Tom', 'espece':'chat', 'age':7, 'code':4},
{'nom':'Belle', 'espece':'chien', 'age':6, 'code':3},
{'nom':'Mirza', 'espece':'chat', 'age':6, 'code':5}]
>>> selection_enclos(animaux, 7)
[ {'nom':'Medor', 'espece':'chien', 'age':5, 'code':2},
{'nom':'Titine', 'espece':'chat', 'age':2, 'code':5},
{'nom':'Tom', 'espece':'chat', 'age':7, 'code':4},
{'nom':'Belle', 'espece':'chien', 'age':6, 'code':3},
{'nom':'Mirza', 'espece':'chat', 'age':6, 'code':5}]

Exercice 3 (4 points)

Écrire une fonction enumere qui prend en paramètre une liste L et renvoie un dictionnaire d dont les clés sont les éléments de L avec pour valeur associée la liste des indices plus 1 de l’élément dans la liste L.

Exemple :

>>> enumere([1, 1, 2, 3, 2, 1])
{1: [1, 2, 6], 2: [3, 5], 3: [4]}

Exercice 4 (3 points)

Un professeur de NSI décide de gérer les résultats de sa classe sous la forme d’un dictionnaire :

  • les clefs sont les noms des élèves ;
  • les valeurs sont des dictionnaires dont les clefs sont les types d’épreuves et les valeurs sont les notes obtenues associées à leurs coefficients.

Avec :

resultats = {'JohnMcNugget':{'DS1' : [15.5, 4],
'DM1' : [14.5, 1],
'DS2' : [13, 4],
'PROJET1' : [16, 3],
'DS3' : [14, 4]},
'Durand':{'DS1' : [6 , 4],
'DM1' : [14.5, 1],
'DS2' : [8, 4],
'PROJET1' : [9, 3],
'IE1' : [7, 2],
'DS3' : [8, 4],
'DS4' :[15, 4]}}
L’élève dont le nom est JohnMcNugget a ainsi obtenu au DS2 la note de 8 avec un coefficient 4. Le professeur crée une fonction moyenne qui prend en paramètre le nom d’un de ces élèves et lui renvoie sa moyenne arrondie au centième. Compléter le code du professeur ci-dessous :

def moyenne(...):
    if nom in ...:
        notes = resultats[...]
        total_points = ...
        total_coefficients = ...
        for ... in notes.values():
            note , coefficient = valeurs
            total_points = total_points + ... * ...
            total_coefficients = ... + coefficient
        return round( ... / total_coefficients , ... )
    else:
        return -1

Exercice 5 (4 points)

5.1) L’occurrence d’un caractère dans une phrase est le nombre de fois où ce caractère est présent. Exemples :

  • l’occurrence du caractère ‘o’ dans ‘bonjour’ est 2 ;
  • l’occurrence du caractère ‘b’ dans ‘Bébé’ est 1 ;
  • l’occurrence du caractère ‘B’ dans ‘Bébé’ est 1 ;
  • l’occurrence du caractère ‘ ‘ dans ‘Hello world !’ est 2.

On cherche les occurrences des caractères dans une phrase. On souhaite stocker ces occurrences dans un dictionnaire dont les clefs seraient les caractères de la phrase et les valeurs l’occurrence 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’ayant pas d’importance). Écrire une fonction occurence_lettres prenant comme paramètre une variable phrase de type str. Cette fonction doit renvoyer un dictionnaire de type constitué des occurrences des caractères présents dans la phrase.

5.2) Désormais on cherche à associer à chaque mot d'une phrase son nombre de caractères, par exemple pour la phrase 'Hello world', on doit retourner :

{'Hello': 5, 'world': 5}

On prendra en compte uniquement les lettres de l'alphabet.

Écrire une fonction nombre_lettres_mots qui prend en paramètre une chaîne de caractère correspondant à la phrase et retourne un dictionnaire contenant le nombre de lettres de chaque mot.