<style> .sol{ color:green; } </style> # CP Python: Séance 9 ### 1. Repartir de ce [nouveau REPL](https://repl.it/join/sqscldet-guillaumegst) et terminer la QBF liée aux dictionnaires dans le fichier `qbf7.py` * Autrement dit, implémentez la fonction `topk_words(words,k)` en appelant les deux fonctions fonctions auxiliaires `topk(tuples,k)` __ET__ `counts(workds)` déjà définies dans le REPL. * Notez que dans ce cas-ci, je vous ai fourni deux implémentations de `topk(tuples,k)`, choisissez celle que vous préférez. * Assurez-vous que les tests fonctionnent dans le fichier `main.py`. ### 2. Classes et objets - [x] Regarder cette vidéo YouTube: https://youtu.be/apACNr7DC_s - [x] Lire [1 - Classes and objects - Basics ](https://syllabus-interactif.info.ucl.ac.be/syllabus/info1-theory/PART_III/classes_and_objects_I) - [x] Lire [2 - Classes and objects - Advanced](https://syllabus-interactif.info.ucl.ac.be/syllabus/info1-theory/PART_III/classes_and_objects_II) - [ ] Etre capable de refaire TOUS les exercices de la [phase de démarrage](https://syllabus-interactif.info.ucl.ac.be/syllabus/info1-exercises/PART_III/MISSION_8/preparation). Je vous interrogerai sur des exercices choisis sur le moment. __NB__ N'hésitez pas à repartir du fichier `objets.py` dans le REPL pour modifier/expérimenter les classes `Pair` et `Student`. De même, *Python Tutor Visualize* peut vous être utile pour représenter graphiquement les objets. ### 3. Envoyez-moi l'examen blanc que vous avez reçu ### Exercices choisis --- #### Exercices 1 & 2: Définitions et interprétation Python [10min] ```python= class Student : def __init__(self,n) : """ Initialise un nouvel objet de type Student avec un nom n donné. @pre: - @post: Un objet de type Student a été créé avec comme 'name' n, et un score None pour chacun des trois tests 'test1', 'test2' et 'test3' """ # nom de l'étudiant self.name = n # score reçu par l'étudiant sur trois tests # (initialement None car l'étudiant n'a pas encore passé les tests) self.test1 = None self.test2 = None self.test3 = None def average_score(self) : """" Calcul du score moyen que l'étudiant a obtenu sur les 3 tests. @pre: les variables d'instance test1, test2 et test3 contiennent des valeurs de type int @post: retourne la valeur moyenne de ces trois valeurs """ return (self.test1 + self.test2 + self.test3) / 3 ``` Les instructions suivant donnent un exemple de comment cette classe peut être utilisé: ```python= student = Student("Kim") student.test1 = 14.0 student.test2 = 10.5 student.test3 = 12.0 print("Bonjour, " + student.name + ". Vos scores sont:") print(student.test1) print(student.test2) print(student.test3) print("Votre score moyenne est " + str(student.average_score())) student2 = student print("Votre score moyenne est " + str(student2.average_score())) student = None student2 = None ``` --- **Classe, objet (ou instance)** ? **Constructeur et méthode d'initialisation** ? **Attribut (ou variable d'instance)** ? **Méthode d'instance** ? **Référence à un objet et la valeur None** ? **Référence à self** ? --- > *A représenter graphiquement: état de `student` L1, L4, L13. Hint:* > ![](https://i.imgur.com/yjqOJqf.png) __`student.name`__ ? __`student.average_score()`__ ? __`self.name`__ ? --- #### Exercice 4: Une classe simple [20m] ```python= class Pair: """ Une paire d'entiers """ def __init__(self, x=None, y=None): """ @pre - @post crée une paire (a,b) composée de x et y, ou une paire non-initialisée si aucune valeur de x et de y n'est donné lors de l'appel au constructeur """ self.a = x # le premier élément de la paire self.b = y # le second élément de la paire def __str__(self): return str(self.a) + ", " + str(self.b) ``` Considérons le code Python ci-dessous illustrant une utilisation de la classe Pair: ```python= p0 = Pair() ##1## p1 = Pair(0,0) ##2## p2 = Pair(1,1) ##3## p0.b = 3 ##4## p1.a = 10 ##5## p2.a = p1.a ##6## p2 = p1 ``` Expliquez les opérations effectuées par chacune de ces lignes. Pensez à utiliser une représentation graphique des différents objets telle que celle utilisée dans le syllabus ou les transparents en indiquant les valeurs des différentes variables d'instance. > A représenter graphiquement: les états des instances de Pair. Hint: > <img src="https://i.imgur.com/Y9nWTnD.png" width=600> --- #### Exercice 7: Egalité [10m] + à préparer Considérez les instructions suivantes qui utilisent la classe Pair vue précédemment: ```python= p1 = Pair(9, 42) p2 = Pair(9, 42) if (p1 == p2): print("Egaux en 1") ##1## p2 = p1 if (p1 == p2): print("Egaux en 2") ##2## ``` Lesquelles des lignes ##1## et/ou ##2## produiront-elles un message? Ajoutez une méthode `__eq__(self, p)` à la classe Pair qui compare la valeur de deux paires, de manière à ce que p1 == p2 retournera True à la ligne ##1##. Pensez à gérer également le cas où p == None. ```python= class Pair: def __init__(self, x, y): self.a = x self.b = y def __eq__ (self, p): """ @pre - @post Retourne true si la paire p est égale à l'objet. Retourne false sinon """ # À implémenter ``` ---