vendredi29 May 29, 2020 [ ]: PY306-IC-Python Avancé - S3-2020 [1]: import os print(os.sys.version) 3.8.2 (default, Apr 27 2020, 15:53:34) [GCC 9.3.0] Des questions ? des choses que vous voulez qu’on voit ensemble en particulier ? - les modules. comment Faire un module, un packet - Objectif: pour la fin de la semaine prochaine: savoir publier un petit module en ligne afin qu’il soit installable 0.0.1 Ecrire des fonctions (pour se familiariser avec jupyter) Exercice. Ecrire une fonction ‘compte_caracteres’ qui compte le nombre de caractères de l’argument [3]: def compte_caracters(nom): """ Compte le nombre de caractères de l'argument exemple: compte_caracters("Malik Koné") -> 10 """ resultat = len(nom) return resultat [4]: compte_caracters("Malik Koné") [4]: 10 Avec une valeur par défaut [6]: def compte_caracters(nom='Une valeur par défaut au hasar'): resultat = len(nom) return resultat compte_caracters() # affiche le nombre de caractères de ma valeur par défaut [6]: 30 1 [ ]: Controler le type des arguments est ce que notre argument est une chaine de caractère [1]: def compte_caracters(nom='Une valeur par défaut au hasar'): # comment vérifier que la variable nom est une chaine de caractères ? if isinstance(nom, str): # isinstance vérifie le type de la variable nom return len(nom) else: # on lève une exception raise Exception(f"Notre variable 'nom' {nom} n'est pas de type 'str'") print(f"Un appel corret est :{compte_caracters('Ernesto Djedje')}") print(f"Un appel avec argument de mauvais type {compte_caracters(1234)}") Un appel corret est :14 ␣ --------------------------------------------------------------------------- ,→ Exception Traceback (most recent call␣ last) ,→ <ipython-input-1-e0d61819aa5a> in <module> 9 print(f"Un appel corret est :{compte_caracters('Ernesto Djedje')}") 10 ---> 11 print(f"Un appel avec argument de mauvais type␣ ,→{compte_caracters(1234)}") <ipython-input-1-e0d61819aa5a> in compte_caracters(nom) 5 else: 6 # on lève une exception ----> 7 raise Exception(f"Notre variable 'nom' {nom} n'est pas de␣ ,→type 'str'") 8 9 print(f"Un appel corret est :{compte_caracters('Ernesto Djedje')}") Exception: Notre variable 'nom' 1234 n'est pas de type 'str' [1]: # Un autre erreur print(123/0) 2 ␣ ,→--------------------------------------------------------------------------ZeroDivisionError Traceback (most recent call␣ last) ,→ <ipython-input-1-9ad347c04dc8> in <module> 1 # Un autre erreur ----> 2 print(123/0) ZeroDivisionError: division by zero [12]: une_liste = 'Il a plu hier soir.'.split(' ') ,→caractère selon les espaces print(une_liste, len(une_liste)) une_liste[3] une_liste[9] # split découpe la chaine de␣ # renvois le 4ème element # créer une erreur car il n'y a pas de 10 ème élément ['Il', 'a', 'plu', 'hier', 'soir.'] 5 ␣ --------------------------------------------------------------------------- ,→ IndexError Traceback (most recent call␣ last) ,→ <ipython-input-12-2df87c342b9e> in <module> 3 4 une_liste[3] # renvois le 4ème element ----> 5 une_liste[9] # créer une erreur car il n'y a pas de 10 ème élément IndexError: list index out of range [4]: une_liste_sans_espace = 'Il.a.plu.hier.soir.'.split(' ') print(une_liste_sans_espace, len(une_liste_sans_espace)) ['Il.a.plu.hier.soir.'] 1 [6]: une_liste_sans_espace = 'Il.a.plu-hier.soir.'.split('.') print(une_liste_sans_espace, len(une_liste_sans_espace)) ['Il', 'a', 'plu-hier', 'soir', ''] 5 3 [7]: une_liste_sans_espace = 'Il.a.plu-hier.soir.'.split('-') print(une_liste_sans_espace, len(une_liste_sans_espace)) ['Il.a.plu', 'hier.soir.'] 2 [3]: # utiliser une boucle while pour appeler fois notre fonction. une_liste_de_nom = ['zglibiti', 'coupé décalé', 'zaïco'] print(f"Notre variable une_liste_de_nom est de type {type(une_liste_de_nom)}") # compte_caracters(une_liste_de_nom) -> lève une exception # on appelle compte_caracters avec les éléments de la liste compteur = 0 while compteur < len(une_liste_de_nom): print(f"compteur={compteur}") # on sauve un élément de la liste un_element = une_liste_de_nom[compteur] # et on appel la fonction avec resultat = compte_caracters(un_element) print(f"Le nom {un_element} a {resultat} caractères. # ne pas oublier la condition d'arrête compteur += 1 compteur {compteur}") Notre variable une_liste_de_nom est de type <class 'list'> compteur=0 Le nom zglibiti a 8 caractères. compteur 0 compteur=1 Le nom coupé décalé a 12 caractères. compteur 1 compteur=2 Le nom zaïco a 5 caractères. compteur 2 [7]: # on fait la même chose mais en une ligne # les listes compréhensions [f"~{elt}~ à {compte_caracters(elt)} caractères." for elt in une_liste_de_nom] [7]: ['~zglibiti~ à 8 caractères.', '~coupé décalé~ à 12 caractères.', '~zaïco~ à 5 caractères.'] [9]: # les dictionnaires compréhension un_dictionnaire = {elt: compte_caracters(elt) for elt in une_liste_de_nom} print(un_dictionnaire) {'zglibiti': 8, 'coupé décalé': 12, 'zaïco': 5} 4 [15]: # Exercice: ecrire une fonction def lit_mots(une_phrase): """ Découpe la phrase en mots et affiche un dictionnaire avec le mot comme clef et le nombre de caractère comme valeur""" # code ma_liste = une_phrase.split(' ') mon_dico = {elt: compte_caracters(elt) for elt in ma_liste} return mon_dico lit_mots('Il a plu hier nuit.') ,→'hier': 4, 'nuit.':5} # doit renvoyer -> {'Il': 2, 'a': 1, 'plu': 3,␣ [15]: {'Il': 2, 'a': 1, 'plu': 3, 'hier': 4, 'nuit.': 5} [ ]: 5