Python L1, TD/TP 04.03

Aujourd'hui nous allons finaliser quelques exercices de la semaine dernière. Pas beaucoup de nouveau, mais quand même. Je vous recommande de faire les autres ! L'exercice sur papier d'aujourd'hui portera sur les listes, et vous pourrez trouver parmi les sujets des éléments vus ici.


Exercices

Exercice 1.

Ex. 2 de la semaine dernière (lapins).


Exercice 2.

Ex. 3 de la semaine dernière (mots d'un alphabet).


Exercice 3.

Ex. 7 de la semaine dernière (Tortue).
On fera d'autres exercices avec le module "tortue", et il est fort possible que votre dernier exercice obligatoire, partiellement fait chez vous et complété en TP sera basé sur ce paquetage. Alors, lisez la documentation.


Exercice 4.

Ex. 8 de la semaine dernière (Crible d'Ératosthène).


Exercice 5.

Inversion d'un dictionnaire.
Ceci est une "stratégie" très utile, pour la construction des annuaires inversés, pour plusieurs raisonnements statistiques, pour l'aide à la recherche (indexation "inversée" du domaine : [/document, mot-clé/]), etc.

Si vous avez un simple dictionnaire, par ex. d={'dog':'chien','red':'rouge','two':'deux'}, on peut aisément construire le dictionnaire inverse : {'chien':'dog','rouge':'red','deux':'two'}. On construit t=list(d.items()). Ensuite on assemble une liste t1 de tuples dans l'ordre inverse, et finalement d1=dict(t1).

Construisez une fonction qui effectue cette opération.
Cependant, cela ne marchera pas toujours de manière simpliste, les valeurs dans un dictionnaire peuvent être quelconques, et les clés non (doivent être "hashables"), la paire 'x':[2,10] n'est pas réversible. Supposons cependant que ce soit le cas, que toutes les valeurs utilisées soient hashables. Alors un autre problème se pose : Si d={'Jean':12,'Pierre':4,'Tom':12,'Marie':2,'Alain':0,'Laurent':2}, même si les entiers peuvent être utilisés comme clés, l'inversion simple n'est pas possible, car les clés se répètent. Quelle est la valeur attachée à 12?
Implémenter la stratégie suivante. Si une valeur est unique, pas de problème, on inverse les clé ↔ valeur. Sinon, on combine les valeurs identiques en une clé, et les clés en une liste de valeurs : d1={12:['Jean','Tom'],2:['Marie','Laurent'],4:'Pierre',0:'Alain'}. La construction du nouveau dictionnaire accumule les valeurs. Si le nombre de valeurs égales est plus grand que 2, ceci doit aussi marcher.

(Ceci est un "pattern de programmation" assez typique, utile par ex. pour la statistique des textes. Afin de trouver le nombre d'occurrences d'un caractère dans une chaîne, on la parcourt, et pour chaque caractère dedans, on l'utilise comme la clé dans un dictionnaire au début vide. Si la clé est absente dans le dictionnaire, on l'insère, avec la valeur 1, et si elle est dèjà là, in incrémente de 1 la valeur associée. Ici la procédure sera un peu différente, mais la philosophie reste la même. Faites cet exercice aussi, ainsi qu'un légèrement plus compliqué : le nombre d'occurrences des paires contiguës, par ex. de pq, qr, rs, tu, uv, dans 'pqrstuv'. Ainsi vous comprendrez mieux les idées de base. Ou, peut-être, ne le faites surtout pas. Je vous le donnerai comme un exercice obligatore noté, et je verrai ainsi ceux qui n'ont même pas lu ce texte. Vous pensez que je plaisante?...)


Semaine précédente
Semaine suivante
Retour à l'index