Академический Документы
Профессиональный Документы
Культура Документы
C. Aperghis-Tramoni
Dpartement dInformatique
Origine de Python.
Python a t cr en 1991 aux Pays-Bas par Guido van Rossum.
C. Aperghis-Tramoni
Dpartement dInformatique
Le mode immdiat..
Il permet l'excution de commandes simples pour s'habituer au langage.
Le systme indique qu'il est en mode immdiat en affichant : >>>
L'utilisateur introduit une commande.
L'interprteur value la ligne.
Le rsultat apparat sur l'cran
coruscant:~/Langages/Python chris$ python
Python 2.4.2 (#1, Nov 29 2005, 10:58:42)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1495)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 19864 * 76107
1511789448
>>> ^D
coruscant:~/Langages/Python chris%
C. Aperghis-Tramoni
Dpartement dInformatique
Le mode programme.
La seconde manire d'utiliser l'interprteur consiste crer un fichier et a le lui soumettre.
coruscant:~/Langages/Python chris$ cat bonjour.py
print "Bonjour tout le monde.\n"
coruscant:~/Langages/Python chris$
coruscant:~/Langages/Python chris$ python bonjour.py
Bonjour tout le monde.
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
Dpartement dInformatique
Le mode calculette.
Python interprt
Utilisation en mode calculette .
Exemple :
C. Aperghis-Tramoni
Dpartement dInformatique
Sortie de l'interprteur.
Une mthode systme permet de quitter l'interprteur, c'est la mthode exit() du module sys.
coruscant:~/Langages/Python chris$ python
Python 2.4.2 (#1, Nov 29 2005, 10:58:42)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1495)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.exit()
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
Dpartement dInformatique
Le projet Parrot.
Projet Parrot
http://www.parrotcode.org)
C. Aperghis-Tramoni
Dpartement dInformatique
Python compil.
http://pirate.tangentcode.com/
Etape 1 : Tlcharger la dernire version de la machine virtuelle Parrot.
http://www.parrotcode.org/source.html
Etape 2 : Tlcharger la version la plus rcente de Python.
http://python.org/
Etape 3 : Installer Parrot en prcisant bien le path (--prefix = `pwd`).
perl Configure.pl --prefix=`pwd`
make
Etape 4 : On compile Python en tant que librairie partage.
./configure --enable-share
make
Etape 5 : Lancer les tests.
% python PirateTest.py
Normalement ca devrait marcher...
C. Aperghis-Tramoni
Dpartement dInformatique
Les bibliothques.
http://python.developpez.com/outils/Librairies/
C. Aperghis-Tramoni
Dpartement dInformatique
Entiers longs.
coruscant:~/Langages/Python chris$ python
Python 2.4.2 (#1, Nov 29 2005, 10:58:42)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1495)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 45091983761066340320578910442861540673267
45091983761066340320578910442861540673267L
>>> ^D
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
10
Dpartement dInformatique
C. Aperghis-Tramoni
11
Dpartement dInformatique
Expressions.
Le calcul du rsultat dune expression dpend de la nature des oprateurs.
Deux entiers produisent un rsultat entier.
coruscant:~/Langages/Python chris$ python
Python 2.4.2 (#1, Nov 29 2005, 10:58:42)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1495)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 5/3
1
>>> ^D
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
12
Dpartement dInformatique
Exemples.
C. Aperghis-Tramoni
13
Dpartement dInformatique
Les chanes.
Chanes de caractres .
coruscant:~/Langages/Python chris$ python
Python 2.4.2 (#1, Nov 29 2005, 10:58:42)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1495)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> "Le langage Python."
'Le langage Python.'
>>> ^D
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
14
Dpartement dInformatique
C. Aperghis-Tramoni
15
Dpartement dInformatique
C. Aperghis-Tramoni
16
Dpartement dInformatique
Multiplication de chane.
Il existe une opration pour multiplier les chanes de caractres.
C'est l'oprateur "*" qui permet de la raliser.
coruscant:~/Langages/Python chris$ python
Python 2.4.2 (#1, Nov 29 2005, 10:58:42)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1495)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> "Bonjour" + " tout le" + " monde"
'Bonjour tout le monde'
>>> "Trois fois " + "Bonjour " * 3
'Trois fois Bonjour Bonjour Bonjour '
>>> "Bonjour"[0]
'B'
>>> "Bonjour"[1]
'o'
>>> "Bonjour"[-1]
'r
>>> ^D
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
17
Dpartement dInformatique
join() Concatne
une liste de
chanes en une
chane unique.
find() Donne la
position d'une
sous-chane dans
une chane.
count() Compte le
nombre de souschanes dans la
chane :
C. Aperghis-Tramoni
18
Dpartement dInformatique
upper() : convertit
une chane en
majuscules.
capitalize()
Convertit la
premire lettre en
majuscule.
title() Convertit la
premire lettre de
tous les mots en
majuscule.
C. Aperghis-Tramoni
19
Dpartement dInformatique
strip() Supprime
les blancs inutiles
en dbut et en de
chane
replace() Remplace
une sous-chane
par une autre.
C. Aperghis-Tramoni
20
Dpartement dInformatique
isalpha() Renvoie
la valeur vrai si la
chane est
constitue de
lettres et si
len(s)>0.
isdigit() ) Renvoie
la valeur vrai si la
chane est
constitue de
chiffres et si
len(s)>0
C. Aperghis-Tramoni
21
Dpartement dInformatique
isupper() Renvoie
la valeur vrai si la
chane n'est
constitue que de
lettres majuscules.
isspace() Renvoie
la valeur vrai si la
chane n'est
constitue que
d'espaces.
C. Aperghis-Tramoni
22
Dpartement dInformatique
center(n) Renvoie
une copie de la
chane centre sur
n caractres.
ljust(n) Renvoie
une copie de la
chane justifie
gauche sur n
caractres.
C. Aperghis-Tramoni
23
Dpartement dInformatique
replace(x,y,n)
Remplace dans la
chane les n
premires
occurrences de la
sous chane x par
la chane y.
C. Aperghis-Tramoni
24
Dpartement dInformatique
La mthode translate().
translate(t, deletechars = ' ') Renvoie une copie de la chane dans laquelle tous les
caractres deletechars auront t supprims et ou les caractres restants auront t
substitue par l'intermdiaire de la table de substitution passe comme premier
paramtre.
Si la chane de dpart est normale, la table est une chane de 256 caractres.
Si la chane de dpart est une chane Unicode, la table est une chane Unicode de 65536
caractres.
Chaque caractre est remplac par le caractre table[ord(c)]
La table peut tre cre au moyen de la mthode string.maketrans(source, destination).
Cette mthode gnre une chane de 256 caractres dans laquelle chaque caractre de la
chane source est remplac par le caractre de la chane destination.
C. Aperghis-Tramoni
25
Dpartement dInformatique
Exemples.
C. Aperghis-Tramoni
26
Dpartement dInformatique
Sous chanes.
coruscant:~/Langages/Python chris$ python
Python 2.4.2 (#1, Nov 29 2005, 10:58:42)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1495)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> "Bonsoir"[1-3]
'i'
>>> "Bonsoir"[1:3]
'on'
>>> "Bonsoir"[3:]
'soir'
>>> "Bonsoir"[:3]
'Bon'
>>> "Bonsoir"[3:3]
'
>>> "Bonsoir"[-3:-1]
'oi'
>>> ^D
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
27
Dpartement dInformatique
C. Aperghis-Tramoni
28
Dpartement dInformatique
Conversions.
Il existe des mcanismes qui procdent aux transformations ncessaires afin conserver lintgrit
du type.
Par exemple, construire une chane de caractres partir de donnes htrognes (chaines, valeurs
numriques).
Toute valeur se transforme en chane de caractres en faisant rfrence la fonction repr() ou plus
simplement en reprsentant cette valeur entre antiquotes.
C. Aperghis-Tramoni
29
Dpartement dInformatique
Unicode.
C. Aperghis-Tramoni
30
Dpartement dInformatique
C. Aperghis-Tramoni
31
Dpartement dInformatique
Les variables.
Un nom de variable est constitu de caractres alphabtiques,
de chiffres et du caractre blanc soulign (_).
Le premier caractre nest jamais un chiffre.
Les lettres majuscules sont diffrencies des lettres minuscules.
coruscant:~/Langages/Python chris$ python
Python 2.4.2 (#1, Nov 29 2005, 10:58:42)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1495)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> variable = 10
>>> Variable = 20
>>> variable
10
>>> Variable
20
>>> An_2007 = 2007
>>> An_2007
2007
>>> _2007 = 2007
>>> _2007
2007
>>> 25Decembre = "Noel"
File "<stdin>", line 1
25Decembre = "Noel"
^
SyntaxError: invalid syntax
>>> ^D
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
32
Dpartement dInformatique
C. Aperghis-Tramoni
33
Dpartement dInformatique
La variable standard.
En mode interactif, tout rsultat est affect une variable standard (_. ).
Cette variable est affecte chaque fois qu'un calcul est effectu.
coruscant:~/Langages/Python chris$ python
Python 2.4.2 (#1, Nov 29 2005, 10:58:42)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1495)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 2**16
65536
>>> print _
65536
>>> _ / 4
16384
>>> _ / 5.0
3276.8000000000002
>>> "Bonjour."
'Bonjour.'
>>> print _
Bonjour.
>>> _[2:4]
'nj'
>>>
>>> ^D
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
34
Dpartement dInformatique
Affectation et comparaison.
Comme en Perl, le signe = effectue laffectation dune valeur une variable.
Ces loprateur == qui permet la comparaison de deux valeurs .
coruscant:~/Langages/Python chris$ python
Python 2.4.2 (#1, Nov 29 2005, 10:58:42)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1495)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> A1 = 10
>>> A2 = 20
>>> A1 == A2
False
>>> ^D
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
35
Dpartement dInformatique
Affectations.
[coruscant:~/python] coruscant:~ chris$ coruscant:~/Langages/Python chris$ Python
2.4.2 (#1, Nov 29 2005, 10:58:42)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1495)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> A = B = C = 50
>>> A
50
>>> B
50
>>> C
50
>>> A,B,C = 100,101,102
>>> A
100
>>> B
101
>>> C
102
>>> A,B = B,A
>>> A
101
>>> B
100
>>> ^D
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
36
Dpartement dInformatique
Expressions.
C. Aperghis-Tramoni
37
Dpartement dInformatique
Les oprateurs.
Arithmtiques
Comparaison
Logiques
Addition
==
Egal
and
Intersection
Soustraction
>
Suprieur
or
Union
Multiplication
<
Infrieur
not
Complmentation
**
Exponentiation
>=
Suprieur ou gal
Division
<=
Infrieur ou gal
//
Division tronque
!=
Diffrent
Modulo
C. Aperghis-Tramoni
38
Dpartement dInformatique
Priorits.
Hirarchie classique :
/ plus prioritaire que *
* Plus priotaire que + and plus prioritaire que or
Pour ne pas avoir de surprises, toujours utiliser une notation parenthse.
coruscant:~/Langages/Python chris$ python
Python 2.4.2 (#1, Nov 29 2005, 10:58:42)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1495)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 10 ** 2
100
>>> 10 % 3
1
>>> 10 < 20
True
>>> x = 5
>>> (3*(x**2))+(5*x)+10
110
>>> ^D
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
39
Dpartement dInformatique
<<
|
&
^
C. Aperghis-Tramoni
40
Dpartement dInformatique
C. Aperghis-Tramoni
41
Dpartement dInformatique
A or B
Vrai
Vrai
Vrai
Vrai
Faux
Vrai
Faux
Vrai
Vrai
Faux
Faux
Faux
A and B
Table de vrit
A
A and B
Faux
Vrai
Faux
Faux
Faux
Faux
Vrai
Vrai
Faux
Vrai
Faux
Vrai
C. Aperghis-Tramoni
Dpartement dInformatique
Exemples.
Cration d'une liste.
coruscant:~/Langages/Python chris$ python
Python 2.4.2 (#1, Nov 29 2005, 10:58:42)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1495)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> (1 or 3, 4 or 2, 6 or 8, 9 or 5)
(1, 4, 6, 9)
>>> (None or 3, 4 or None, 6 or 0, 0 or 5)
(3, 4, 6, 5)
>>> (0 or None, None or 0)
(None, 0)
>>> (1 and 3, 4 and 2, 6 and 8, 9 and 5)
(3, 2, 8, 5)
>>> (None and 3, 4 and None, 6 and 0, 0 and 5)
(None, None, 0, 0)
>>> (0 and None, None and 0)
(0, None)
>>> ^D
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
43
Dpartement dInformatique
C. Aperghis-Tramoni
44
Dpartement dInformatique
Les listes.
Une liste est une suite de valeurs prsentes entre crochets et spares par des virgules.
Une liste n'est pas sans rappeler la notion de vecteur index bien connue dans les
langages traditionnels, il ne faudrait toutefois pas la rduire ce type d'utilisation.
coruscant:~/Langages/Python chris$ python
Python 2.4.2 (#1, Nov 29 2005, 10:58:42)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1495)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> l = ["Nous","sommes","en","l'an",2007]
>>> l
['Nous', 'sommes', 'en', "l'an", 2007]
>>> l[0]
'Nous'
>>> l[1:3]
['sommes', 'en']
>>> l[4] = l[4] + 1
>>> l
['Nous', 'sommes', 'en', "l'an", 2008]
>>> ^D
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
45
Dpartement dInformatique
C. Aperghis-Tramoni
46
Dpartement dInformatique
C. Aperghis-Tramoni
47
Dpartement dInformatique
Mthodes.
coruscant:~/Langages/Python chris$ python
Python 2.4.2 (#1, Nov 29 2005, 10:58:42)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1495)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> L1=[10, 1, 2, 55, 91, 3, 21, 70, 9, 33]
>>> L1
[10, 1, 2, 55, 91, 3, 21, 70, 9, 33]
>>> 55 in L1
True
>>> 35 in L1
False
>>> L1.append(72)
>>> L1
[10, 1, 2, 55, 91, 3, 21, 70, 9, 33, 72]
>>> L1.sort()
>>> L1
[1, 2, 3, 9, 10, 21, 33, 55, 70, 72, 91]
>>> L1.index(33)
6
>>> L1.reverse()
>>> L1
[91, 72, 70, 55, 33, 21, 10, 9, 3, 2, 1]
>>> del L1[2]
>>> L1
[91, 72, 55, 33, 21, 10, 9, 3, 2, 1]
>>> L1[3:6]=[]
>>> L1
[91, 72, 55, 9, 3, 2, 1]
>>> L1[1]=100
>>> L1
[91, 100, 55, 9, 3, 2, 1]
C. Aperghis-Tramoni
48
Dpartement dInformatique
Mthodes.
>>> L1
[91, 100, 55, 9, 3, 2, 1]
>>> L1[2:3]=['a', 'b', 'c', 'd', 'e']
>>> L1
[91, 100, 'a', 'b', 'c', 'd', 'e', 9, 3, 2, 1]
>>> L2 = range (10)
>>> L2
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> L3 = range (20,29)
>>> L3
[20, 21, 22, 23, 24, 25, 26, 27, 28]
>>> L4 = range (10,50,5)
>>> L4
[10, 15, 20, 25, 30, 35, 40, 45]
>>> ^D
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
49
Dpartement dInformatique
Les dictionnaires.
C. Aperghis-Tramoni
50
Dpartement dInformatique
Exemples.
coruscant:~/Langages/Python chris$ python
Python 2.4.2 (#1, Nov 29 2005, 10:58:42)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1495)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> jardin={'Tulipes':10,'Jonquilles':25,'Begonias':15,'Iris':50}
>>> jardin
{'Iris': 50, 'Jonquilles': 25, 'Begonias': 15, 'Tulipes': 10}
>>> jardin['Jonquilles']
25
>>> jardin['Tulipes']
10
>>> jardin.keys()
['Iris', 'Jonquilles', 'Begonias', 'Tulipes']
>>> jardin.has_key('Begonias')
True
>>> del (jardin['Begonias'])
>>> jardin
{'Iris': 50, 'Jonquilles': 25, 'Tulipes': 10}
>>> jardin.has_key('Begonias')
False
>>> ^D
coruscant:~/Langages/Python chris$
51
Dpartement dInformatique
Dictionnaire de dictionnaire.
C. Aperghis-Tramoni
52
Dpartement dInformatique
Exemple.
Traduction d'un chiffre.
coruscant:~/Langages/Python chris$ cat ess.py
#!/usr/bin/python
chiffre = {'Un' : {'Uk': 'One','De': 'Ein','Sp': 'Un' },\
'Deux' : {'Uk': 'Two','De': 'Zwei','Sp': 'Dos' },\
'Trois' : {'Uk': 'Three','De': 'Drei','Sp': 'Tres' },\
'Quatre' : {'Uk': 'Four','De': 'Vier','Sp': 'Cuatro' },\
'Cinq' : {'Uk': 'Five','De': 'Funf','Sp': 'Cinco' },\
'Six' : {'Uk': 'Six','De': 'Sechs','Sp': 'Seis' },\
'Sept' : {'Uk': 'Seven','De': 'Sieben','Sp': 'Siete' },\
'Huit' : {'Uk': 'Eight','De': 'Acht','Sp': 'Ocho' },\
'Neuf' : {'Uk': 'Nine','De': 'Neun','Sp': 'Neun' }}
c = raw_input('Quel est le chiffre : ')
l = raw_input('Quelle est la langue (Uk, De, Sp) : ' )
trad = chiffre[c][l]
print "Resultat de la traducton : ", trad
coruscant:~/Langages/Python chris$ ./ess.py
Quel est le chiffre : Neuf
Quelle est la langue (Uk, De, Sp) : Sp
Resultat de la traducton : Neun
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
53
Dpartement dInformatique
C. Aperghis-Tramoni
54
Dpartement dInformatique
La notion de module.
Les modules permettent d'accrotre les possibilits du langage.
coruscant:~/Langages/Python chris$ python
Python 2.4.2 (#1, Nov 29 2005, 10:58:42)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1495)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> sqrt(2)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'sqrt' is not defined
>>> import math
>>> sqrt(2)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'sqrt' is not defined
>>> math.sqrt(2)
1.4142135623730951
>>> ^D
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
55
Dpartement dInformatique
Le mode interactif.
Le mode interactif peut tre utilis pour crire de petites applications.
Lorsquune commande tient sur plusieurs lignes, il passe alors au prompt secondaire ( ).
Ceci est ncessaire lors de l'criture de certaines instructions, par exemple pour un if.
coruscant:~/Langages/Python chris$ python
Python 2.4.2 (#1, Nov 29 2005, 10:58:42)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1495)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 1
>>> if a :
...
print "Vrai\n"
...
Vrai
>>>
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
56
Dpartement dInformatique
C. Aperghis-Tramoni
57
Dpartement dInformatique
C. Aperghis-Tramoni
58
Dpartement dInformatique
Imprimer un rsultat.
Affichage d'une information sur l'cran
print
coruscant:~/Langages/Python chris$ cat prog.py
#!/usr/bin/python
a = int(raw_input("Donnez moi un entier : "))
print "Valeur de a : ",a
print "Le carre de ",a, "est egal a :", a * a
coruscant:~/Langages/Python chris$ ./prog.py
Donnez moi un entier : 2
Valeur de a : 2
Le carre de 2 est egal a : 4
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
59
Dpartement dInformatique
C. Aperghis-Tramoni
60
Dpartement dInformatique
Usage du format.
Cest la chane de caractres qui suit le % qui caractrise le type de la
donne, son affichage et la (ou les) donne(s) afficher
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
61
Dpartement dInformatique
Entier sign.
%u
Entier non-sign.
%o
Octal non-sign.
%x
Hexadcimal non-sign.
%s
Chane de caractres.
%f
Flottant.
%e
%g
Remarque :
Les formats exigent ce que le type de la donne corresponde avec le
type daffichage.
Si ce nest pas le cas, une exception est gnre.
Dans le cas ou le type de la donne peut varier, le format %s peut tre
utilis, Il a pour effet de systmatiquement convertir la donne en chane
de caractres par lintermdiaire de la fonction str().
C. Aperghis-Tramoni
62
Dpartement dInformatique
Le module string.
Ce module offre une srie de formats destins afficher les chanes de caractres.
Exemple, imprimer pour les 5 premiers entiers.
Le nombre.
Son carr.
Son cube.
A noter la virgule la fin des deux premiers print, afin de supprimer le retour la
ligne.
C. Aperghis-Tramoni
63
Dpartement dInformatique
Remarque.
Cette prsentation aurait tout aussi bien pu se faire en utilisant les formats.
coruscant:~/Langages/Python chris$
#!/usr/bin/python
#!/usr/bin/python
for x in range(1, 6):
print 'Nombre : %2d - Carre : %3d
coruscant:~/Langages/Python chris$
Nombre : 1 - Carre :
1 - Cube :
Nombre : 2 - Carre :
4 - Cube :
Nombre : 3 - Carre :
9 - Cube :
Nombre : 4 - Carre : 16 - Cube :
Nombre : 5 - Carre : 25 - Cube :
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
cat prog.py
64
Dpartement dInformatique
C. Aperghis-Tramoni
65
Dpartement dInformatique
La mthode string.zfill().
string.zfill(ch,long)
Permet de complter une chane numrique en rajoutant des zros non significatifs
gauche.
Cette fonction est aussi apte grer le signe (+ ou -)..
C. Aperghis-Tramoni
66
Dpartement dInformatique
Les blocs.
Toutes les instructions composes en Python ont toujours la mme structure : une
ligne d'en-tte termine par un deux point, suivie par une ou plusieurs instructions
indentes sous cette ligne d'en-tte.
Ligne d'en-tte :
premire instruction du bloc
... ...
dernire instruction du bloc
Instruction suivante
S'il y a plusieurs instructions indentes sous la ligne d'en-tte, elles doivent l'tre
exactement au mme niveau.
Elles constituent un bloc d'instructions.
C. Aperghis-Tramoni
67
Dpartement dInformatique
Bloc 1
...
Ligne d'en tte :
Bloc 2
...
Ligne d'en tte :
Bloc 3
...
Suite du bloc 2
...
Suite du bloc 1
...
C. Aperghis-Tramoni
68
Dpartement dInformatique
Crer un programme.
Un programme Python se doit de commencer par la ligne :
#!/usr/bin/python
C. Aperghis-Tramoni
69
Dpartement dInformatique
Le programme.
La ligne :
#!/usr/bin/python
permettra d'excuter le programme en invoquant son nom.
Ligne de commentaire.
Affectation multiple.
a,b = 0,1
Est identique
a=0
b=1
#!/usr/bin/python
# Les premiers elements de la suite de Fibonacci.
a, b = 0, 1
while b < 1000:
print b
a, b = b, a+b
Linstruction while b<10: permet de contrler la
boucle.
Noter la prsence du :.
Elle est excute tant que la condition spcifie est
vraie (ici b < 10).
En Python, tout objet dont la valeur ou la longueur
est gale zro sera considre comme donnant un
rsultat faux.
Les oprateurs de comparaison sont tout fait
classiques (<, >, <=, >=, ==,!=).
C. Aperghis-Tramoni
70
Dpartement dInformatique
Les conditions.
Une condition ne se limite pas l'utilisation des oprateurs de comparaison. Tous
les types d'oprateurs peuvent tre utiliss.
Les oprateurs in et not testent si une valeur est prsente ou non dans une
squence donne.
Les oprateurs is et is_not vrifient si deux objets modifiables sont
rellement identiques.
Tous les oprateurs de comparaison ont une priorit identique, infrieure celle de
tous les oprateurs numriques.
coruscant:~/Langages/Python chris$ cat prog.py
#!/usr/bin/python
a = 10
b = 20
c = a == b
print "resultat de c = a == b :", c
coruscant:~/Langages/Python chris$ ./prog.py
resultat de c = a == b : False
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
71
Dpartement dInformatique
Oprateurs boolens.
Il est aussi possible dutiliser les oprateurs boolens and, or et not.
Ils auront une priorit infrieure celle des oprateurs de comparaison.
Entre eux, not est prioritaire par rapport and, lui mme prioritaire par rapport
or.
not a and not b or c
Est quivalent en expression parenthse :
((not a) and (not b)) or c .
Nous avons dj vu que comme cest le cas en Perl, les oprations boolennes son
effectues en court circuit, cest dire que ds quun rsultat intermdiaire permet
de dterminer le rsultat final, lvaluation s'arrte.
Le rsultat dune expression boolenne peut tre affect une variable.
coruscant:~/Langages/Python chris$ cat prog.py
#!/usr/bin/python
a,b,c,d = '','','res1','res2'
r = a or b or c or d
print "resultat de a or b or c or d : ", r
s = a or b and c or d
print "resultat de a or b and c or d : ", s
coruscant:~/Langages/Python chris$ ./prog.py
resultat de a or b or c or d : res1
resultat de a or b and c or d : res2
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
72
Dpartement dInformatique
Comparaison de structures.
On peut procder des comparaisons sur des objets de type squence, condition
que les objets en question soient de mme type.
Cest lordre lexicographique qui est utilis pour fournir le rsultat.
Cest le code ASCII qui sera utilis pour dterminer lordre.
La comparaison porte dans un premier temps sur les deux premiers lments, si le
rsultat nest pas une identit, il devient dfinitif, dans le cas contraire, la
comparaison porte sur les deux lments suivants, et ainsi de suite jusqu
puisement de lune des deux squences.
Dans le cas ou deux lments comparer sont eux mmes des squences de type
quivalent, la comparaison est reconsidre de manire rcursive.
Au moment de lpuisement des squences, si le rsultat final est une galit, les
deux squences sont considres comme identiques.
Si une des deux squences est une sous squence initiale de lautre, ce sera la plus
courte qui sera considre comme infrieure lautre..
C. Aperghis-Tramoni
73
Dpartement dInformatique
Application.
C. Aperghis-Tramoni
74
False
Dpartement dInformatique
Instruction if.
coruscant:~/Langages/Python chris$ cat prog.py
#!/usr/bin/python
a=1
if a != 0:
print "La variable a est non nulle"
else:
print "La variable a est nulle"
print "Fin du programme."
coruscant:~/Langages/Python chris$ ./prog.py
La variable a est non nulle
Fin du programme.
coruscant:~/Langages/Python chris$
Possibilit dutiliser la directive elif (pour else if) qui permet deviter de cumuler des indentations.
Une squence
if .
elif .
elif .
else .
Est un substitut aux instructions de type switch ou case de certains autres lengages.
C. Aperghis-Tramoni
75
Dpartement dInformatique
Instruction if elif.
coruscant:~/Langages/Python chris$ cat prog.py
#!/usr/bin/python
a=2
if a == 0:
print "La variable a est egale a 0."
elif a ==1:
print "La variable a est egale a 1."
elif a ==2:
print "La variable a est egale a 2."
else:
print "La variable a est superieure a 2."
print "Fin du programme.
coruscant:~/Langages/Python chris$ ./prog.py
La variable a est egale a 2.
Fin du programme.
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
76
Dpartement dInformatique
Instruction for.
Linstruction for nitre pas systmatiquement sur une suite de valeurs numriques.
Nimporte quelle squence dlments (liste, chane) sera explore.
Sur une liste, litration rcupre les lments les uns la suite des autres
Sur une chane ce seront les caractres..
coruscant:~/Langages/Python
#!/usr/bin/python
a=["Bonjour", "tout", "le",
for x in a:
print x, len(x)
coruscant:~/Langages/Python
Bonjour 7
tout 4
le 2
monde! 6
coruscant:~/Langages/Python
chris$
C. Aperghis-Tramoni
77
Dpartement dInformatique
Instruction while.
Elle se prsente sous la forme :
while condition :
Instruction
Instruction
coruscant:~/Langages/Python chris$ cat prog.py
#!/usr/bin/python
liste = [ 10, 20, 30, 40, 50, 60, 70, 80, 90 ]
somme = 0
for x in liste :
somme = somme + x
print "somme: ", somme
coruscant:~/Langages/Python chris$ ./prog.py
Somme : 450
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
78
Dpartement dInformatique
Modification de llment.
Il est aussi possible, bien que non conseill, de modifier l'lment en cours ditration.
Dans ce cas, litration porte sur une copie de lobjet.
C. Aperghis-Tramoni
79
Dpartement dInformatique
La fonction range.
C'est une fonction intgre linterprteur qui permet de gnrer une liste contenant des nombres en
progression arithmtique.
coruscant:~/Langages/Python chris$ cat prog.py
#!/usr/bin/python
a = range (10)
print "Resultat de range (10): ", a, "\n"
b = range (5,15)
print "Resultat de range (5,15): ", b, "\n"
c = range (-5,5)
print "Resultat de range (-5,5): ", c, "\n"
d = range (0,50,5)
print "Resultat de range (0,50,5): ", d, "\n"
coruscant:~/Langages/Python chris$ prog.py
Resultat de range (10): [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Resultat de range (5,15):
Resultat de range (0,50,5): [0, 5, 10, 15, 20, 25, 30, 35, 40, 45]
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
80
Dpartement dInformatique
Exploration de liste.
Ainsi, si on dsire explorer les lments dune liste de longueur n, il est ncessaire de gnrer la suite
de valeurs n-1.
coruscant:~/Langages/Python chris$ cat prog.py
#!/usr/bin/python
a=["Il","fait","beau","et","chaud!"]
for x in range(len(a)):
print "Indice : ",x," Valeur : ",a[x]
coruscant:~/Langages/Python chris$ prog.py
Indice : 0 Valeur : Il
Indice : 1 Valeur : fait
Indice : 2 Valeur : beau
Indice : 3 Valeur : et
Indice : 4 Valeur : chaud!
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
81
Dpartement dInformatique
C. Aperghis-Tramoni
82
Dpartement dInformatique
Contrle de boucle.
Certains langages de programmation proposent linstruction break qui permet une sortie anticipe de
la boucle la plus interne alors que linstruction continue met un terme litration courante pour
continuer sur la suivante.
A noter aussi la clause else habituellement utilise comme alternative dune condition qui est dans
Python aussi utilisable dans une boucle while.
Elle sera excute lorsque la condition deviendra fausse mais elle sera saute si un break se
prsente.
Voici un petit programme qui va nous
permettre de dterminer si un nombre
est premier ou non.
C. Aperghis-Tramoni
83
Dpartement dInformatique
Les fichiers.
Linstruction <open> permet de crer un objet de type fichier.
Syntaxe.
open(nom, mode)
coruscant:~/Langages/Python chris$ cat prog.py
#!/usr/bin/python
x = open('texte.txt','r')
print x
coruscant:~/Langages/Python chris% prog.py
<open file 'texte.txt', mode 'r' at 0x00B7A410>
coruscant:~/Langages/Python chris$
texte.txt
r
Mode
Effet
r+
rb
wb
r+b
C. Aperghis-Tramoni
84
Dpartement dInformatique
C. Aperghis-Tramoni
85
Dpartement dInformatique
Mthodes.
C. Aperghis-Tramoni
86
Dpartement dInformatique
La mthode close().
descripteur.close()
Permet de fermer le fichier concern.
coruscant:~/Langages/Python chris$ cat prog.py #!/usr/bin/python
x = open('texte.txt','r')
print x
x.close()
print x
coruscant:~/Langages/Python chris% prog.py
<open file 'texte.txt', mode 'r' at 0x00B7A410>
<closed file 'texte.txt', mode 'r' at 0x00B7A410>
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
87
Dpartement dInformatique
La mthode fileno()
descripteur.fileno()
Cette mthode retourne le numro du canal (un nombre entier) dentre/sortie
ouvert.
Chaque canal d'entre ou de sortie ouvert a en interne un numro, mme
STDIN, STDOUT et STDERR.
C'est cette mthode permet de le connatre.
coruscant:~/Langages/Python chris$ cat prog.py
#!/usr/bin/python
x = open('texte.txt','r')
print x
y = x.fileno()
print "Numero de canal : ", y
x.close()
coruscant:~/Langages/Python chris% prog.py
<open file 'texte.txt', mode 'r' at 0x00B7A578>
Numero de canal : 3
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
88
Dpartement dInformatique
La mthode flush().
descripteur.flush()
Cette mthode permet de nettoyer (de vider) le buffer interne associ au
fichier.
C. Aperghis-Tramoni
89
Dpartement dInformatique
Mthode isatty().
descripteur.isatty()
Cette mthode retourne la valeur vraie si le descripteur correspond a un
terminal de type tty.
C. Aperghis-Tramoni
90
Dpartement dInformatique
Mthode read().
descripteur.read([n])
Cette mthode permet de lire au plus n bytes sur le fichier spcifi.
Les informations lues sont retournes en tant que chane de caractres.
Si la longueur nest pas spcifie le fichier est lu jusqu la fin (eof).
Si il ny a pas de caractres a lire (eof), la chane retourne sera vide.
coruscant:~/Langages/Python chris$ cat prog.py
#!/usr/bin/python
x = open('texte.txt','r')
y = x.read()
print y
x.close()
coruscant:~/Langages/Python chris% prog.py
On entend tous les jours, a propos de productions litteraires, parler de la dignite
de tel genre, des convenances de tel autre, des limiter de celui-ci, des latitudes
de celui-la ; la tragedie interdit ce que le roman permet; la chanson tolere ce que
l'ode defend, etc. L'auteur de ce livre a le malheur de ne rien comprendre a tout
cela; il y cherche des choses et n'y voit que des mots; il lui semble que ce qui
est reellement beau et vrai est beau et vrai partout; que ce qui est dramatique dans
un roman sera dramatique sur la scene; que ce qui est lyrique dans un couplet sera
lyrique dans une strophe; qu'enfin et toujours la seule distinction veritable dans
les uvres de l'esprit est celle du bon et du mauvais. La pensee est une terre vierge
et feconde dont les productions veulent croitre librement, et, pour ainsi dire, au
hasard, sans se classer, sans s'aligner en plates-bandes comme les bouquets dans un
jardin classique de Le Notre, ou comme les fleurs du langage dans un traite de rhetorique.
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
91
Dpartement dInformatique
Mthode readline().
descripteur.readline()
Cette mthode permet d'accder une ligne du fichier.
Si la fin de fichier est atteinte la chane retourne sera vide.
coruscant:~/Langages/Python chris$ cat prog.py
#!/usr/bin/python
x = open('texte.txt','r')
while (True) :
y = x.readline()
if not y :
break
print y,
x.close()
coruscant:~/Langages/Python chris% prog.py
On entend tous les jours, a propos de productions litteraires, parler de la dignite
de tel genre, des convenances de tel autre, des limiter de celui-ci, des latitudes
de celui-la ; la tragedie interdit ce que le roman permet; la chanson tolere ce que
l'ode defend, etc. L'auteur de ce livre a le malheur de ne rien comprendre a tout
cela; il y cherche des choses et n'y voit que des mots; il lui semble que ce qui
est reellement beau et vrai est beau et vrai partout; que ce qui est dramatique dans
un roman sera dramatique sur la scene; que ce qui est lyrique dans un couplet sera
lyrique dans une strophe; qu'enfin et toujours la seule distinction veritable dans
les uvres de l'esprit est celle du bon et du mauvais. La pensee est une terre vierge
et feconde dont les productions veulent croitre librement, et, pour ainsi dire, au
hasard, sans se classer, sans s'aligner en plates-bandes comme les bouquets dans un
jardin classique de Le Notre, ou comme les fleurs du langage dans un traite de rhetorique.
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
92
Dpartement dInformatique
Mthode readlines().
descripteur.readline()
Cette mthode permet d'accder toutes les lignes du fichier (jusqu le fin).
Les lignes lues seront retournes comme une liste dobjets.
coruscant:~/Langages/Python chris$ cat prog.py
#!/usr/bin/python
x = open('texte.txt','r')
y = x.readlines()
print y,
x.close()
coruscant:~/Langages/Python chris% prog.py
['On entend tous les jours, a propos de productions litteraires, parler de la di
gnite\n', 'de tel genre, des convenances de tel autre, des limiter de celui-ci,
des latitudes\n', 'de celui-la ; la tragedie interdit ce que le roman permet; la
chanson tolere ce que\n', "l'ode defend, etc. L'auteur de ce livre a le malheur
de ne rien comprendre a tout\n", "cela; il y cherche des choses et n'y voit que
des mots; il lui semble que ce qui\n", 'est reellement beau et vrai est beau et
vrai partout; que ce qui est dramatique dans\n', 'un roman sera dramatique sur
la scene; que ce qui est lyrique dans un couplet sera\n', "lyrique dans une stro
phe; qu'enfin et toujours la seule distinction veritable dans\n", "les \x9cuvres
de l'esprit est celle du bon et du mauvais. La pensee est une terre vierge\n",
'et feconde dont les productions veulent croitre librement, et, pour ainsi dire,
au\n', "hasard, sans se classer, sans s'aligner en plates-bandes comme les bouq
uets dans un\n", 'jardin classique de Le Notre, ou comme les fleurs du langage d
ans un traite de rhetorique.']
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
93
Dpartement dInformatique
Un petit apart.
Dans l'impression que nous venons de faire, la prsentation de la liste est
peu significative. Elle est faite "au kilomtre".
Il existe un module qui permet de formater un objet afin d'en afficher la
meilleure reprsentation possible. Il s'agit de pprint.
coruscant:~/Langages/Python chris$ cat prog.py
#!/usr/bin/python
import pprint
x = open('texte.txt','r')
y = x.readlines()
print ('Utilisation de pprint.')
print pprint.pformat(y)
x.close()
coruscant:~/Langages/Python chris% prog.py
Utilisation de pprint.
['On entend tous les jours, a propos de productions litteraires, parler de la dignite\n',
'de tel genre, des convenances de tel autre, des limiter de celui-ci, des latitudes\n',
'de celui-la ; la tragedie interdit ce que le roman permet; la chanson tolere ce que\n',
"l'ode defend, etc. L'auteur de ce livre a le malheur de ne rien comprendre a tout\n",
"cela; il y cherche des choses et n'y voit que des mots; il lui semble que ce qui\n",
'est reellement beau et vrai est beau et vrai partout; que ce qui est dramatique dans\n',
'un roman sera dramatique sur la scene; que ce qui est lyrique dans un coupletsera\n',
"lyrique dans une strophe; qu'enfin et toujours la seule distinction veritabledans\n",
"les \x9cuvres de l'esprit est celle du bon et du mauvais. La pensee est une terre vierge\n",
'et feconde dont les productions veulent croitre librement, et, pour ainsi dire, au\n',
"hasard, sans se classer, sans s'aligner en plates-bandes comme les bouquets dans un\n",
'jardin classique de Le Notre, ou comme les fleurs du langage dans un traite de rhetorique.']
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
94
Dpartement dInformatique
Mthode seek().
descripteur.seek(offset,i)
Cette mthode permet de positionner le pointeur dun fichier pralablement ouvert
un endroit quelconque.
La valeur i donne la position de rfrence.
i = 0 : la position est calcule en absolue partir du dbut du fichier .
i = 1 : la position est calcule relativement par rapport la position
actuelle du pointeur de fichier.
i = 2 : la position est calcule en absolue partir de la fin du fichier.
coruscant:~/Langages/Python chris$ cat prog.py
#!/usr/bin/python
x = open('texte.txt','r')
y = x.seek(100,0)
print 'Lecture du 100 eme caractere :',x.read(1)
y = x.seek(-3,2)
print 'Lecture de l\'antepenultieme caractere :',x.read(1)
x.close()
coruscant:~/Langages/Python chris% prog.py
Lecture du 100 eme caractere : e
Lecture de l'antepenultieme caractere : u
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
95
Dpartement dInformatique
Mthode tell().
descripteur.tell()
Cette mthode renvoie un nombre entier qui donne la position du pointeur dans le
fichier.
Elle est mesure en octets partir du dbut du fichier.
coruscant:~/Langages/Python
#!/usr/bin/python
x = open('texte.txt','r')
y = x.seek(100,0)
print 'Position du pointeur
y = x.seek(-3,2)
print 'Position du pointeur
x.close()
coruscant:~/Langages/Python
Position du pointeur : 100
Position du pointeur : 1016
coruscant:~/Langages/Python
C. Aperghis-Tramoni
:',x.tell()
:',x.tell()
chris% prog.py
chris$
96
Dpartement dInformatique
Mthode write().
descripteur.write(chaine)
Cette mthode permet d'crire une ligne dans un fichier.
coruscant:~/Langages/Python
#!/usr/bin/python
x = open('texte.txt','r')
s = open('sortie.txt','w')
y = x.readline()
s.write(y)
x.close()
s.close()
coruscant:~/Langages/Python
coruscant:~/Langages/Python
On entend tous les jours, a
coruscant:~/Langages/Python
C. Aperghis-Tramoni
chris% prog.py
chris cat sortie.txt
propos de productions litteraires, parler de la dignite
chris$
97
Dpartement dInformatique
Mthode writelines().
descripteur.writelines(liste)
Cette mthode permet d'crire une liste de lignes dans un fichier.
coruscant:~/Langages/Python chris$ cat prog.py
#!/usr/bin/python
x = open('texte.txt','r')
s = open('sortie.txt','w')
y = x.readlines()
s.writelines(y)
x.close()
s.close()
coruscant:~/Langages/Python chris% prog.py
coruscant:~/Langages/Python chris cat sortie.txt
On entend tous les jours, a propos de productions litteraires, parler de la dignite
de tel genre, des convenances de tel autre, des limiter de celui-ci, des latitudes
de celui-la ; la tragedie interdit ce que le roman permet; la chanson tolere ce que
l'ode defend, etc. L'auteur de ce livre a le malheur de ne rien comprendre a tout
cela; il y cherche des choses et n'y voit que des mots; il lui semble que ce qui
est reellement beau et vrai est beau et vrai partout; que ce qui est dramatique dans
un roman sera dramatique sur la scene; que ce qui est lyrique dans un couplet sera
lyrique dans une strophe; qu'enfin et toujours la seule distinction veritable dans
les uvres de l'esprit est celle du bon et du mauvais. La pensee est une terre vierge
et feconde dont les productions veulent croitre librement, et, pour ainsi dire, au
hasard, sans se classer, sans s'aligner en plates-bandes comme les bouquets dans un
jardin classique de Le Notre, ou comme les fleurs du langage dans un traite de rhetorique.
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
98
Dpartement dInformatique
Erreur.
C. Aperghis-Tramoni
99
Dpartement dInformatique
Sauvegardes.
Si il ny a aucun problme pour travailler sur les fichier au moyen des chanes de
caractre, cest un peu plus dlicat en ce qui concerne les valeurs numriques.
La mthode read() renvoie systmatiquement une chane qui, pour tre utilise en
tant que valeur numrique doit tre transforme par la mthode string.atoi().
Si il ny a donc aucun problme pour les nombres, les choses peuvent devenir trs
complexes lorsquil sagit de sauvegarder des listes, des dictionnaires ou des
instances de classe.
Python propose un module standard pickle qui permet dautomatiser ce type de
manipulation.
Ce module est capable de prendre nimporte quel objet Python pour le convertir en
une chane de caractres.
Il est mme possible de convertir certaines formes de code. Ce processus
sappellera pickling alors que le processus inverse sera le unpickling .
Entre un pickling et un unpickling la chane de caractres aura pu tre
stocke et rcupre, transmise a une autre machine par tout moyen imaginable
(support magntique, mail, transfert de fichier).
C. Aperghis-Tramoni
100
Dpartement dInformatique
Le module pickle().
C. Aperghis-Tramoni
101
Dpartement dInformatique
C. Aperghis-Tramoni
102
Dpartement dInformatique
C. Aperghis-Tramoni
103
Dpartement dInformatique
*? +? ??
{m, n}
{m, n}?
[.]
C. Aperghis-Tramoni
104
Dpartement dInformatique
Un exemple.
Exemple :
Cible :
ggtagaacagcttcagttgggatcacaggcttctagggatcctttgggcaaaaaagaaacacagaaggcattctttctatacaagaaa
ggactttatagagctgctaccatgaacggaac
Modle :
cttctag
C. Aperghis-Tramoni
105
Dpartement dInformatique
C. Aperghis-Tramoni
106
Dpartement dInformatique
Caractres joker.
C. Aperghis-Tramoni
107
Dpartement dInformatique
Ignorer la casse.
Lors de la compilation de l'expression rgulire, la modificateur "IGNORECASE"
permet de ne pas tenir compte du fait que le caractre est en majuscule ou en
minuscule.
coruscant:~/Langages/Python chris$ cat exo.py
#!/usr/bin/python
import re
modele = "oui"
patron = re.compile(modele, re.IGNORECASE)
while (1) :
rep = raw_input ("Repondez oui ou non.")
reponse = patron.search(rep)
if (`reponse` != "None") :
print "Vous avez dit Oui"
else :
break
coruscant:~/Langages/Python chris$ exo.py
Repondez oui ou non.OUI
Vous avez dit Oui
Repondez oui ou non.oui
Vous avez dit Oui
Repondez oui ou non.OuI
Vous avez dit Oui
Repondez oui ou non.Non
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
108
Dpartement dInformatique
Facteurs multiplicatifs.
C. Aperghis-Tramoni
109
Dpartement dInformatique
Simplification d'criture.
C. Aperghis-Tramoni
110
Dpartement dInformatique
C. Aperghis-Tramoni
111
Dpartement dInformatique
C. Aperghis-Tramoni
112
Dpartement dInformatique
Les ensembles.
C. Aperghis-Tramoni
113
Dpartement dInformatique
{i,j} permet de spcifier un facteur multiplicatif explicite compris dans une fourchette i,j.
Trouver de trois cinq caractres de l'ensemble [AT], suivi de deux quatre
caractres de l'ensemble [cg]
[at]{3,5}[cg]{2,4}
Connatre l'emplacement de la squence dans la chane.
C. Aperghis-Tramoni
114
Dpartement dInformatique
Les substitutions.
Reprenons le programme prcdent qui consistait trouver de trois cinq caractres
de l'ensemble [AT], suivi de deux quatre caractres de l'ensemble [cg]
[at]{3,5}[cg]{2,4}
Une fois trouv, ce modle sera remplac par la chane "-----"
coruscant:~/Langages/Python chris$ cat exo.py
#!/usr/bin/python
import re
sequence =
"ggtagaacagcttcagttgggatcacaggcttctagggatcctttgggcaaaaaagaaacacagaaggcattctttctatacaagaa
aggactttatagagctgctaccatgaacggaac"
modele = "[at]{3,5}[cg]{2,4}"
patron = re.compile(modele)
assort = patron.search(sequence)
sequence = patron.sub("-----", sequence)
print sequence
coruscant:~/Langages/Python chris$ exo.py
ggtagaacagcttcagttgggatcacaggcttctagggatcc-----aaaaaagaaacacagaaggcattctttctatacaag----actttatagagctgctaccatgaacggaac
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
115
Dpartement dInformatique
Option de substitution.
Dans l'exemple, toutes les occurrences ont t substitues.
Il est possible d'en indiquer le nombre maximal. Par exemple, dans l'exemple qui
vient d'tre vu ne faire porter la substitution que sur le premier modle.
sequence = patron.sub("-----", sequence,1)
C. Aperghis-Tramoni
116
Dpartement dInformatique
Nombre de substitutions.
C. Aperghis-Tramoni
117
Dpartement dInformatique
Les fonctions.
Python, comme tous les langages de programmation permet de dfinir des fonctions.
Le corps de la fonction comme tout bloc de Python sera repr par le niveau dindentation.
Dfinition d'une fonction
def nom-de-la-fonction (paramtres):
Reprenons sous cette forme le programme que nous venons dcrire et qui dtermine si un nombre est
premier ou non
C. Aperghis-Tramoni
118
Dpartement dInformatique
Fonction.
C. Aperghis-Tramoni
119
Dpartement dInformatique
Explications.
La fonction est dfinie par le mot cl def immdiatement suivi par le nom de la fonction puis de la liste
de ses paramtres formels. Le corps de la fonction doit tre indent.
Gnralement, les premires lignes de la fonction sont un commentaire, qui sera appel Docstring et
reprsentera la documentation de la fonction. Il existe des outils pour grer les Docstrings et gnrer
automatiquement une documentation papier. Il est toujours conseille dinclure ces documentations dans
le code.
Lors de son excution, la fonction gnre une table de symboles qui sera utilise pour ses variables
locales. En fait, lorsquun nom de variable apparat dans la partie gauche dun signe daffectation, une
variable locale est automatiquement cre. Toute rfrence une variable apparaissant dans la partie
droite dun signe daffectation dclenche tout dabord une recherche dans la table locale, puis dans la
table globale et enfin dans la table des noms intgrs. Ce mcanisme permet, dans le corps dune
fonction, de faire rfrence une variable globale, mais interdit de lui affecter une valeur.
Pour outrepasser cette restriction on utilise le mot cl global dans le corps de la fonction ce qui permet
de spcifier que la variable laquelle est affecte une valeur est bien globale.
Les paramtres dappel de la fonction sont passs par valeur, ils font partie intgrante de la table de
symboles locale. Dans le cas dappels en cascade, une nouvelle table de symboles locaux est cre au
moment de chaque appel.
C. Aperghis-Tramoni
120
Dpartement dInformatique
Nom de la fonction.
Le nom de la fonction fait lui mme partie de la table des symboles courante. Elle a un type spcifique qui
lui permet dtre reconnue comme telle par linterprteur.
Cest ainsi qu'il n'est pas interdit de demander un programme dimprimer une fonction
coruscant:~/Langages/Python chris$ cat fonc.py
#!/usr/bin/python
def fonction():
pass
print fonction
coruscant:~/Langages/Python chris$ fonc.py
<function fonction at 0x11f660>
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
121
Dpartement dInformatique
Rfrence de la fonction.
Voyons un exemple qui raffecte la valeur de la variable fonction une nouvelle variable "nouv"
coruscant:~/Langages/Python chris$ cat fonc.py
#!/usr/bin/python
def fonction():
pass
print fonction
nouv=fonction
print nouv
coruscant:~/Langages/Python chris$ fonc.py
<function fonction at 0x11f660>
<function fonction at 0x11f660>
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
122
Dpartement dInformatique
Application.
Cette particularit est intressante.Elle nous permet de disposer de plusieurs rfrences diffrentes au
mme objet. Application la fonction de calcul des nombres premiers.
coruscant:~/Langages/Python chris$ cat ctr.py
#!/usr/bin/python
# Definition de la fonction.
def prem (x):
for n in range(2, x):
for x in range(2, n):
if n % x == 0:
print n, "=", x, "*", n/x
else:
print n, "est premier"
break
# Appel de la fonction.
prem(5)
print "renommage de la fonction. "
nombres_premiers = prem
nombres_premiers(5)
coruscant:~/Langages/Python chris$ ctr.py
3 est premier
4 = 2 * 2
renommage de la fonction
3 est premier
4 = 2 * 2
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
123
Dpartement dInformatique
Variable.
Lorsqu'une variable est dclare dans une
fonction elle n'est pas visible depuis le bloc
suprieur.
La directive "global" va permettre de rendre
cette variable visible au plus haut
niveau.
Exemple 1.
coruscant:~/Langages/Python chris$ cat prog.py
#!/usr/bin/python
def carre (x):
y = x * x
return y
a = 15
b = carre(a)
print ("Le carre de %s est egal a %s." %(a,b))
coruscant:~/Langages/Python chris$ ./prog.py
Le carre de 15 est egal a 225.
coruscant:~/Langages/Python chris$
Exemple 2.
Exemple 3.
a = 15
carre(a)
print ("Le carre de %s est egal a %s." %(a,y))
coruscant:~/Langages/Python chris$ ./prog.py
Traceback (most recent call last):
File "prog.py", line 7, in ?
print ("Le carre de %s est egal a %s." %(a,y))
NameError: name 'y' is not defined
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
a = 15
carre(a)
print ("Le carre de %s est egal a %s." %(a,y))
coruscant:~/Langages/Python chris$ ./prog.py
Le carre de 15 est egal a 225.
coruscant:~/Langages/Python chris$
124
Dpartement dInformatique
Valeur de retour.
Il nexiste pas, proprement parler, de diffrence entre le notion de procdure et la notion de
fonction. Toutes les deux retournent une valeur qui sera implicite ou explicite.
Pour retourner une valeur explicite (cas dune fonction) la dernire ligne qui excute dans le corps
de la fonction doit tre return valeur.
Le premier effet est de terminer la fonction.
Le second est de retourner la valeur spcifie afin de laffecter une variable.
Il est possible de retourner une .
Si valeur aucune valeur de retour n'est spcifie, la valeur prdfinie None lui sera substitue.
coruscant:~/Langages/Python chris$ cat fonc.py
#!/usr/bin/python
def carre(x):
x**2
def cube(x):
return x**3
print "Pas de return la valeur de retour est :
print "
",carre(3)
print "Presence de return la valeur de retour est :"
print "
",cube(3)
coruscant:~/Langages/Python chris$ fonc.py
Pas de return la valeur de retour est :
None
Presence de return la valeur de retour est :
27
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
125
Dpartement dInformatique
Retour de structure.
Voyons maintenant une autre fonction, la suite de Fibonacci qui retournera le
rsultat de son calcul sous forme de liste. retourne sous forme de liste.
coruscant:~/Langages/Python chris$ cat fib.py
#!/usr/bin/python
def fib(n):
resultat = []
a, b = 0, 1
while b < n:
resultat.append(b)
a, b = b, a+b
return resultat
fibo=fib(200)
print "Elements de la suite de fibonacci inferieurs a 200."
print fibo
coruscant:~/Langages/Python chris$ fib.py
Elements de la suite de fibonacci inferieurs a 200.
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]
coruscant:~/Langages/Python chris$
126
Dpartement dInformatique
L'expression lambda.
Il existe une autre forme pour crer des objets fonctions.
C'est l'expression "lambda", quelque peu similaire LISP.
La forme gnrale est le mot-cl "lambda" suivi d'un ou plusieurs arguments puis
d'une expression place aprs deux-points.
Il faut bien voir que lambda est une expression, et non une fonction.
Elle peut donc apparatre l ou "def" est interdit, par exemple lintrieur d'une
constante de liste.
Le corps de lambda est identique ce que l'on place dans l'instruction return du
bloc def.
C. Aperghis-Tramoni
127
Dpartement dInformatique
Exemple.
coruscant:~/Langages/Python chris$ cat prog.py
#!/usr/bin/python
def puiss (x, y):
z = x ** y
return z
a = 15
e = 3
b = puiss(a, e)
print ("%s a la puissance %s est egal a %s." %(a, e, b))
coruscant:~/Langages/Python chris$ ./prog.py
15 a la puissance 3 est egal a 3375.
coruscant:~/Langages/Python chris$
coruscant:~/Langages/Python chris$ cat prog.py
#!/usr/bin/python
l = lambda x, y : x ** y
a = 15
e = 3
print ("%s a la puissance %s est egal a %s." %(a, e, l(a,e)))
coruscant:~/Langages/Python chris$ ./prog.py
15 a la puissance 3 est egal a 3375.
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
128
Dpartement dInformatique
Liste d'appel.
La liste dappel dune fonction peut contenir un nombre variable darguments.
Il est aussi possible daffecter une valeur par dfaut certains arguments qui seraient absent de la liste
dappel et crer ainsi une fonction qui pourra tre appele avec un nombre d'arguments infrieur celui
quelle est sense recevoir.
coruscant:~/Langages/Python chris$ cat fib.py
#!/usr/bin/python
def par_defaut(a=10,b=Vrai):
print valeur de a : ,a
print valeur de b : ,b
print "Appel : par_defaut()"
par_defaut()
print "Appel : par_defaut(75)"
par_defaut(75)
print "Appel : par_defaut(Bonjour,Monsieur)"
par_defaut(Bonjour,Monsieur)
coruscant:~/Langages/Python chris$
Si elle est vide, alors la variable a prendra la valeur par dfaut "10" et la variable b la valeur par dfaut "Vrai".
Si elle ne comporte quun argument, alors le valeur de cet argument sera affecte la variable a, la seconde
variable b conservant la valeur par dfaut qui est spcifie dans la liste dappel.
Enfin, si les deux arguments de la liste sont prciss, chacun prendra la valeur qui lui correspond.
C. Aperghis-Tramoni
129
Dpartement dInformatique
Excution.
C. Aperghis-Tramoni
130
Dpartement dInformatique
Attention.
La valeur par dfaut est value une fois et une seule
au moment de la dfinition de la fonction.
Elle ne sera pas raffecte par la suite.
coruscant:~/Langages/Python chris$ cat fonc.py
#!/usr/bin/python
val=Indefini
def par_defaut(a=val,b=val):
print "valeur de a : ",a
print "valeur de b : ",b
print "Appel : par_defaut()"
par_defaut()
print "Changement de la valeur de la variable val.
print "val=Undefined.
val=Undefined
print "Appel : par_defaut()"
par_defaut()
coruscant:~/Langages/Python chris$ fonc.py
Appel : par_defaut()
valeur de a : Indefini
valeur de b : Indefini
Changement de la valeur de la variable val.
val=Undefined.
Appel : par_defaut()
valeur de a : Indefini
valeur de b : Indefini
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
131
Malgr la modification du
contenu da la variable val avant
lappel de la fonction, les valeurs
par dfaut nont pas t
affectes.
Dpartement dInformatique
Intrt.
C. Aperghis-Tramoni
132
Dpartement dInformatique
C. Aperghis-Tramoni
133
Dpartement dInformatique
Restriction.
Il est cependant impratif que, dans la dfinition de la fonction, les arguments qui reoivent une valeur
par dfaut apparaissent aprs les arguments qui doivent tre spcifis au moment de lappel. Si ce
nest pas le cas, une erreur est gnre.
coruscant:~/Langages/Python chris$ cat fonc.py
#!/usr/bin/python
val=Indefini
def par_defaut(a=val,c,b=[]):
print "valeur de a : ",a
print "valeur de b : ",b
print "valeur de c : ",c
print "Premier appel : par_defaut(a=I am Arthur!,c=1974)"
par_defaut(a=I am Arthur!,c=1974)
coruscant:~/Langages/Python chris$ fonc.py
File fonc.py, line 3
def par_defaut(a=val,c,b=[]):
SyntaxError: non-default argument follows default argument
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
134
Dpartement dInformatique
Dictionnaire.
Un paramtre de la forme **nom prsent en fin de liste reprsente un dictionnaire qui contient une liste
de doublets composs dun mot cl suivi de la valeur qui doit lui tre affecte.
Chaque doublet apparat sur une ligne diffrente.
Dans le corps de la fonction, le dictionnaire pourra tre explor au moyen dune boucle for.
C. Aperghis-Tramoni
135
Dpartement dInformatique
Exemple.
C. Aperghis-Tramoni
136
Dpartement dInformatique
Liste variable.
C. Aperghis-Tramoni
137
Dpartement dInformatique
C. Aperghis-Tramoni
138
Dpartement dInformatique
Les fermetures.
Principe :
Si on dfinit une fonction anonyme dans un contexte particulier elle sexcutera toujours dans le
contexte en question mme si on lui fait rfrence partir dun contexte diffrent.
Ce comportement est indispensable pour mettre en place quelques lignes de code qui seront
appeles ultrieurement.
C. Aperghis-Tramoni
139
Dpartement dInformatique
C. Aperghis-Tramoni
140
Dpartement dInformatique
Mthode.
Fonctionnalit.
append(x)
extend(l)
Rallonge la liste en ajoutant la fin de la liste spcifie la liste passe en paramtre: liste.extend(l).
insert(i,x)
remove(x)
Retire de la liste spcifie le premier lment dont la valeur est gale x= liste.remove(x).
pop()
Supprime le dernier lment de la liste spcifie et le renvoie comme valeur de retoura = liste.pop().
pop(i)
Supprime llment de rang i dans la liste spcifie et le renvoie comme valeur de retoura = liste.pop(i).
index(x)
Renvoie lindice dans la liste du premier lment dont la valeur est gale x: i = liste.index(x).
Si aucun lment nest trouv, une erreur est gnre.
count(x)
sort()
reverse()
C. Aperghis-Tramoni
141
Dpartement dInformatique
Pile.
Deux mthodes sont a retenir.
append() permet dajouter un lment la fin de la liste.
pop() accde au dernier lment en le supprimant de la liste.
ce qui correspond au fonctionnement dune pile dans laquelle le dernier
lment ajout est le premier rcupr.
coruscant:~/Langages/Python chris$ cat fonc.py
#!/usr/bin/python
# Creation d'une pile vide.
pile = []
print 'Remplissage de la pile.'
pile.append('Elem1')
pile.append('Elem2')
pile.append('Elem3')
print 'Etat de la pile : ',pile
print 'depilage d\'un element : ',pile.pop()
print 'Etat de la pile : ',pile
print 'depilage d\'un element : ',pile.pop()
print 'Etat de la pile : ',pile
print 'Ajout d\'un element.'
pile.append('Elem4')
print 'Etat de la pile : ',pile
coruscant:~/Langages/Python chris$ fonc.py
Remplissage de la pile.
Etat de la pile : ['Elem1', 'Elem2', 'Elem3']
depilage d'un element : Elem3
Etat de la pile : ['Elem1', 'Elem2']
depilage d'un element : Elem2
Etat de la pile : ['Elem1']
Ajout d'un element.
Etat de la pile : ['Elem1', 'Elem4']
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
142
Dpartement dInformatique
La mthodes filter.
La mthode filter(fonction, sequence) renvoie une liste qui ne contient que les lments de la
squence pour lesquels la fonction est vraie.
Par exemple, soit trouver quels nombres sont premiers dans un intervalle donn.
C. Aperghis-Tramoni
143
Dpartement dInformatique
La mthode map.
La mthode map(fonction, sequence) applique la fonction spcifie chacun des lments et renvoie
la liste des valeurs de retour.
Par exemple, soit trouver la rpartition des nombres premiers dans un intervalle donn.
C. Aperghis-Tramoni
144
Dpartement dInformatique
Particularits de map.
Il est possible de passer la mthode map plusieurs squencessous la forme
map(fonction, liste1, liste2)
La fonction qui doit avoir autant darguments que de listes diffrentes et est appele avec les
arguments de rang correspondant de chacune des listes.
Par exemple, soit crire une fonction qui effectue la somme de deux vecteurs.
coruscant:~/Langages/Python chris$ cat fonc.py
#!/usr/bin/python
def somme(x,y):
return x+y
v1 = [5,8,3,7,2]
v2 = [9,3,8,5,8]
print 'v1 = ',v1
print 'v2 = ',v2
print 'v1 + v2 = ',map(somme,v1,v2)
coruscant:~/Langages/Python chris$ fonc.py
v1 = [5, 8, 3, 7, 2]
v2 = [9, 3, 8, 5, 8]
v1 + v2 = [14, 11, 11, 12, 10]
coruscant:~/Langages/Python chris$
Si une des squences est plus courte que lautre, la valeur "none" sera substitue aux valeurs
manquantes.
Ce peut tre une cause derreurs dans le cas d'une opration arithmtique entre un entier et la valeur
"none" car devant l'impossibilit d'effectuer un tel calcul, l'interprteur ne peut que gnrer un
message d'erreur.
C. Aperghis-Tramoni
145
Dpartement dInformatique
Erreur.
C. Aperghis-Tramoni
146
Dpartement dInformatique
Solution.
On rsout aisment ce problme en testant la valeur des arguments dans le corps de la fonction. A
toute valeur qui sera value "none" on substituera la valeur numrique zro.
C. Aperghis-Tramoni
147
Dpartement dInformatique
Autre particularit.
La fonction qui est transmise peut tre tout simplement None.
Les lments correspondants des listes sont alors tout simplement retransmis.
Il est ainsi possible, entre autre, de crer une liste de n-uplets partir de n listes.
Les lister tant de mme longueur.
C. Aperghis-Tramoni
148
Dpartement dInformatique
Autre calcul.
Soit crer une liste de triplets dans laquelle chaque lment reprsentera
Un nombre.
Son carr.
Son cube.
C. Aperghis-Tramoni
149
Dpartement dInformatique
La mthode reduce.
La mthode reduce(fonction, sequence), contrairement aux deux prcdentes, ne renvoie pas une liste
mais une valeur constitue du rsultat de la fonction applique cumulativement sur les lments de la
liste.
En fait, la fonction, applique sur les deux premiers lments, fournit premier rsultat.
Ce rsultat et le troisime lment sont alors utiliss comme arguments pour un nouvel appel de la
fonction et ainsi de suite jusqu puisement de la liste.
Ainsi, voyons le programme qui calcule la factorielle dun nombre n.
coruscant:~/Langages/Python chris$ cat fonc.py
#!/usr/bin/python
def prod(x,y):
return x*y
n=5
print 'La factorielle de ',n, 'est : ',
reduce(prod,range(1,6))
coruscant:~/Langages/Python chris$ fonc.py
La factorielle de 5 est : 120
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
150
Dpartement dInformatique
Erreurs de reduce.
C. Aperghis-Tramoni
151
Dpartement dInformatique
Un troisime paramtre.
C. Aperghis-Tramoni
152
Dpartement dInformatique
Aprs les mthodes permettant de gnrer des listes en fonction de certains critres
les "list comprehension" sont des moyens concis de crer des listes.
Un list comprehension c'est :
Une expression.
Une clause
Un certain nombre (ventuellement nul) de clauses for ou if.
Le rsultat est la liste rsultant de lvaluation de lexpression dans le contexte des
clauses for et/ou if qui suivent.
Si lexpression svalue en un n-uplet, elle doit se trouver entre parenthses.
C. Aperghis-Tramoni
153
Dpartement dInformatique
Quelques exemples.
C. Aperghis-Tramoni
154
Dpartement dInformatique
Autres exemples.
C. Aperghis-Tramoni
155
Dpartement dInformatique
C. Aperghis-Tramoni
156
Dpartement dInformatique
C. Aperghis-Tramoni
157
Dpartement dInformatique
Destruction d'lments.
Linstruction del().
C. Aperghis-Tramoni
158
Dpartement dInformatique
N-uplets et squences.
Listes et les chanes sont des donnes de type squence et, compte tenu des
possibilits dvolution du langage, nouvelles donnes pourraient tre intgres.
Par exemple, le n-uplet (tuple).
C'est un ensemble de valeurs spares par des virgules.
coruscant:~/Langages/Python chris$ python
Python 2.2 (#1, 07/14/02, 23:25:09)
[GCC Apple cpp-precomp 6.14] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> t=('Chaine',10,'Pi',3.14)
>>> t
('Chaine', 10, 'Pi', 3.1400000000000001)
>>> t[1]
10
>>> t[2]
'Pi'
>>> t=(t,'e',1.27)
>>> t
(('Chaine', 10, 'Pi', 3.1400000000000001), 'e', 1.27)
>>> t=(t,('a','b','c'))
>>> t
((('Chaine', 10, 'Pi', 3.1400000000000001), 'e', 1.27), ('a', 'b', 'c'))
>>> t[1]
('a', 'b', 'c')
>>>t[0][1]
'e'
>>>t[0][0]
('Chaine', 10, 'Pi', 3.1400000000000001)
>>> t[0][0][2]
'Pi'
>>> ^D
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
159
Dpartement dInformatique
C. Aperghis-Tramoni
160
Dpartement dInformatique
Le 0/1-Uplet!
Problme :
Crer des tuples spcifiques contenant zro ou un lment.
Le tuple vide sera simplement reprsent par un parenthsage vide
Le tuple un lment n'est pas simplement reprsent par une valeur parenthse.
Clairement, si le tuple vide a bien t pris en compte en tant que tel, le tuple un
lment tel qu'il a t dclar a simplement cr un scalaire.
C. Aperghis-Tramoni
161
Dpartement dInformatique
Le 1-uplet.
Un tuple a ne comportant qu'un lment (1-uplet) ne sera considr comme tel que si
on fait suivre la donne dclare par une virgule.
coruscant:~/Langages/Python chris$ python
Python 2.2 (#1, 07/14/02, 23:25:09)
[GCC Apple cpp-precomp 6.14] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> t=(1,)
>>> t
(1,)
>>> t[0]
1
>>> t[1]
Traceback (most recent call last):
File "<stdin>", line 1, in ?
IndexError: tuple index out of range
>>> ^D
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
162
Dpartement dInformatique
Emballage et dballage.
Aprs avoir vu comment crer un tuple (on parle d'emballage), voyons comment on
peut procder l'opration duale, le dballage.
coruscant:~/Langages/Python chris$ python
Python 2.2 (#1, 07/14/02, 23:25:09)
[GCC Apple cpp-precomp 6.14] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> coord = ('Rho','Theta','Phi')
>>> coord
('Rho', 'Theta', 'Phi')
>>> (r,t,p) = coord
>>> r
'Rho'
>>> t
'Theta'
>>> p
'Phi'
>>> ^D
coruscant:~/Langages/Python chris$
En fait, comme en Perl, on affecte chaque lment du tuple a une variable elle mme
lment d'un tuple
C. Aperghis-Tramoni
163
Dpartement dInformatique
Contrainte.
Le dballage d'un tuple ne pourra se faire correctement que si la liste de variables qui
se prsente gauche du signe daffectation a le mme nombre dlments que le tuple.
C. Aperghis-Tramoni
164
Dpartement dInformatique
Tuple de tuple.
coruscant:~/Langages/Python chris$ python
Python 2.2 (#1, 07/14/02, 23:25:09)
[GCC Apple cpp-precomp 6.14] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> t = ('abc', (1, 2,3,4,5), 'xyz')
>>> t
('abc', (1, 2, 3, 4, 5), 'xyz')
>>> t[0]
'abc'
>>> t[1]
(1, 2, 3, 4, 5)
>>> t[1][2]
3
>>> len(t)
3
>>> len(t[1])
5
>>> v = ('m', 'n', 'o', 'p', 'q')
>>> v
('m', 'n', 'o', 'p', 'q')
>>> tu = t + v
>>> tu
('abc', (1, 2, 3, 4, 5), 'xyz', 'm', 'n', 'o', 'p', 'q')
>>> k = v[1:3] * 3
>>> k
('n', 'o', 'n', 'o', 'n', 'o')
>>> 'xyz' in tu
True
>>> 'xy' in tu
False
>>> ^D
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
165
Dpartement dInformatique
La fonction xrange().
"xrange" fonctionne de le mme manire que "range".
La diffrence vient du fait que :
Le calcul se fait au fur et mesure des besoins, ce qui conduit utiliser
moins de mmoire lors de la cration d'une grande squence.
Les valeurs sont stockes dans un tuple et non dans une liste.
coruscant:~/Langages/Python chris$ python
Python 2.2 (#1, 07/14/02, 23:25:09)
[GCC Apple cpp-precomp 6.14] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = range(0,10)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[1:3]=['a', 'b', 'c']
>>> a
[0, 'a', 'b', 'c', 3, 4, 5, 6, 7, 8, 9]
>>> b=xrange(10)
>>> b
xrange(10)
>>> b[1]
1
>>> b[5]
5
>>> b[3] = 'a'
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: object does not support item assignment
>>> ^D
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
166
Dpartement dInformatique
C. Aperghis-Tramoni
167
Dpartement dInformatique
C. Aperghis-Tramoni
168
Dpartement dInformatique
Exemple.
coruscant:~/Langages/Python chris$ cat except.py
x = 0
try :
a = 100 / x
except ZeroDivisionError :
print 'Tentative de division par zero.'
else :
print 'Le resultat est egal a :',a
coruscant:~/Langages/Python chris$ python except.py
Tentative de division par zero.
coruscant:~/Langages/Python chris$ cat except.py
x = 4
try :
a = 100 / x
except ZeroDivisionError :
print 'Tentative de division par zero.'
else :
print 'Le resultat est egal a :',a
coruscant:~/Langages/Python chris$ python except.py
Le resultat est egal a : 25.
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
169
Dpartement dInformatique
Les clauses.
Seul try et except sont obligatoires.
Pour les versions antrieurs Python 2.5, les clauses except et finally sont
mutuellement exclusives.
Pour ces versions, il est possible d'imbriquer un bloc try/except dans un bloc
try/finally:
#!/usr/bin/python
try:
try:
raise RuntimeError("test")
except RuntimeError, e:
print "oops, erreur : %s" % e
finally:
print "on passe ici de toutes faons"".
C. Aperghis-Tramoni
170
Dpartement dInformatique
La clause try/except.
Sa forme est la suivante, au moins une clause "except" et une clause "else" facultative.
try :
<INSTRUCTIONS>
except [expression [, cible]] :
<INSTRUCTIONS>
[else :
<INSTRUCTIONS>]
Le corps de chacune des clauses "except" est un gestionnaire d'exceptions.
Le code est excut si l'expression de la clause correspond un objet exception
propag par la clause "try".
Si elle est prsente, l'expression est une classe ou un tuple de classes correspondant
n'importe quel objet exception des classes indiques ou de leurs sous classes.
Si elle est prsente, la cible est le nom d'une variable que l'interprteur va lier l'objet
exception juste avant l'excution du gestionnaire.
C. Aperghis-Tramoni
171
Dpartement dInformatique
Exemple.
coruscant:~/Langages/Python chris$ cat except.py
print "Essai avec variable a non initialisee"
try:
a = a + 1
except Exception, err :
print err
coruscant:~/Langages/Python chris$ cat except.py
Premier essai, variable a non initialisee
name 'a' is not defined
coruscant:~/Langages/Python chris$
Utiliser une clause except sans prciser la (ou les) exceptions attendues n'est pas une
bonne pratique.
Cela peut masquer des exceptions inattendues, et rendre la mise au point difficile.
Noter aussi que SystemExit (gnre par sys.exit()) est une exception, et qu'on n'a pas
forcment envie de la masquer.
C. Aperghis-Tramoni
172
Dpartement dInformatique
C. Aperghis-Tramoni
173
Dpartement dInformatique
C. Aperghis-Tramoni
3.14159
174
Dpartement dInformatique
C. Aperghis-Tramoni
175
Dpartement dInformatique
La clause try/finally.
Elle est de la forme : try :
<Instructions>
finally :
<Instructions>
Cette forme ne comporte qu'une clause" finally" et ne peut pas avoir de clause "else".
La clause "finally" s'excute systmatiquement aprs la clause "try" quelle qu'en soit la
fin.
Elle met en place un gestionnaire de nettoyage qui s'excutera :
Si aucune exception ne survient.
Si la clause "try" se termine normalement aprs traitement d'une exception.
Si la clause "try" se termine par une instruction "break".
Si la clause "try" se termine par une instruction "continue".
Si la clause "try" se termine par une instruction "return".
C'est un moyen fiable de spcifier un code qui sera toujours excut.
f = open(fich.txt, "r")
try :
imprimer(f)
finally :
f.close()
C. Aperghis-Tramoni
176
Dpartement dInformatique
Lancer un processus.
Il est possible un programme python d'excuter un autre programme python.
coruscant:~/Langages/Python chris$ cat lanceur.py
import os
print 'Lancement de b.py'
os.system('b.py')
print 'Retour apres execution de b.py'
coruscant:~/Langages/Python chris$ cat b.py
a=1
b=5
res=a+b
print "resultat de l'execution de b.py : ", res
coruscant:~/Langages/Python chris$ python lanceur.py
Lancement de b.py
resultat de l'execution de b.py : 6
Retour apres execution de b.py
coruscant:~/Langages/Python chris$
C. Aperghis-Tramoni
177
Dpartement dInformatique
C. Aperghis-Tramoni
178
Dpartement dInformatique