Vous allez développer un programme qui permets l’exécution de certaines tâches. Très fréquemment, un utilisateur doit faire les tâches suivantes :
Les exercices préparatoires vous permettent de completer certains éléments de cette mission.
A l’issue de ce problème, chacun d’entre vous sera en mesure d’exploiter les notions suivantes :
La matière relative à cette mission est décrite dans les sections suivantes du syllabus en ligne :
Il peut être utile de relire:
Les questions à choix multiples de cette mission sont également accessibles en ligne depuis https://inginious.info.ucl.ac.be/course/LSINF1101-PYTHON/Session6_QCM
Considérez le code suivant:
file = open ( "file.txt", "r" ) for line in file: print ( line.strip ().split (",") ) file.close ()
Le contenu du fichier file.txt est le suivant:
X | , | X | , | \n | , | X | \n | X | X | , | , | X |
Expliquez le résultat de code.
Dans les exercices suivants, vous pouvez supposer que les fichiers à lire existent et qu'il ne faut pas traiter les erreurs.
On donne des listes contenant des paires de coordonnées comme [(0.5,0.5),(0.1,0.3),(0.4,0.5)].
0.5,0.5 0.1,0.3 0.4,0.5
Considérez l'utilisation de méthodes de string telles que : * split * strip
Voyez la documentation de ces méthodes dans le manuel de référence de Python.
Dans cet exercice, les erreurs possibles lors de la lecture ou de l'écriture d'un fichier peuvent être ignorées.
Considérez le code suivant.
command = input ( "Enter your command: " ) parameters = command.split () if parameters[0] == "divide": print ( "The value of your division is: " + str ( float(parameters[1])/float(parameters[2]))) elif parameters[0] == "showfile": file = open ( parameters[1] ) print ( file.read () ) file.close () else: print ( "Command not recognized")
Dans la mission, vous devrez lire un fichier qui contient des mots avec leur fréquence d'occurrence. Par exemple:
this,5146 that,10790 these,1575 the,69975 those,864
Identifiez les différentes erreurs que l'on pourrait rencontrer en lisant ce fichier. Il n'est pas nécessaire d'identifier les noms exacts des erreurs; il suffit de les décrire en mots.
Dans cette mission nous allons développer un simple assistant qui fonctionne sur la console Python. L'utilisateur doit être capable de donner des commandes simples, pour lesquelles l'outil doit répondre avec une réponse pertinente. L'objective dans cette mission est de montrer que l'outil continue à fonctionner même si l'utilisateur donne des commandes incomplètes ou incorrectes.
Les commandes qui doivent être supportées sont:
Par exemple, l'outil doit supporter cette séquence de commandes :
Welcome to your personalized tool! > file all-words.dat Loaded all-words.dat > info 11304 lines 1330218 caracters > words Read file as list of words > search presbytaerial Presbytaerial is not in the list of words > search presbyterial Presbyterial is in the list of words > exit
Si l'utilisateur spécifie un fichier autre qu'une liste de mots, ou si l'utilisateur cherche un mot sans avoir spécifié une liste de mots, l'outil doit produire un message d'erreur et continuer à fonctionner.
Le format des listes de mots est spécifié dans les exercices préparatoires. Pour éviter tout problème avec l'encodage des caractères accentués, votre liste de mots vérifiera des mots en anglais (sans accents).
Note: dans cet exercice, la liste de mots ne doit pas encore être mise en oeuvre à l'aide de dictionnaires Python, ce qui sera le sujet de la mission de la semaine prochaine.
La phase de réalisation de cette mission est moins guidée que les précédentes; vous devez choisir vous-même la subdivision de votre programme en fonctions.
Néanmoins, on vous suggère de procéder comme suit:
Pour vous aider, vous avez à disposition le fichier all-words.dat qui contient une centaine de milliers de mots de la langue anglaise ainsi que le nombre d'occurrences de ce mot. Cette liste de mots a été construit en se basant sur deux sources d'information : les mots utilisés par ispell (http://wordlist.sourceforge.net/) et la Global Service List (http://jbauman.com/gsl.html), c'est-à-dire les 2000 mots les plus fréquemment utilisés par un personne qui apprend l'anglais. Ce fichier contient les mots en minuscules et n'est pas trié dans l'ordre alphabétique. La première ligne contient le nombre de mots présents dans le fichier.
La mission de cette semaine n'aura pas de correction automatique donc soyez bien attentifs pendant la séance de feedback.
Vous devrez aussi écrire des tests de vos fonctions. Si assistant.py est le fichier qui contient votre code, nous attendons que vous écrivez un deuxième fichier test.py dans lequel vous faites des appels aux fonctions que vous avez fournies. Il est décrit dans le syllabus théorique comment faire des tests quand on a plusieurs fichiers (Section Tests).
Vous devez soumettre un fichier assistant.py avec le code de votre outil et un fichier test.py avec vos tests. N'oubliez pas d'ajouter dans ce fichier des spécifications (docstrings) et aussi d'écrire un fichier README.
Écrivez un outil qui fait le suivant:
Séparez le programme en fonctions, avec au moins
Pour simplifier l'exercice, il n'est pas nécessaire de traiter les erreurs.
Écrivez une fonction table(filename_in, filename_out, width) qui crée pour un fichier donné un autre fichier dans lequel toutes les lignes ont été mises dans un tableau. Pour cet exemple:
Mons Bruxelles Ottignies Jean Charles
le résultat avec width = 8 doit être:
Mons Bruxelle Ottignie Jean Cha |
Remarquez qu'il y a un espace avant et après chaque ligne. Considérez l'utilisation des méthodes suivantes de string:
Consultez la documentation de Python si vous ne connaissez pas encore ces méthodes. Vous pouvez présumer que le fichier filename_in existe.
Toute votre vie vous vous êtes demandé "Où cette stupide chouette a-t-elle égaré ma lettre ?", "Quand irais-je enfin à Poudlard ?" ou même à la fin "Suis-je un Cracmol ?". Ne vous inquiétez pas!
Poudlard vous a enfin contacté pour une tâche importante. Même si vous êtes trop vieux pour apprendre la sorcellerie, ils ont de la chance parce que vous avez appris une différente sorte de magie : la programmation.
Ils ont décidé de moderniser un peu leurs services d'admission et veulent que vous créiez un programme qui sera capable de remplir un fichier (template d'un lettre d'admission) avec le nom de l'étudiant. De cette manière, ils pourront réduire le coût en plumes et réduire la charge de travail des elfes!
Implémentez la fonction write(letter_template, name) en Python.
N'oubliez pas de lever une exception si elle se produit.
Les règles du Quidditch ont été établie en 1750 par le Département des jeux et sports magiques. Et il n'est dit nul part que l'arbitre ne peut recevoir un petit coup de main.
Madame Bibine est plutôt occupée à regarder pour le boutenchoc, le croc-en-manche, le hochequeue et tout un tas d'autres vilaines fautes de Quidditch. Donc elle a pensé que vous pourriez écrire une programme qui déciderait le vainqueur d'un match en se basant sur la liste des points.
La liste des scores serait fournie dans un fichier. Le contenu de ce fichier suivrait le format suivant :
S'il y a une erreur, pensez à lever une exception.
Rappelez-vous qu'attraper le vif d'or en plus de rapporter 150 points marque la fin du match.
Implémentez la fonction referee(score_file) en Python.
Pour votre prochain gros jeu, Dieu de la Destruction Massive : Edition Jeu du Siècle, vous devez créer une fonction pour charger et sauvegarder les données du joueur.
Vous devez créer deux fonctions : une pour sauvegarder les données et une pour les charger. Vous êtes libres d'enregistrer les données comme vous le souhaitez dans le fichier, mais placer un entier par ligne est probablement la méthode la plus simple. S'il n'y a pas de fichier à charger quand vous voulez utiliser le fontion load_data (par exemple, le joueur commence un nouveau jeu), vous devez lever une FileNotFoundError.
Les deux fonctions auront ces définitions :
#sauvegarder les 4 entiers dans le fichier nommé filename def save_data(filename, life, mana, position_x, position_y) #retourne un tuple contenant les valeurs (life, mana, position_x et position_y précédemment sauvegardées def load_data(filename)