Universit´e Pierre et Marie Curie 2014-2015 Informatique g´ en´ erale 1 (Python) Travaux Pratiques — TP8 — Exercice 1 – Convertisseur des chiffres arabes ←→ romains ` l’adresse Le but de cet exercise est de cr´eer un converteur entre des chiffres arabes et romains. Vous trouverez a /home/sasl/shared/InfoGen1_2014_TP8/ un fichier romain.py qui contient deux dictionnaires, l’un contenant 7 items arabe:romain nomm´e d, et l’autre 13 items arabe:romain nomm´e d_inv. Ces dictionnaires vous permettront de passer plus facilement des chiffres arabes en chiffres romaines. Donc vous devez ´ecrire une fonction qui convertit un nombre arabe en un nombre romain et une fonction qui fait l’inverse. Question: Quel est le plus grand nombre romain entre 1 et 5000 qui pos`ede l’´ecriture romaine la plus grande ? Exercice 2 – Nombre des mots ` calculer le nombre d’occurences des mots dans un livre. On dispose pour cela de deux fichiers texte On cherche a ”autourdelalune.txt” et ”delaterrealalune.txt” disponibles dans le r´epertoire /home/sasl/shared/ InfoGen1_2014_TP8/. ´ crire une fonction lireFichier qui prend en argument un nom de fichier et qui construit un dictionnaire 1. E contenant tous les mots et leur nombre d’occurences associ´es. ` oter la ponctuation parmi ,;:?!.-"’)( ainsi que les caract`eres de saut de ligne \r et \n. On prendra garde a Les mots seront transform´es en minuscule. 2. En d´eduire le nombre d’apparition du mot ”barbicane” dans le roman De la terre a ` la lune, ainsi que le nombre d’apparition des mots ”de”, ”le” et ”la”. 3. Trouver le mot de plus de 8 lettres le plus pr´esent dans Autour de la lune. Ainsi que le mot de plus de 12 lettres. Pour cela, ´ecrire une fonction prenant le nombre de lettres en param`etre. Exercice 3 – Gestion de stocks Le but de cet exercice est de cr´eer des fonctions permettant une gestion simple de stocks pour un petit marchand de fruits et l´egumes. Le stock est repr´esent´e par un dictionnaire dont chaque entr´ee (i.e. item) a pour clef le nom ` chaque lancement du programme, le du produit et pour valeur la quantit´e (en kilogrammes) du produit en stock. A ` partir d’un fichier nomm´e “stock.txt” dont chaque ligne repr´esente un produit sous la forme dictionnaire est charg´e a clef:valeur. Par exemple, on pourra avoir un fichier contenant 2 lignes suivantes : pomme:40 poire:30 ` chaque terminaison du programme, le dictionnaire est enregistr´e au fichier “stock.txt” sous la forme pr´ecis´ee A pr´ec´edemment. Le programme r´ealise deux fonctions principales : ` jour le stock avec de nouvelles arriv´ees de produits. • Enregistrement d’un d´epˆ ot de produits o` u on met a • Enregistrement d’une commande o` u on soustrait du stock des quantit´es command´ees. 1. Cr´eer une fonction lire_dict(nom_fichier) qui prend comme argument une chaˆıne de caract`eres ` repr´esentant le nom d’un fichier et qui retourne un dictionnaire r´esultant du contenu du fichier. Pensez a utiliser la fonction os.path.exists(nom_fichier) qui retourne True si le fichier existe et False sinon pour d´etecter si le fichier existe. 2. Cr´eer une fonction ecrire_dict(d,nom_fichier) qui enregistre le contenu du dictionnaire d dans un fichier sous la forme d´ecrite ci-dessus. TP 2014-2015 - TP8 3. Cr´eer une fonction enregistrer_depot(d) qui prend en entr´ee un dictionnaire d. Cette fonction devrait per` l’utilisateur de choisir des produits existants et d’entrer leur quantit´e nouvellement arriv´ee ou d’entrer mettre a ` jour selon ces informations. le nom de nouveaux produits et leur quantit´es. Le dictionnaire devrait ˆetre mis a ` utiliser la biblioth`eque easygui pour La valeur retourn´ee par la fonction est aussi le dictionnaire d. Pensez a une agr´eable interface avec l’utilisateur. Par exemple, utilisez la fonction “buttonbox” pour lister les produits existants en stock. La fonction devrait ˆetre capable d’enregistrer plusieurs produits jusqu’` a ce que l’utilisateur veuille arrˆeter l’enregistrement. 4. Cr´eer une fonction enregistrer_commande(d) qui prend en entr´ee un dictionnaire d. Cette fonction de` l’utilisateur de choisir des produits existants et d’entrer leur quantit´e a ` soustraire du stock. vrait permettre a L’utilisateur devrait ˆetre au courant par l’affichage de la quantit´e en stock de chaque produit. Le dictionnaire ` jour selon les informations entr´ees. La valeur retourn´ee par la fonction est aussi le dictionnaire devrait ˆetre mis a d. 5. Cr´eer un programme principal o` u ` partir du fichier “stock.txt” (appel de la fonction lire_dict(nom_fichier)), • on charge le dictionnaire a • on affiche un menu contenant les fonctions “Enregistrement d’un d´epˆ ot”, “Enregistrement d’une commande” et ”Quitter“ (appel des fonctions enregistrer_depot(d) et enregistrer_commande(d)), ` la terminaison du programme, enregistrer le dictionnaire dans le fichier ”stock.txt“ (appel de la fonction • a ecrire_dict(d,nom_fichier)). Exercice 4 – Le chiffre de C´ esar Le chiffre de C´esar, comme son nom l’indique, est une m´ethode de chiffrement simple connue pour avoir ´et´e utilis´ee par C´esar lors de ses correspondances priv´ees. ` chiffrer, le principe consiste simplement en une permutation circulaire de l’alphabet. Etant donn´e un message a La longueur du d´ecalage est la clef secr`ete du chiffre. Ainsi, il n’existe que 26 clefs possibles. Par exemple, la clef 2 transformerait le message "bonjour" en "dqplqwt". Vous aurez compris que, si s d´enote la clef secr`ete, en r´eappliquant l’algorithme de chiffrement au message chiffr´e avec, cette fois, la clef 26-s nous retrouverons le message originel. Cet algorithme, que nous allons impl´ementer, est ` la fois de chiffrer et de d´echiffrer. donc sym´etrique puisqu’il permet a ` l’adresse /home/sasl/shared/InfoGen1_2014_TP8/ dans un fichier alphabet.py deux 1. Vous trouverez a dictionnaires, l’un contenant 26 items lettre:rang nomm´e Alphabet, et l’autre 26 items rang:lettre nomm´e Alphabet_inv. Ces dictionnaires vous permettront de jongler plus facilement entre les lettres et leurs rangs dans l’alphabet. Importez-les. Ecrivez un programme qui, pour une chaˆıne de caract`ere donn´ee chaine, affiche successivement le rang de chacune de ses lettres dans l’alphabet. Vous utiliserez pour cela le dictionnaire Alphabet (on pourra donc ` la casse). v´erifier si un caract`ere de chaine est dans Alphabet ; attention a 2. Etoffez ce programme pour que, si on note rang le rang d’un des caract`eres dans l’alphabet, il affiche la lettre ` rang+2. Vous pourrez utiliser %26. Cependant, comme les rangs vont de 1 a ` 26, il faudra d’abord situ´ee a d´ecaler le rang de -1, effectuer le d´ecalage avec la clef et le modulo, puis red´ecaler de +1 pour obtenir le rang correspondant entre 1 et 26. Vous vous assurerez de son bon fonctionnement avant de continuer. 3. Utilisez les r´eponses aux questions pr´ec´edentes pour impl´ementer une fonction ChiffrerDechiffrer qui ` chiffrer ou d´echiffrer et la clef secr`ete, et retourne le texte modifi´e. prend deux param`etres, le message a Vous devrez de plus respecter quelques conditions : ` la clef en • lors du chiffrement ou d´echiffrement d’un message, vous devrez convertir chaque lettre grˆ ace a laissant absolument intacts tous les caract`eres qui ne sont pas des lettres, • et vous conserverez intacte la casse du message. Vous pourrez vous assurez de son bon fonctionnement notamment en v´erifiant la sym´etrie de la fonction. C’est`-dire que pour une chaˆıne donn´ee, not´ee chaine, et une clef donn´ee, not´ee clef, alors a ChiffrerDechiffrer(26-clef,ChiffrerDechiffrer(clef,chaine))) doit vous retourner une copie exacte de chaine. c 2014-2015 Polytech’Paris page 2 sur 2
© Copyright 2024 ExpyDoc