# CP Python - Seance 6 ## Les acquis ![](https://i.imgur.com/JHidgdz.png) #### Ressources de la séance passée - [Guide de la séance 5](https://hackmd.io/@Tb5Z2PdeRLSnkxJEsjcLXg/ryJ4doo9P) - [Repl.it de la séance 5](https://repl.it/@GuillaumeGst/CP-Python-Seance-5) #### Exception * Error = event, which occurs during the execution of a program that disrupts the normal flow of the program's instructions. * Exception = a Python object that represents an error * In general, when a Python script encounters an error, it __raises__ an exception. ```pyth >>> 10 * (1/0) Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: division by zero >>> 4 + spam*3 Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'spam' is not defined >>> '2' + 2 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: Can't convert 'int' object to str implicitly ``` * Il est possible de __gérer__ des exceptions avec `try...except` ```pyth while True: try: x = int(input("Please enter a number: ")) break except ValueError: print("Oops! That was no valid number. Try again...") ``` * Il est possible de __déclencher__ soi-même des exceptions avec `raise` ```pyth >>> raise NameError('HiThere') Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: HiThere ``` ## A préparer: - [x] Regarder petit rappel vidéo (2 min) sur les tuples imbriqués [ICI](https://www.youtube.com/watch?v=yrt8Ylb3F5o) ```python lst = [('LINFO1101', ['Jean', 'Pierre']), ('LINFO1110', ['Jean']),\ ('LINFO1111', ['Jean']), ('LINFO1112', ['Jacques', 'Pierre']), \ ('LINFO1113', ['Pierre'])] # Comment afficher le deuxième tuple ? # Comment afficher le dernier tuple ? # Comment afficher seulement 'LINFO1110' ? # Comment afficher seulement 'Jacques' ? ``` - [x] Si nécessaire, exécuter ma version de la fonction [`binary_search`](https://repl.it/@GuillaumeGst/CP-Python-Seance-5#binary_search.py) du REPL pour afficher toutes les étapes de l'algorithme. > *Quelle est la pré-condition indispensable pour pouvoir utiliser l'algorithme `binary_search` ?* - [x] Essayer de comprendre `plus_frequent` avec [Python Tutor Visualize](http://pythontutor.com/visualize.html#code=def%20plus_frequent%28s%29%3A%0A%20%20s.lower%28%29.strip%28%29%0A%20%20max_count%20%3D%200%0A%20%20freq%20%3D%20''%0A%20%20for%20i%20in%20s%3A%0A%20%20%20%20count%20%3D%200%0A%20%20%20%20for%20j%20in%20s%3A%0A%20%20%20%20%20%20if%20j%20%3D%3D%20i%3A%0A%20%20%20%20%20%20%20%20count%20%2B%3D1%0A%20%20%20%20%20%20if%28count%20%3E%20max_count%29%3A%0A%20%20%20%20%20%20%20%20%20%20max_count%20%3D%20count%0A%20%20%20%20%20%20%20%20%20%20freq%20%3D%20j%0A%20%20return%20freq,%20max_count%0A%20%20%0Aplus_frequent%28%22pizza%22%29&cumulative=false&curInstr=75&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false) le code suivant: ```python= def plus_frequent(s): s.lower().strip() max_count = 0 freq = '' for i in s: count = 0 for j in s: if j == i: count +=1 if(count > max_count): max_count = count freq = j return freq, max_count ``` - [x] Implémentez la fonction `trouver_plus_long_PIN(lst)` une variante de `trouver_doublon(lst)` * La fonction `trouver_plus_long_PIN` permet de retrouver la personne dont le mot de passe est le plus sécurisé, parmi des mots de passe exclusivement numériques. * Autrement dit, si la liste `pin_list = [('Kim','Mens',1232445),('Olivier','Pecheur',8349),('Aragorn','Premier Du Nom',101)]` est donnée en argument, `trouver_plus_long_PIN(pin_list)` devra retourner le string `"Kim Mens"` * Contrainte: Veuillez ré-utiliser votre fonction `count_digits` de l'interrogation :wink: * Post-condition: si les mots de passe ont tous la même longueur, retourner le `Prénom Nom` du premier tuple - [ ] Implémentez la fonction suivante (niveau intermédiaire): ```python def getMax ( filename ): """ pre: filename est une chaîne de caractères post: - Renvoie le plus grand nombre réel >= 0 trouvé dans le fichier de nom filename. - Les lignes ne représentant pas un seul nombre réel >= 0 sont ignorées. - Si le fichier n'existe pas ou si une erreur d'entrée/sortie survient, la fonction renvoie la valeur -1, est imprime a message d'erreur. - Si le fichier ne contient aucune ligne valide, renvoie la valeur -1. Par exemple, la méthode retourne 10.0 pour le fichier de contenu suivant: 0.345.67 hello -543.0 500.0 1000.0 2000.0 10.0 3.1416 """ ``` > *Remarque: Comment écrire nous même le fichier de test ?* - Essayer de résoudre Session 6: Q* Hogwarts - Quidditch (niveau difficile) - Essayer de résoudre Session 6: Q* Sauvegarde (niveau intermédiaire/difficle)