Ini`a`on Python

publicité
Ini$a$on Python Modules calcul scien7fique Monde Objet Modules système Bases Python Sources: -­‐  Guido van Rossum’s tutorial -­‐  Documenta7on de l’afpy (associa7on francophone python) -­‐  ‘’Learning Python’’ coll. O’REILLY -­‐  Site hGp://wikipython.flibuste.net -­‐  Cours Remy Mozul & Michèle Sanguillon Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 1 Déroulé • 
• 
• 
• 
• 
• 
• 
• 
Premiers pas Différents types d’objets Quelques instruc7ons Les fonc7ons Les modules et packages Les fichiers Les excep7ons Les classes Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon pause TP1 TP2 TP3 TP4 TP5 TP6 TP7 2 Premiers pas •  U7lisa7on de python en mode interac$f : –  pour calculer ou faire des choses simples –  pour mieux connaître le langage (aide en ligne) –  pour tester ses propres modules •  Tapez la commande : python ou ipython >>> 4+4 8 >>> # Commentaire >>> print (“Hello world !”) Hello world ! pour en sor7r : CTRL-­‐D (unix) ou quit() Octobre 2014 En 2.X : print est d’abord un mot clé >>> print “Hello world !” Hello world ! Mais il vaut mieux prendre l’habitude de l’u7liser comme une fonc7on DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 3 Premiers pas espaces >>> 4+4 4+4 ^ Indenta<onError: unexpected indent Structure du programme basée sur l’indenta$on Faites aGen7on de ne pas mélanger les espaces et les tabula7ons ! Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 4 Premiers pas •  U7lisa7on de python en interprétant un fichier script : –  Programme qu’on va pouvoir réu7liser –  Trace des exercices que nous allons faire •  Editer le fichier test.py : # Premier programme python pour tester son u<lisa<on print (“Hello world !”) Vous êtes prêts ? C’est par7… en mode interac7f … •  Exécu7on en ligne de commande : ou via un fichier script ! python test.py Hello world ! Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 5 Objets •  En python, tout est objet ⇒ Une variable n’est qu’un nom pointant vers la référence d’un objet. Pour chaque variable, on aura des méthodes associées et parfois des aGributs ! •  Différents types d’objets : –  simples : •  numériques & booléens •  chaines de caractères –  un peu plus complexes : •  listes, •  tuples, •  dic7onnaires –  encore plus complexes •  ceux définis dans des modules téléchargés (numpy, …) •  ceux que vous allez définir Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 6 Objets •  Typage dynamique lors de l’affecta7on (=) >>> a = 2 >>> type(a) 2.x : <type 'int'> 3.x : <class 'int'> Octobre 2014 Conven7ons : Variables : ma_variable Classes : MaClasse Méthodes : maMethode Constantes : MACONSTANTE python est sensible à la casse ! DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 7 Les numériques •  En7ers >>> a = 3 >>> type(a) 2.x : <type 'int'> 3.x : <class 'int’> >>> a / 5 2.x : 0 3.x : 0.6 >>> a // 5 2.x : 0 3.x : 0 Octobre 2014 •  Réels >>> b = 3. >>> type(b) 2.x : <type ’float'> 3.x : <class ’float’> >>> b / 5 0.6 •  Complexes >>> c = 4 + 6j >>> type(c) 2.x : <type ’complex'> 3.x : <class ’complex’> >>> c.real 4.0 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 8 Les numériques •  Opéra7ons : –  affecta7on : = –  opérateurs : +, -­‐, *, /, //, **, % –  priorité des opérateurs : (), **, * et /, + et – –  incrémenta7on : +=, -­‐= Pour plus de lisibilité laissez un espace avant et après les opérateurs –  fonc7ons intégrées : abs, float, int, sum, pow, … –  autres fonc7ons : –  module math : sqrt, sin, cos, log … Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 9 Les numériques •  Objets non modifiables (immutables) >>> a = 1 >>> id(a) 4301085752 >>> b = a >>> id(b) 4301085752 >>> a = a+1 >>> id(a) 4312332016 Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 10 Les booléens •  2 valeurs : True ou False >>> p = False >>> type(p) 2.x : <type ’bool'> 3.x : <class ’bool’> •  Objets non modifiables Tous les types de variables peuvent être interprétés de manière booléenne. Tout ce qui n’est pas faux est vrai ! Octobre 2014 •  Opéra7ons : –  Non >>> p = False >>> not(p) True –  Et >>> 7>5 and 2>2 False –  Ou >>> 7>5 or 2>2 True DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 11 Les chaines de caractères •  Expressions entre ‘’ ‘’ ou ‘ ‘ ou ‘’ ‘’ ‘’ ‘’ ‘’ ‘’ >>> ma_chaine =‘’Bonjour’’ >>> type(ma_chaine) 2.x : <type ’str'> 3.x : <class ’str’> >>> print (ma_chaine) Bonjour Octobre 2014 •  Caractères spéciaux : \, \n >>> print(‘Il m\’a dit bonjour\n’) Il m’a dit bonjour •  Indexa7on/découpage >>> ma_chaine[1] ‘o’ Les indices débutent à 0 ! DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 12 Découpage >>> a=‘BONJOUR’ a[index début : index fin de découpage : pas ] B
0
-­‐7
0 -­‐7 1
-­‐6
O
1
-­‐6
2
-­‐5
N
2
-­‐5
3
-­‐4
J
3
-­‐4
>>>a[-­‐2] ‘U’ >>>a[:-­‐4]
‘BON’ 4
-­‐3
O
4
-­‐3
5
-­‐2
U
5
-­‐2
>>>a[1:] ‘ONJOUR’
>>>a[1:4]
‘ONJ’ 6
-­‐1
R 6
-­‐1
>>>a[-­‐2:]
‘UR’ >>> a[::2]
‘BNOR’ 7
0 index de début index début inversé index de fin de découpage index de fin de découpage inversé
>>> a[1] ‘O’ >>>a[:4] ‘BONJ’ Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon >>> a[::-­‐2]
‘RONB’ 13 Les chaines de caractères •  Autres méthodes •  Concaténa7on >>> ma_chaine = ‘’Good ’’ + ‘’morning !’’ >>> print(ma_chaine) Good morning ! •  Répé77on >>> ma_chaine = ‘’Coucou ! ‘’ * 3 >>> print(ma_chaine) Coucou ! Coucou ! Coucou ! Octobre 2014 >>> ma_chaine = ‘Bonjour’ >>> len(ma_chaine) # longueur 7 >>> ma_chaine.upper() # majuscules ‘BONJOUR’ >>> ‘u’ in ma_chaine # recherche True Pour connaître les méthodes associées à un type d’objet, u7lisez la commande dir : >>> dir(str) ou >>> dir(ma_chaine) DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 14 Les listes •  Ce sont des collec7ons ordonnées d’objets qui sont indiqués entre crochets >>> ma_liste = [5, ‘star’, 3.1416] >>> type(ma_liste) 2.x : <type ’list'> 3.x : <class ’list’> •  Une liste peut contenir un objet complexe >>> ma_liste = [5, ‘star’, [3000, 12000]] •  Créa7on d’une liste vide pour typer la variable •  Les objets d’une liste sont rendus accessibles par l’intermédiaire d’un index et peuvent être découpés : >>> ma_liste = [5, ‘star’, [3000, 12000]] >>> ma_liste[1] ‘star’ >>> ma_liste[2][0] 3000 >>> ma_liste[::2] [5, [3000, 12000]] >>> ma_liste= [] Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 15 Les listes •  Quelques méthodes associées : >>> stars=[‘vega’,’HD232862’,’xiboo’,‘aldebaran’] >>> print(stars) [‘vega’,’HD232862’,’xiboo’, ‘aldebaran’] >>> stars.pop(1) ’HD232862’ >>> print(stars) [‘vega’,’xiboo’, ‘aldebaran’] >>> stars.append(‘sirius’) [‘vega’,’xiboo’,’aldebaran’, ’siruis’] >>> stars.sort() [‘’aldebaran’, sirius’, ’vega’,’xiboo’] >>> del stars[0] >>> print(stars) [‘sirius’, ’vega’,’xiboo’] >>> stars.reverse() >>> print(stars) [‘xiboo’,’vega’] Octobre 2014 •  Fonc7on range : 2.X >>> a = range(10) 3.X >>> a = list(range(10)) >>> print(a) [0,1,2,3,4,5,6,7,8,9] Pour connaître les méthodes associées à un type d’objet, u7lisez la commande dir : >>> dir(list) ou >>> dir(stars) Pour avoir de l’aide sur la classe ou sur une de ses méthodes, u7lisez la commande help : >>> help(list) ou >>> help(stars) ou >>> help(stars.pop) DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 16 Les listes •  Les listes sont modifiables (mutables) >>> ma_liste[2][0] = 20 >>> a = [1, 2, 3] >>> id(a) 4301149384 >>> b = a >>> id(b) 4301149384 >>> a.append(4) >>> id(a) 4301149384 Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 17 Les tuples •  Ce sont des collec7ons ordonnées d’objets qui sont indiqués entre parenthèses >>> mon_tuple= (5, ‘star’, 3.1416) >>> type(mon_tuple) 2.x : <type ’tuple'> 3.x : <class ’tuple’> •  Les tuples fonc7onnent comme les listes sauf qu’il ne peuvent pas être modifiés. Ils sont non modifiables. >>> mon_tuple [1][0] = 20 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'str' object does not support item assignment •  Il n’ont pas de méthodes associées mais supportent les opéra7ons usuelles de séquence : >>> (1, 2) + (3, 4) (1, 2, 3, 4) >>> (1, 2) * 4 (1, 2, 1, 2, 1, 2, 1, 2) >>> mon_tuple = (1, 2, 3, 4)
>>> mon_tuple[0] 1 >>> len(mon_tuple)
4 # Concaténa7on # Répé77on # Indexa7on # Longueur Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 18 Les dic7onnaires •  Ce sont des tableaux associa7fs définis entre accolades >>> dico= {‘Eric’:’tennis’, ‘Franck’: ‘basket’} >>> type(dico) 2.x : <type ’dict'> 3.x : <class ’dict’> •  Déclara7on dic7onnaire >>> dico={} # déclara7on >>> dico= {‘Eric’:’tennis’, ‘Franck’: ‘basket’} # déclara7on •  Chaque objet est accédé par sa clé >>> dico[’Franck’] ‘basket’ Les clés du dic7onnaire sont des objets non modifiables => les clés peuvent être des nombres, des booléens, des chaines de caractères et/ou des tuples •  Les dic7onnaires sont des objets modifiables (mutables) Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 19 Les dic7onnaires •  Ajout d’un élément •  Liste des clés et valeurs •  Suppression d’un élément •  Test de l’existence d’une clé: >>> dico[‘Florent’]=‘badminton’ >>> dico {‘Eric’:’tennis’, Franck’: ‘basket’, ‘Florent’=‘badminton’} >>> del dico[‘Franck’] •  Nombre d’éléments >>> len(dico) 2 Octobre 2014 >>> dico.keys() [‘Eric’ ‘Florent’] >>> dico.values() [‘tennis’, ‘badminton’] en 2.x : >>> dico.has_keys(‘Eric’) True en 3.x : >>> ‘Eric’ in dico.keys() True DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 20 TP étape 1 •  Ecrire un pe7t programme qui permeGe de mul7plier par 2 une variable saisie au clavier (u7lisez la fonc7on input en 3.x ou raw_input en 2.x) et d’imprimer le résultat à l’écran Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 21 TP étape 1 • 
Ecrire un pe7t programme qui permeGe de mul7plier par 2 une variable saisie au clavier et d’imprimer le résultat à l’écran #!/usr/bin/python # -­‐*-­‐ coding: u…-­‐8 -­‐*-­‐ # Programme d’appren7ssage de python x = int(input("Rentrer la valeur de votre variable : ")) # Saisie de la variable resultat = x * 2 # On effectue le traitement print ("Quand votre variable vaut " + str(x) + ", le résultat vaut " + str(resultat) + " !") # On imprime le résultat Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 22 Instruc7ons de contrôle de flux Test : •  Exemple : •  Syntaxe : If condi$on: >>> if x == 'hello': instruc$on(s) … …
…
…
…
elif condi$on: instruc$on(s) else: instruc$on(s) •  Condi7ons : <, <=, >, >=, <>, !=, ==, is, is not and, or, not •  Instruc7on spéciale : print('hello too!’) elif x == 'bonjour': print('bonjour aussi!’) else: print(’je ne comprends pas !’) AGen7on à l’indenta$on et au : ! pass Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 23 Instruc7ons de contrôle de flux Boucles : •  2 types de boucles : • 
–  Boucle énumérée : for –  Boucle avec condi7on : while •  Syntaxe : • 
for variable in liste_variables : Instruc7ons while condi7on : Instruc7ons Instruc7ons spéciales : –  break –  con7nue –  pass • 
• 
Exemple 1 : >>> a = ['hello', 'world'] >>> for val in a: ... print(val) hello world Exemple 2 : >>> a = ['hello', 'world'] >>> for index in range(len(a)): ... print(index, a[index] ) 0 hello 1 world Exemple 3 : >>> i = 1 >>> while i <= 5: ... print(i) ... i = i + 1 AGen7on à l’indenta$on et au : ! Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 24 TP étape 2 •  Rajouter une boucle pour itérer sur la demande de nombre et le calcul du résultat, et ce jusqu’à qu’on saisisse le nombre 0 •  Indiquez si le résultat est posi7f ou néga7f Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 25 TP étape 2 Rajouter une boucle pour itérer sur la demande de nombre et le calcul du résultat, et ce jusqu’à qu’on saisisse le nombre 0. Indiquez si le résultat est posi7f ou néga7f #!/usr/bin/python # -­‐*-­‐ coding: u…-­‐8 -­‐*-­‐ # Programme d’appren7ssage de python x = 1 # Ini$alisa$on de x while(x): # Boucle tant que x différent de 0 x = int(input("Rentrer la valeur de votre variable (tapez 0 pour arrêter) : ")) resultat = x * 2 print ("Quand votre variable vaut " + str(x) + ", le résultat vaut " + str(resultat) + " !") if (resultat > 0): print("Ce résultat est posi$f.") elif (resultat < 0): print("Ce résultat est néga$f.") else: print("Ce résultat est nul. ") Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 26 Fonc7ons •  La défini7on d’une fonc7on permet : ⇒ de découper un code en morceaux ⇒ de pouvoir u7liser ceGe par7e de code à plusieurs endroits •  Une fonc7on est définie avec le mot clé def : >>> def ma_fonc7on(a,b): # def nom(arguments): … ‘’ ‘’ ‘’ produit de deux nombres’’ ‘’ ‘’ # chaine de documenta7on … return a * b # retourne le résultat >>> ma_fonc7on(5,4) La docstring ou chaine de 20 documenta7on con7ent le texte qui apparaitra lorsque le développeur fera un help de ceGe fonc7on Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 27 Fonc7ons •  Les paramètres peuvent avoir une valeur par défaut >>> def ma_fonc7on(a=5,b=7): … return a * b >>> ma_fonc7on(2) 14 # def nom(arguments): # retourne le résultat •  Une fonc7on retourne toujours une valeur. Une fonc7on sans return (procédure) retourne None. Il existe des fonc7ons prédéfinies dans les buil7ns (liGéralement "fabriquées dedans") >>> dir(__buil7ns__) Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 28 TP étape 3 •  Ecrire une fonc7on qui effectue le calcul sur la variable Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 29 TP étape 3 #!/usr/bin/python # -­‐*-­‐ coding: u…-­‐8 -­‐*-­‐ #-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐on définit la fonc$on def maFonc$on(t): """ Fonc$on développée pour mul$plier un nombre par deux """ image = 2. * t return image #-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐ le programme principal # Programme d’appren7ssage de python x = 1 # Ini7alisa7on de x while(x): # Boucle tant que x différent de 0 x = int(input("Rentrer la valeur de votre variable (tapez 0 pour arrêter) : ")) resultat = maFonc$on(x) print ("Quand votre variable vaut " + str(x) + ", le résultat vaut " + str(resultat) + " !") if (resultat > 0): print("Ce résultat est posi7f.") elif (resultat < 0): print("Ce résultat est néga7f.") else: print("Ce résultat est nul. ") Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 30 Les modules •  Un module python est un fichier (.py) qui con7ent du code python ⇒ Il fournit un moyen facile d’organiser des composants ⇒ Il permet de regrouper la défini7on de fonc7ons, de structures de données, de classes ⇒ Il permet de fournir des bibliothèques à intégrer dans les programmes •  La bibliothèque standard de python fournit de nombreux modules qui permeGent de réaliser les tâches courantes : –  en 2.x : hGps://docs.python.org/2/library/index.html –  en 3.x : hGps://docs.python.org/3/library/index.html •  On peut aussi installer de nouveaux modules (pip) ou créer ses propres modules Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 31 Les modules •  Le nom du module est le nom du fichier (sans l’extension .py) •  Pour u7liser un module ou une fonc7on d’un module, il faut l’importer dans son programme : –  Importer un module avec son espace de noms >>> import os >>> print(os.getcwd()) '/Users/bourgeat/maVM/TPs’ –  Importer toutes les fonc7ons d’un module sans son espace de noms >>> from os import * >>> print(getcwd()) '/Users/bourgeat/maVM/TPs’ –  Importer une fonc7on dans son propre espace de nom >>> from os import getcwd >>> print(getcwd()) '/Users/bourgeat/maVM/TPs’ Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 32 Les modules • 
Répertoires d’installa7on des modules : • 
Le chemin de recherche des modules : $PYTHONPATH >>> import sys >>> sys.path ['', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', '/System/Library/
Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/System/Library/Frameworks/
Python.framework/Versions/2.7/lib/python2.7/plat-­‐darwin', '/System/Library/Frameworks/
Python.framework/Versions/2.7/lib/python2.7/plat-­‐mac', '/System/Library/Frameworks/
Python.framework/Versions/2.7/lib/python2.7/plat-­‐mac/lib-­‐scriptpackages', '/System/Library/
Frameworks/Python.framework/Versions/2.7/Extras/lib/python', '/System/Library/Frameworks/
Python.framework/Versions/2.7/lib/python2.7/lib-­‐tk', '/System/Library/Frameworks/Python.framework/
Versions/2.7/lib/python2.7/lib-­‐old', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/
python2.7/lib-­‐dynload', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/
PyObjC', '/Library/Python/2.7/site-­‐packages'] Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 33 Les packages •  Les packages sont des collec$ons de modules –  Exemple : matplotlib •  En réalité ce sont des répertoires dans lesquels sont stockés les modules –  Le répertoire appar7ent à un répertoire du chemin d’accès des modules –  Le répertoire con7ent le fichier __init__.py •  U7lisa7on d’un package : via la commande import Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 34 TP étape 4 •  Modifier la fonc7on pour renvoyer le calcul de la racine carrée (module de la bibliothèque standard). Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 35 TP étape 4 #!/usr/bin/python # -­‐*-­‐ coding: u…-­‐8 -­‐*-­‐ import math #-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐on définit la fonc7on def maFonc7on(t): """ Fonc7on développée pour mul7plier un nombre par deux """ image = math.sqrt(abs(t)) return image #-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐ le programme principal # Programme d’appren7ssage de python x = 1 # Ini7alisa7on de x while(x): # Boucle tant que x différent de 0 x = int(input(‘’ Rentrer la valeur de votre variable (tapez 0 pour arrêter) : ’’)) resultat = maFonc7on(x) print (‘’Quand votre variable vaut ‘’ + str(x) + ‘’ , le résultat vaut ‘’ + str(resultat) + ‘’ ! ’’) Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 36 Les fichiers •  Ouverture –  f=open(‘’filename’’,’’mode’’) –  Mode = r (read), w (write), a (append), b (binary) •  Lecture – 
– 
– 
– 
f.read() : retourne la totalité du fichier dans une seule chaine f.readline() : retourne 1 ligne du fichier f.readlines() : retourne une liste de lignes f.read(n) : retourne au plus les n caractères suivants •  Ecriture –  f.write(chaine) : écrit une chaine de caractères dans le fichier –  f.writelines(liste) : écrit une liste de chaines dans le fichier •  Fermeture –  f.close() Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 37 TP étape 5 •  Lire les valeurs à calculer dans le fichier vals.txt et écrire les résultats dans le fichier res.txt Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 38 TP étape 5 #!/usr/bin/python # -­‐*-­‐ coding: u…-­‐8 -­‐*-­‐ import math #-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐on définit la fonc7on def maFonc7on(t): """ Fonc7on développée pour mul7plier un nombre par deux """ image = math.sqrt(abs(t)) return image #-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐ le programme principal f_in = open("vals.txt","r") f_out = open("res.txt","w") for val in f_in.readlines(): x = int(val) resultat = maFonc7on(x) f_out.write("Quand votre variable vaut " + str(x) + ", le résultat vaut " + str(resultat) + " !\n") f_in.close() f_out.close() Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 39 Erreurs et excep7ons •  Erreurs de syntaxe •  Excep7ons : liées à l’exécu7on On peut créer ses propres noms d’excep7on Nom de l’excep7on Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 40 Erreurs et excep7ons •  Gérer une excep7on : try: instruc7on(s) except: instruc7on(s) else: instruc7on(s) finally: instruc7on(s) •  Déclencher une excep7on : raise … Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 41 TP étape 6 •  Tester votre programme avec dans le fichier vals.txt une ligne contenant une chaine de caractères et constater l’excep7on •  Rajouter la ges7on d’une excep7on qui permet de prendre en charge la lecture de quelque chose qui n’est pas un nombre Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 42 TP étape 6 #!/usr/bin/python # -­‐*-­‐ coding: u…-­‐8 -­‐*-­‐ import math #-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐on définit la fonc7on def maFonc7on(t): """ Fonc7on développée pour mul7plier un nombre par deux "" » image = math.sqrt(abs(t)) return image #-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐ le programme principal f_in = open("vals6.txt","r") f_out = open("res6.txt","w") for val in f_in.readlines(): try: x = int(val) except: resultat = 'NaN' else: resultat = maFonc7on(x) f_out.write("Quand votre variable vaut " + val.strip(‘\n’)+ ", le résultat vaut " + str(resultat) + " !\n") f_in.close() f_out.close() Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 43 Classes •  Les classes permeGent de définir des types d’objets •  Chaque classe possède : –  un nom –  des aGributs –  des méthodes •  Elles sont définies à l’aide du mot clé class : >>> class Vehicule: … Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon AGen7on à l’indenta$on et au : ! 44 Classes >>> class Vehicule: def__init__(self, numero): self.immatricula7on=numero self.revisions=[] def setDerniereRevision(self, date): self.revisions.append(date) def getDerniereRevision(self): if self.revisions: return self.revisions[-­‐1] else: return‘’Aucune révision à ce jour’’ def afficheCaracteris7ques(self): print(‘’Immatricula7on = ‘’+ self.immatricula7on) >>> scooter_1 = Vehicule(‘’1234 AAA34’’) >>> print(scooter_1.getDerniereRevision()) Aucune révision à ce jour >>> scooter_1. afficheCaracteris7ques() Immatricula7on = 1234 AAA 34 Octobre 2014 Dans la défini$on d’une méthode, le 1er paramètre est une référence à l'instance en cours de la classe. Par conven7on, cet argument est toujours nommé self.. DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 45 Classes •  L’héritage se définit lors de la déclara7on de la classe >>> class Voiture(Vehicule): … def __init__ (self, numero, nb_portes): … Vehicule.__init__(self,numero) … self.nb_portes = nb_portes >>> scooter_1 = Vehicule("1234 AAA 34") >>> scooter_1.afficheCaracteris7ques() Immatricula7on = 1234 AAA 34 >>> voiture_1 = Voiture("5678 BBB 34", 4) >>> voiture_1.afficheCaracteris7ques() Immatricula7on = 5678 BBB 34 Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 46 Classes •  La surcharge est faite en redéfinissant une fonc7on dans la classe : >>> class Voiture(Vehicule): … def __init__ (self, numero, nb_portes): … Vehicule.__init__(self, numero) … self.nb_portes = nb_portes … def afficheCaracteris$ques (self): … print(‘’ Immatricula$on = ‘’ + self.immatricula$on) … print(‘’ Nombre de portes = ‘’ + str(self.nb_portes)) >>> voiture_1 = Voiture("5678 BBB 34", 4) >>> voiture_1.afficheCaracteris7ques() Immatricula7on = 5678 BBB 34 Nombre de portes = 4 Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 47 TP étape 7 •  Définir la classe Carre : –  qui a pour aGributs : •  la longueur d’un côté •  La diagonale –  qui a pour méthodes : •  Le constructeur •  La méthode getDiagonale qui renvoie la valeur de la diagonale •  Créer des carrés dont la longueur du côté est définie dans le fichier val.txt et écrire la longueur de la diagonale dans le fichier res.txt Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 48 TP étape 7 #!/usr/bin/python # -­‐*-­‐ coding: u…-­‐8 -­‐*-­‐ import math #-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐Class Carre class Carre: def __init__( self, longueur): self.cote = longueur try: self.diagonale = math.sqrt(2*longueur**2) except: raise def getDiagonale( self): return self.diagonale Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 49 TP étape 7 #-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐ le programme principal f_in = open("vals.txt","r") f_out = open("res6.txt","w") for val in f_in.readlines(): try: x = Carre(int(val)) except: resultat = 'NaN' else: resultat = x.getDiagonale() msg ="Quand votre variable vaut " + val.strip(‘\n’) + ", le résultat vaut " + str(resultat) + " !\n" f_out.write(msg) f_in.close() f_out.close() Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 50 Je vous remercie pour votre aGen7on Octobre 2014 DEV@LR -­‐ Ini7a7on Python Michèle Sanguillon 51 
Téléchargement