Vous êtes sur la page 1sur 178

Le logiciel Python.

La totalit du systme Python est librement tlchargeable sur www.python.org


Pour les systmes Windows Active State propose une distribution adapte :
http://www.activestate.com/Products/ActivePython/

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%

On sort du mode immdiat au moyen du caractre ctrl D.

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 :

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 + 3
5
>>> a = 100
>>> a
100
>>> print "Bonjour la compagnie."
Bonjour la compagnie.
>>> print "Hello.
File "<stdin>", line 1
print "Hello.
^
SyntaxError: EOL while scanning single-quoted string
>>> ^D
coruscant:~/Langages/Python chris$

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)

Resistance is Futile ...

.. Your language will be asimilated.

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

Les valeurs numriques.


Entiers courts.
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.
>>> 0
0
>>> 2007
2007
>>> -260
-260
>>> ^D
coruscant:~/Langages/Python chris$

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

Les valeurs numriques.


Nombre en base 8.
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.
>>> 04634
2460
>>> ^D
coruscant:~/Langages/Python chris$

Nombre en base 16.


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.
>>> 0X1EABCF
2010063
>>> ^D
coruscant:~/Langages/Python chris$ chris%

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$

Sinon, la rgle du type le plus fort sapplique.


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.0/5
0.20000000000000001
>>> 1/float(3)
0.33333333333333331
>>> float(1/7)
0.0
>>> ^D
coruscant:~/Langages/Python chris%

C. Aperghis-Tramoni

12

Dpartement dInformatique

Exemples.

coruscant:~/Langages/Python chris$ ./test.py


C:\Temp>python prog.py
Un entier 3 sur un flottant 1.24 : 2.41935483871
Un hexadecimal 255 + un complexe (25+4j) : (280+4j)
Un entier long 999999999 - (un entier 3 * un hexa 255.) : 999999234
Un nombre 1.24 eleve a la puissance 3 : 1.906624
Un entier 4 divise par un entier 3 : 1
Un modulo 4 d'un reel 1.24 : 0.28
coruscant:~/Langages/Python chris$

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$

Valeurs spcifiques prdfinies .


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.
>>> b=None
>>> b
>>>
>>> not b
True
>>> b=True
>>> not b
False
>>> ^D
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

14

Dpartement dInformatique

Les 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.
>>> "Bonjour tout le monde."
'Bonjour tout le monde.'
>>> 'Bonjour tout le monde.'
'Bonjour tout le monde.'
>>> "J'ai voulu vous dire bonjour."
"J'ai voulu vous dire bonjour."
>>> "J'ai voulu vous dire \"Bonjour\"."
'J\'ai voulu vous dire "Bonjour".
>>> ^D
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

15

Dpartement dInformatique

Les longues chanes.


Plus original, lutilisation de triples quotes doubles () ou triples quotes simples ().
Dans ce cas, les fin de lignes sont exactement celles qui apparaissent dans la chane..
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.
>>> """Definition de longues chaines
... Une longue chaine
... est une suite de caracteres
... qui tient sur plusieurs lignes consecutives."""
'Definition de longues chaines\nUne longue chaine\nest une suite de caracteres\nqui
tient sur plusieurs lignes consecutives.
>>> print """Une longue chaine
... est une suite de caractres
... qui tient sur plusieurs lignes consecutives."""
Une longue chaine
est une suite de caractres
qui tient sur plusieurs lignes consecutives.
>>> ^D
coruscant:~/Langages/Python chris$

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

Mthodes des chanes.


split() Dcoupe
une chane en une
liste de mots.

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.".split(" ")
['Bonjour', 'tout', 'le', 'monde.']
>>> ^D
coruscant:~/Langages/Python chris$

join() Concatne
une liste de
chanes en une
chane unique.

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.
>>> "-".join(['Bonjour', 'tout', 'le', 'monde.'])
'Bonjour-tout-le-monde.'
>>> ^D
coruscant:~/Langages/Python chris$

find() Donne la
position d'une
sous-chane dans
une chane.
count() Compte le
nombre de souschanes dans la
chane :

C. Aperghis-Tramoni

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.".find('ou')
4
>>> "Bonjour tout le monde.".count('ou')
2
>>> ^D
coruscant:~/Langages/Python chris$

18

Dpartement dInformatique

Mthodes des chanes.


lower() : convertit
une chane en
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.
>>> "CHAINE EN MAJUSCULES".lower()
'chaine en majuscules'
>>> ^D
coruscant:~/Langages/Python chris$

upper() : convertit
une chane en
majuscules.

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.
>>> "chaine en minuscules".upper()
'CHAINE EN MINUSCULES'
>>> ^D
coruscant:~/Langages/Python chris$

capitalize()
Convertit la
premire lettre en
majuscule.
title() Convertit la
premire lettre de
tous les mots en
majuscule.

C. Aperghis-Tramoni

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.
>>> "chaine en minuscules".capitalize()
'Chaine en minuscules'
>>> "chaine en minuscules".title()
'Chaine En Minuscules'
>>> ^D
coruscant:~/Langages/Python chris$

19

Dpartement dInformatique

Mthodes des chanes.


swapcase()
Intervertit les
majuscules et les
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.
>>> "MAJUSCULES - minuscules".swapcase()
'majuscules - MINUSCULES'
>>> ^D
coruscant:~/Langages/Python chris$

strip() Supprime
les blancs inutiles
en dbut et en de
chane

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.
".strip()
'Bonjour tout le monde.'
>>> ^D
coruscant:~/Langages/Python chris$

replace() Remplace
une sous-chane
par une autre.

C. Aperghis-Tramoni

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.'.replace('tout le monde','la compagnie')
'Bonjour la compagnie.'
>>> ^D
coruscant:~/Langages/Python chris$

20

Dpartement dInformatique

Mthodes des chanes.


isalnum() Renvoie
la valeur vrai si la
chane est
constitue de
lettres ou de
chiffres et si
len(s)>0.

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.
>>> "ABC123abc".isalnum()
True
>>> "ABC-123-abc".isalnum()
False
>>> ^D
coruscant:~/Langages/Python chris$

isalpha() Renvoie
la valeur vrai si la
chane est
constitue de
lettres et si
len(s)>0.

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.
>>> "ABCabc".isalpha()
True
>>> "ABC123".isalpha()
False
>>> ^D
coruscant:~/Langages/Python chris$

isdigit() ) Renvoie
la valeur vrai si la
chane est
constitue de
chiffres et si
len(s)>0

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.
>>> "0123".isdigit()
True
>>> "0123A".isdigit()
False
>>> ^D
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

21

Dpartement dInformatique

Mthodes des chanes.


islower() Renvoie
la valeur vrai si la
chane n'est
constitue que de
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.
>>> "abcd".islower()
True
>>> "abcdE".islower()
False
>>> ^D
coruscant:~/Langages/Python chris$

isupper() Renvoie
la valeur vrai si la
chane n'est
constitue que de
lettres majuscules.

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.
>>> "ABCDE".isupper()
True
>>> "ABCDe".isupper()
False
>>> ^D
coruscant:~/Langages/Python chris$

isspace() Renvoie
la valeur vrai si la
chane n'est
constitue que
d'espaces.

C. Aperghis-Tramoni

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.
>>> "
".isspace()
True
>>> "x
".isspace()
False
>>> ^D
coruscant:~/Langages/Python chris$

22

Dpartement dInformatique

Mthodes des chanes.


istitle() Renvoie la
valeur vrai si la
chane est une
squence de titre,
tous les mots
commencent par
une majuscule.

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 A Tous.".istitle()
True
>>> "Bonjour a Tous.".istitle()
False
>>> ^D
coruscant:~/Langages/Python chris$

center(n) Renvoie
une copie de la
chane centre sur
n 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.
>>> "Bonjour".center(15)
'
Bonjour
'
>>> ^D
coruscant:~/Langages/Python chris$

ljust(n) Renvoie
une copie de la
chane justifie
gauche sur n
caractres.

C. Aperghis-Tramoni

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".ljust(15)
'Bonjour
'
coruscant:~/Langages/Python chris$

23

Dpartement dInformatique

Mthodes des chanes.


rjust(n) Renvoie
une copie de la
chane justifie
droite sur n
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.
>>> "Bonjour".rjust(15)
'
Bonjour'
>>> ^D
coruscant:~/Langages/Python chris$

replace(x,y,n)
Remplace dans la
chane les n
premires
occurrences de la
sous chane x par
la chane y.

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.
>>> "abracadabra".replace('a','*',2)
'*br*cadabra'
>>> ^D
coruscant:~/Langages/Python chris$

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.

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.
>>> table=string.maketrans('ABCDEFGHIJ','0123456789')
>>> table
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\
x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0123456789:;<=>?@012
3456789KLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83
\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97
\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab
\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf
\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3
\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7
\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb
\xfc\xfd\xfe\xff'
>>> tr=string.maketrans('aeiou','*****')
>>> 'Bonjour la compagnie'.translate(tr,' ')
'B*nj**rl*c*mp*gn**'
>>> ^D
coruscant:~/Langages/Python chris$

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

Modification des chanes.


Il n'est pas possible de modifier une chane 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.
>>> a = "Bonjour tout le monde."
>>> a[10] = "x"
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

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.

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 = 2007
>>> date = "Nous sommes en l'an " + `a`
>>> date
"Nous sommes en l'an 2007"
>>> annee = "Cette annee est l'annee " + repr(a)
>>> annee
"Cette annee est l'annee 2007"
>>> ^D
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

29

Dpartement dInformatique

Unicode.

C. Aperghis-Tramoni

30

Dpartement dInformatique

Les chanes Unicode.


Unicode, c'est un codage pour chaque caractre de toutes les critures utilises dans le monde
Ce numro est constitu de 4 chiffres hexadcimaux.
Une chane unicode est prcde dun u minuscule avant les guillemets.
il suffira de reprsenter le code hexadcimal prcd de la squence dchapement unicode (\u).
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 = u"Bonjour\u0020tout\u0020le\u0020monde."
>>> a
u'Bonjour tout le monde.'
>>>
>>> ^D
coruscant:~/Langages/Python chris$

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

Modification des variables.


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
10
>>> variable = variable * 5
>>> variable
50
>>> type(variable)
<type 'int'>
>>> variable = float(variable)
>>> variable
50.0
>>> type(variable)
<type 'float'>
>>> variable = "Caracteres"
>>> variable
'Caracteres'
>>> type(variable)
<type 'str'>
>>> variable = True
>>> type(variable)
<type 'bool'>
>>> variable = None
>>> type(variable)
<type 'NoneType'>
>>> ^D
coruscant:~/Langages/Python chris$

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.

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.
>>> Longueur = 10
>>> Largeur = 50
>>> Hauteur = 45
>>> Volume = Longueur * Largeur * Hauteur
>>> Volume
22500
>>> Rayon = 10
>>> Surface = Diametre * 3.14159
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'Diametre' is not defined
>>> Surface = 2 * Rayon * 3.14159
>>> Surface
62.831800000000001
>>> ^D
coruscant:~/Langages/Python chris$

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

Les oprations bolennes.


Dcalage gauche :
OU bits--bits :
ET bits--bits :
XOR bits--bits :

<<
|
&
^

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
>>> b = 1
>>> a << 3
8
>>> a | b
1
>>> a & b
1
>>> a ^ b
0
>>> ^D
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

40

Dpartement dInformatique

Les oprateurs logiques.


N'importe quelle valeur diffrente de zro ou vide sera value "vrai".
"non Vrai", ou "faux" sera le rsultat de l'valuation de zro, vide , ou None.
Les tests d'galit renvoient 1 (vrai) ou 0 (Faux).
Les oprateurs boolens "and" et "or" renvoient un objet oprande vrai ou faux.
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 = 10
>>> b = 20
>>> c = a == b
>>> c
0
>>> ^D
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 = 10
>>> b = 20
>>> c = 20
Ici, on enchane les comparaisons.
>>> x = a > b == c
>>> x
la valeur de x et conditionne
0
deux conditions, (a > b) et (b == c)
>>> ^D
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

41

Dpartement dInformatique

Les objets oprande.


Les oprateurs boolens "and" et "or" renvoient toujours un objet.
L'opration se fait en court circuit, c'est dire que le rsultat sera valu ds que possible.
A or B
Table de vrit
A

A or B

Vrai

Vrai

Vrai

Vrai

Faux

Vrai

Faux

Vrai

Vrai

Faux

Faux

Faux

Lorsque le premier oprande est vrai, on connat


le rsultat final sans avoir a valuer le second.
Lorsque le premier oprande est faux, il est
indispensable d'valuer le second pour
connatre le rsultat final.

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

Lorsque le premier oprande est faux, on connat


le rsultat final sans avoir a valuer le second.
Lorsque le premier oprande est vrai, il est
indispensable d'valuer le second pour
connatre le rsultat final.
42

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

Un mot des complexes.


Python sait grer les calculs sur les nombres complexes.

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.
>>> complex(1,2)
(1+2j)
>>> 3j + complex(2,3)
(2+6j)
>>> _ + (1+2j)
(3+8j)
>>> 1j ** 2
(-1+0j)
>>> _ + 2j
(-1+2j)
>>> _ / 3
(-0.33333333333333331+0.66666666666666663j)
>>> a = _
>>> a.real
-0.33333333333333331
>>> a.imag
0.66666666666666663
>>> ^D
coruscant:~/Langages/Python chris$

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

Les sous listes.


Il est aussi possible de travailler sur les sous listes 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.
>>> a = [10,11,12,13,14,15,16]
>>> a
[10, 11, 12, 13, 14, 15, 16]
>>> a[0:2] = []
>>> a
[12, 13, 14, 15, 16]
>>> a[0:1] = [100,200]
>>> a
[100, 200, 13, 14, 15, 16]
>>> a[3:3]=a[1:4]
>>> a
[100, 200, 13, 200, 13, 14, 14, 15, 16]
>>> len(a)
9
>>> a[3] = ["a","b","c","d"]
>>> a
[100, 200, 13, ['a', 'b', 'c', 'd'], 13, 14, 14, 15, 16]
>>> ^D
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

46

Dpartement dInformatique

Autres exemples d'oprations.


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=[]
>>>L1
[]
>>> L2=[0, 1, 2, 3]
>>> L2
[0, 1, 2, 3]
>>> L3=[ 'abc', ['def', 'ghi'], 'jkl', ['m', 'n', 'o', 'p']]
>>> L3
['abc', ['def', 'ghi'], 'jkl', ['m', 'n', 'o', 'p']]
>>> L2[2], L3[3][3]
(2, 'p')
>>> L2[0:2],L3[3][1:3]
([0, 1], ['n', 'o'])
>>> L4=[4, 5, 6, 7, 8, 9]
>>> L4
[4, 5, 6, 7, 8, 9]
>>> L5 = L2 + L4
>>> L5
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> L6 = L2 * 3
>>> L6
[0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]
>>> ^D
coruscant:~/Langages/Python chris$

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.

Cest un type de donnes spcifique intgr au langage.


D'autres langages (perl, ruby) proposent ce type de donnes sous le nom de hash.
Cest une structure laquelle il est possible daccder au moyen dune cl qui peut
tre de nimporte quel type non modifiable.
Chane.
Nombre.
Tuple sous rserve de ne contienir que des chanes ou des nombres.
Il est interdit dutiliser une liste comme cl daccs un dictionnaire car une liste est
modifiable au moyen de plusieurs mthodes que nous avons voqu.
Un dictionnaire est en quelque sorte un ensemble non ordonn de paires
<cle :valeur >
Il est dclar lintrieur daccolades.
Les couples cle :valeur seront spars les uns des autres par des virgules.

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$

Outre les dclaration et les accs, l'exemple ci dessus montre quelques


fonctions et mthodes permettant de travailler sur les dictionnaires.
La mthode has_keys() permet de tester si une cl existe ou non.
La mthode keys() retourne le liste des cls d'accs aux lments de ce
dictionnaire. Remarquons au passage que lordre dans lequel la liste de cls est
retourne est quelconque..
C. Aperghis-Tramoni

51

Dpartement dInformatique

Dictionnaire de dictionnaire.

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={'Allee1' : {'Tulipes':10,'Jonquilles':25},'Allee2' : {'Begonias':15,'Iris':50}}
>>> jardin
{'Allee2': {'Iris': 50, 'Begonias': 15}, 'Allee1': {'Jonquilles': 25, 'Tulipes': 10}}
>>> jardin['Allee1']
{'Jonquilles': 25, 'Tulipes': 10}
>>> jardin['Allee1']['Jonquilles']
25
>>> len(jardin)
2
>>> len(jardin['Allee1'])
2
>>> ^D
coruscant:~/Langages/Python chris$

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

Impression d'un dictionnaire.


Il existe un moyen simple de procder limpression des valeurs d'un dictionnaire, Il
suffit de faire rfrence la cl d'accs du dictionnaire dans la description du
format.
coruscant:~/Langages/Python chris$ cat prog.py
#!/usr/bin/python
jardin={'Tulipes':10,'Jonquilles':25,'Begonias':15,'Iris':50}
print ('Composition du jardin :')
print ' Begonias: %(Begonias)d\n Tulipes: %(Tulipes)d\n Jonquilles: %(Jonquilles)d\n
coruscant:~/Langages/Python chris$ ./prog.py
Composition du jardin :
Begonias: 15
Tulipes: 10
Jonquilles: 25
Iris: 50
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

54

Iris: %(Iris)d' % jardin

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

Grer les erreurs.


Que lon soit en mode fichier ou en mode interactif, la prsence dune erreur dclenche limpression dun
message.
L'interprteur visualise la ligne sur laquelle lerreur a t dtecte.
Le symbole ( ^ ) met en vidence lendroit ou se situe le problme.
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.
>>> print Bonjour tout le monde\n"
File "<stdin>", line 1
print Bonjour tout le monde\n"
^
SyntaxError: invalid syntax
>>>
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

57

Dpartement dInformatique

Lire une information.


Pour saisir une information au clavier :
input()
Le typage est dynamique
Possibilit d'afficher une invite :
n = input("Entrez un entier : ")
Pour forcer une saisie en mode texte :
raw_input()
On peut ensuite procder un transcodage de l'information.
c = raw_input("Donnez moi un flottant : ")
# Transcodage de la chane de caractre en flotant.
f = float(a)
# ou plus simplement :
x = float(raw_input("Donnez moi un flottant : "))

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

Les formats d'impression.


C'est le moyen de contrler l'impression.
coruscant:~/Langages/Python chris$ cat prog.py
#!/usr/bin/python
n = 10
# Impression en base 10.
print "%d en base 10 : %d" % (n, n)
# Impression en base 8.
print "%d en base 8 : %o" % (n, n)
# Impression en base 16.
print "%d en base 16 : %x" % (n, n)
coruscant:~/Langages/Python chris$ ./prog.py
10 en base 10 : 10
10 en base 8 : 12
10 en base 16 : a
coruscant:~/Langages/Python chris$

%d : Affichage en base 10.


%o : Affichage en base 8.
%x : Affichage en base 16.

coruscant:~/Langages/Python chris$ cat prog.py


#!/usr/bin/python
pi = 3.1415926535897931
# Affichage sur 4 positions, 2 chiffres apres la virgule.
print "%4.2f" %(pi)
# Affichage en format exponentiel.
print "%.4e" %(pi)
# Affichage optimal.
print "%g" %(pi)
coruscant:~/Langages/Python chris$ ./prog.py
3.14
3.1416e+000
3.14159
coruscant:~/Langages/Python chris$

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$ cat prog.py


#!/usr/bin/python
import math
a = math.pi
print a
print '<%3d>' %a
print '<%7.5f>' %a
print '<%9.5f>' %a
coruscant:~/Langages/Python chris$ ./prog.py

coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

61

Dpartement dInformatique

Rsum des formats d'impression.


%d

Entier sign.

%u

Entier non-sign.

%o

Octal non-sign.

%x

Hexadcimal non-sign.

%s

Chane de caractres.

%f

Flottant.

%e

Flottant en format exponentiel.

%g

Flottant en format optimal suivant sa longueur.

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.

coruscant:~/Langages/Python chris$ cat prog.py


#!/usr/bin/python
import string
for x in range(1, 6):
print 'Nombre :',string.rjust(`x`, 2),
print '- Carre :',string.rjust(`x*x`, 3),
print '- Cube :',string.rjust(`x*x*x`, 4)
coruscant:~/Langages/Python chris$ ./prog.py
Nombre : 1 - Carre :
1 - Cube :
1
Nombre : 2 - Carre :
4 - Cube :
8
Nombre : 3 - Carre :
9 - Cube : 27
Nombre : 4 - Carre : 16 - Cube : 64
Nombre : 5 - Carre : 25 - Cube : 125
coruscant:~/Langages/Python chris$

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

- Cube : %4d' %(x, x*x, x*x*x)


./prog.py
1
8
27
64
125

64

Dpartement dInformatique

Les mthodes string.


string.rjust(valeur,longueur)
permet de cadrer la chane de caractre reprsentative de la valeur numrique (les
valeurs sont prsentes entre antiquotes) sur la droite dune champ dont la longueur
est donne par le second argument.
string.rjust(`x`,2)
Permet de convertir le nombre x (par exemple 3) en une chane de caractres (' 3')
puis rserve deux emplacements (valeur du second argument) et cadre la chane
droite.
De la mme manire nous disposons des mthodes
string.ljust(ch,long) (cadrage gauche)
string.center(ch,long) (centrage)

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 -)..

coruscant:~/Langages/Python chris$ cat prog.py


#!/usr/bin/python
import string
x = string.zfill(`10`,5)
print "string.zfill(`10`,5) donne :", x
x = string.zfill(`-25`,7)
print "string.zfill(`-25`,7) donne :", x
x = string.zfill(`176485645`,3)
print "string.zfill(`176485645`,3) donne :",
xcoruscant:~/Langages/Python chris$ ./prog.py
string.zfill(`10`,5) donne : 00010
string.zfill(`-25`,7) donne : -000025
string.zfill(`176485645`,3) donne : 176485645
coruscant:~/Langages/Python chris$

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

Instructions, blocs et mise en page.


Dans certains langages de programmation, chaque ligne d'instructions par un
caractre spcifique.
Dans Python, c'est le caractre de saut la ligne qui joue ce rle.
Lorsqu'une instruction dpasse la longueur de la ligne, on utilise le caractre
antislash (\) pour indiquer la continuation.
Un commentaire commence toujours par le caractre spcial #, tout ce qui est
inclus entre ce caractre et la fin de ligne est compltement ignor par le
compilateur.
Dans la plupart des langages, un bloc
d'instructions est systmatiquement
dlimit par des symboles ou des mots
cl spcifiques.
En Python, c'est l'indentation,qui joue
le rle de dlimiteur de blocs.

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

coruscant:~/Langages/Python chris$ cat fibo.py


#!/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
coruscant:~/Langages/Python chris$ ./fibo.py
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
coruscant:~/Langages/Python chris$

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 (<, >, <=, >=, ==,!=).

Les deux instructions suivantes font partie du


corps de la boucle et seront excutes chaque
itration.
Cest en considrant lindentation que Python
regroupe les instructions, les deux lignes ayant
une indentation identique, font toute les deux
partie du corps de la boucle while.

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$

Dans cet exemple, la valeur de x rfre deux conditions : (a > b) et (b == c).

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.

coruscant:~/Langages/Python chris$ cat prog.py


#!/usr/bin/python
x = ( 1 ,2,3 )
y = ( 1,10,3 )
print "On teste si ", x, " est inferieur a ",y, ". Resultat : ", x < y
x = (1,2,3)
y = (1,2,3)
print "On teste si ", x, " est egal a ",y, ". Resultat : ", x == y
x = 'Bonjour'
y = 'Monsieur'
print "On teste si ", x, " est superieur a ",y, ". Resultat : ", x > y
x = (1,2,3)
y = (1,2,3,4)
print "On teste si ", x, " est superieur a ",y, ". Resultat : ", x > y
x = (1,2,3)
y = (1.0,2.0,3.0)
print "On teste si ", x, " est egal a ",y, ". Resultat : ", x == y
x = (1,2,('aa','bb'),3)
y = (1,2,('aa','bc'),5)
print "On teste si ", x, " est inferieur a ",y, ". Resultat : ", x == y
coruscant:~/Langages/Python chris$ ./prog.py
On teste si (1, 2, 3) est inferieur a (1, 10, 3) . Resultat : True
On teste si (1, 2, 3) est egal a (1, 2, 3) . Resultat : True
On teste si Bonjour est superieur a Monsieur . Resultat : False
On teste si (1, 2, 3) est superieur a (1, 2, 3, 4) . Resultat : False
On teste si (1, 2, 3) est egal a (1.0, 2.0, 3.0) . Resultat : True
On teste si (1, 2, ('aa', 'bb'), 3) est inferieur a (1, 2, ('aa', 'bc'), 5) .Resultat :
coruscant:~/Langages/Python chris$

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$ cat prog.py


"monde!"]
chris$ ./prog.py

chris$

coruscant:~/Langages/Python chris$ cat prog.py


#!/usr/bin/python
a=Python
for x in a:
print x,
coruscant:~/Langages/Python chris$ ./prog.py
P y t h o n
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$

coruscant:~/Langages/Python chris$ cat prog.py


#!/usr/bin/python
liste = [ 10, 20, 30, 40, 50, 60, 70, 80, 90 ]
somme = 0
i = 0
while i < len(liste):
somme = somme + liste[i]
i = i + 1
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.

coruscant:~/Langages/Python chris$ cat prog.py


#!/usr/bin/python
i = 0
a=["Bonjour", "tout", "le", "monde!"]
# On fait une copie de la liste entire par dcoupage.
for x in a[:]:
i +=1
a.insert(i,len(x))
i +=1
print a
coruscant:~/Langages/Python chris$ ./prog.py
['Bonjour', 7, 'tout', 4, 'le', 2, 'monde!', 6]
coruscant:~/Langages/Python chris$

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):

[5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

Resultat de range (-5,5):

[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]

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

Autre exploration de liste.

Comment liminer les doublons dans une liste.


coruscant:~/Langages/Python chris$ cat prog.py
#!/usr/bin/python
liste = [9,25,12,40,3,5,12,13,27,5,9,3,8,22,40,3,6,5,25]
res = []
for element in liste :
if element not in res :
res.append(element)
res.sort()
print "Le resultat est : \n", res
coruscant:~/Langages/Python chris$ prog.py
Le resultat est :
[3, 5, 6, 8, 9, 12, 13, 22, 25, 27, 40]
coruscant:~/Langages/Python chris$

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

coruscant:~/Langages/Python chris$ cat prog.py


#!/usr/bin/python
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print n, "=", x, "*", n/x
else:
print n, "est premier"
break
coruscant:~/Langages/Python chris% prog.py
3 est premier
4 = 2 * 2
5 est premier
6 = 2 * 3
7 est premier
8 = 2 * 4
9 est premier
coruscant:~/Langages/Python chris$

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

Est le nom du fichier


Est la manire dutiliser le fichier

Mode

Effet

Le fichier correspondant est ouvert en lecture exclusivement.

Le fichier correspondant est ouvert en criture exclusivement.

r+

Le fichier correspondant est accessible en lecture et en criture.

rb

Accs binaire en lecture sur certaines plates-formes (Windows, MacIntosh).

wb

Accs binaire en criture sur certaines plates-formes (Windows, MacIntosh).

r+b

Accs binaire en lecture et criture sur certaines plates-formes (Windows, MacIntosh).

Le fichier correspondant est ouvert en criture incrmentale.

C. Aperghis-Tramoni

84

Dpartement dInformatique

Mode par dfaut.


Si aucun mode nest spcifi au moment de louverture, le mode par dfaut est r.
La diffrence entre l'accs normal et binaire porte sur les caractres de fin de ligne
qui seront ventuellement modifis en mode texte et resteront inchangs en mode
binaire.
Il convient donc dtre extrmement prudent, car si ce type de modification est
imperceptible en mode texte, elle altrera gravement les fichiers purement binaires
(images, sons, excutables)
coruscant:~/Langages/Python chris$ cat prog.py
#!/usr/bin/python
x = open('texte.txt')
print x
coruscant:~/Langages/Python chris% prog.py
<open file 'texte.txt', mode 'r' at 0x00B7A410>
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

85

Dpartement dInformatique

Mthodes.

Une fois le fichier ouvert :


descripteur=open(nom_de_fichier,mode)
Plusieurs mthodes permettent de le manipuler.
Nous allons les voir en dtail.

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.

coruscant:~/Langages/Python chris$ cat prog.py


#!/usr/bin/python
x = open('texte.txt','r')
print x
x.flush()
print "Numero de canal : ", y
x.close()
coruscant:~/Langages/Python chris% prog.py
<open file 'texte.txt', mode 'r' at 0x00B7A578>
coruscant:~/Langages/Python chris$

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.

coruscant:~/Langages/Python chris$ cat prog.py


#!/usr/bin/python
x = open('texte.txt','r')
print x
y = x.isatty()
print y
x.close()
coruscant:~/Langages/Python chris% prog.py
<open file 'texte.txt', mode 'r' at 0x00B7A578>
False
coruscant:~/Langages/Python chris$

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

chris$ cat prog.py

:',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$ cat prog.py

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.

Tentative d'accs un fichier qui n'a pas t ouvert au pralable.


coruscant:~/Langages/Python chris$ cat prog.py
#!/usr/bin/python
x = open('texte.txt','r')
x.close()
x.seek(-3,2)
coruscant:~/Langages/Python chris$ fich.py
Traceback (most recent call last):
File "./arg11.py", line 7, in ?
x.seek(-3,2)
ValueError: I/O operation on closed file
coruscant:~/Langages/Python chris$

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().

coruscant:~/Langages/Python chris$ cat prog.py


#!/usr/bin/python
import pickle
fic=open('sortie.txt','w')
jardin={'Tulipes':10,'Jonquilles':25,'Begonias':15,'Iris':50}
print '\nEcriture de la donnee :'
print jardin
print 'dans le fichier.'
print '--------------------------------------------------'
pickle.dump(jardin, fic)
fic.close()
fic=open('sortie.txt','r')
print 'lecture de la donnee dans le fichier, resultat : '
parterre = pickle.load(fic)
print parterre,'\n'
coruscant:~/Langages/Python chris% prog.py
Ecriture de la donnee :
{'Iris': 50, 'Jonquilles': 25, 'Begonias': 15, 'Tulipes': 10}
dans le fichier.
-------------------------------------------------lecture de la donnee dans le fichier, resultat :
{'Iris': 50, 'Jonquilles': 25, 'Begonias': 15, 'Tulipes': 10}
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

101

Dpartement dInformatique

Les expressions rgulires.


La notion d'expression rgulire nous vient de la thorie des langages.
C'est un moyen puissant et relativement standardis de rechercher, remplacer et analyser
du texte l'aide de motifs complexes de caractres.
Les diverses fonctionnalits vont nous permettre de comparer un motif une chane afin de
dterminer si certaines partie de cette chane cible correspondent au motif.
On dispose de mthodes attaches aux objets chane pour effectuer des recherches (index, find
et count), des remplacements (replace) et des analyses (split). Elles sont toutefois limites aux
cas les plus simples.
Les mthodes travaillent sur une chane unique et prdfinie et sont toujours sensibles la
casse.
Pour faire une recherche non sensible la casse sur une chane s, il est ncessaire de faire
appel s.lower() ou s.upper.
Les mthodes replace et split ont les mmes restrictions.
C'est pourquoi, chaque fois que le problme augmente en complexit,il est ncessaite d'utiliser
les expressions rgulires..
Le module < re > offre toutes les fonctionnalits permettant le traitement des expressions
rgulires. La fonction "compile" permet la construction d'un objet expression rgulire partir
d'une chane de motifs et d'options.
Les diverses mthodes vont chercher les correspondances du motif dans la cible et peuvent
procder des modifications ou des substitutions.

C. Aperghis-Tramoni

102

Dpartement dInformatique

La syntaxe des expressions rgulires.


Les caractres alpha-numriques se correspondent eux mme.
Les caractres prcds d'un antislash (\) ont une signification particulire.
Es caractres de ponctuation se se correspondent eux mme si ils sont prcds d'un
antislash (\), ils ont une signification spciale dans le cas contraire.

C. Aperghis-Tramoni

103

Dpartement dInformatique

Syntaxe des motifs.


.

Correspond n'importe quel caractre except \n.


Si DOTALL est positionn, \n est intgr l'ensemble.

Correspond au dbut rel d'une chane.


Si MULTILINE est positionn, chaque \n indique un dbut de chane.

Correspond la fin relle d'une chane.


Si MULTILINE est positionn, chaque \n indique une fin de chane..

Correspond un facteur multiplicatif de 0 n.


L'algorithme multiplicatif est glouton.

Correspond un facteur multiplicatif de 1 n.


L'algorithme multiplicatif est glouton.

Correspond un facteur multiplicatif 0 ou 1.


L'algorithme multiplicatif est glouton.

*? +? ??

Versions non gloutonnes (avares) des facteurs multiplicatifs vus prcdemment.

{m, n}

Correspond un facteur multiplicatif de m n.


L'algorithme multiplicatif est glouton.

{m, n}?

Correspond un facteur multiplicatif de m n.


L'algorithme multiplicatif est non glouton..

[.]

Dclaration d'un ensemble de caractres.

C. Aperghis-Tramoni

104

Dpartement dInformatique

Un exemple.

Exemple :
Cible :
ggtagaacagcttcagttgggatcacaggcttctagggatcctttgggcaaaaaagaaacacagaaggcattctttctatacaagaaa
ggactttatagagctgctaccatgaacggaac
Modle :
cttctag

coruscant:~/Langages/Python chris$ python


Python 2.3 (#1, Sep 13 2003, 00:49:11)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1495)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> sequence =
"ggtagaacagcttcagttgggatcacaggcttctagggatcctttgggcaaaaaagaaacacagaaggcattcttt
ctatacaagaaaggactttatagagctgctaccatgaacggaac"
>>> modele = "cttctag"
>>> patron = re.compile(modele)
>>> assort = patron.search(sequence)
>>> assort.group(0)
'cttctag'
>>>
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

105

Dpartement dInformatique

Mme chose sous forme de programme.

coruscant:~/Langages/Python chris$ cat exo.py


#!/usr/bin/python
import re
sequence =
"ggtagaacagcttcagttgggatcacaggcttctagggatcctttgggcaaaaaagaaacacagaaggcattctttctatacaa
gaaaggactttatagagctgctaccatgaacggaac"
modele = "cttctag"
patron = re.compile(modele)
assort = patron.search(sequence)
print 'Chaine trouvee : ', assort.group(0)
coruscant:~/Langages/Python exo.py
Chaine trouvee : cttctag
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

106

Dpartement dInformatique

Caractres joker.

Le point (.) peut s'assortir a n'importe quel caractre.


Exemple, trouver une chane compose des caractres ttgg suivis de trois caractres
quelconques puis termine par un a.
ttgga

coruscant:~/Langages/Python chris$ cat exo.py


#!/usr/bin/python
import re
sequence =
"ggtagaacagcttcagttgggatcacaggcttctagggatcctttgggcaaaaaagaaacacagaaggcattctttctatacaa
gaaaggactttatagagctgctaccatgaacggaac"
modele = "ttgga"
patron = re.compile(modele)
assort = patron.search(sequence)
print 'Chaine trouvee : ', assort.group(0)
coruscant:~/Langages/Python chris$ exo.py
Chaine trouvee : ttgggcaa
coruscant:~/Langages/Python chris$

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.

L'astrisque (*) reprsente un facteur multiplicatif par un nombre compris entre 0 et n.


Le plus (+) reprsente un facteur multiplicatif par un nombre compris entre 1 et n.
Le point d'interrogation (?) reprsente un facteur multiplicatif par 0 ou 1.
Trouver un c, suivi de au moins un a suivi d'un caractre quelconque, suivi de au
moins un t.
ca+.t+
Connatre l'emplacement de la squence dans la chane.
coruscant:~/Langages/Python chris$ cat exo.py
#!/usr/bin/python
import re
sequence =
"ggtagaacagcttcagttgggatcacaggcttctagggatcctttgggcaaaaaagaaacacagaaggcattctttctatacaagaa
aggactttatagagctgctaccatgaacggaac"
modele = "ca+.t+"
patron = re.compile(modele)
assort = patron.search(sequence)
print 'Chaine trouvee : ', assort.group(0)
print 'Depart de la sequence : ', assort.start()
print 'Fin de la sequence : ', assort.end()
coruscant:~/Langages/Python chris$ exo.py
Chaine trouvee : cagtt
Depart de la sequence : 13
Fin de la sequence : 18
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

109

Dpartement dInformatique

Simplification d'criture.

Il existe une criture plus concise pour la recherche d'expressions rgulire.

coruscant:~/Langages/Python chris$ cat exo.py


#!/usr/bin/python
import re
sequence =
"ggtagaacagcttcagttgggatcacaggcttctagggatcctttgggcaaaaaagaaacacagaaggcattctttctatacaagaa
aggactttatagagctgctaccatgaacggaac"
rep = re.search('ca+.t+', sequence)
print 'Chaine trouvee : ', rep.group(0)
print 'Depart de la sequence : ', rep.start()
print 'Fin de la sequence : ', rep.end()
coruscant:~/Langages/Python chris$ exo.py
Chaine trouvee : cagtt
Depart de la sequence : 13
Fin de la sequence : 18
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

110

Dpartement dInformatique

Rcupration d'une liste de modles.


Lorsqu'un modle est prsent plusieurs emplacements diffrents, on peut tous les
rcuprer par l'intermdiaire d'une liste.
coruscant:~/Langages/Python chris$ cat exo.py
#!/usr/bin/python
import re
sequence =
"ggtagaacagcttcagttgggatcacaggcttctagggatcctttgggcaaaaaagaaacacagaaggcattctttctatacaagaa
aggactttatagagctgctaccatgaacggaac"
modele = "g+a+"
patron = re.compile(modele)
liste = patron.findall(sequence)
print "Les modeles suivants ont ete trouves :"
i = 1
for x in liste :
print "Modele " + `i` + " : ", x
i+=1
coruscant:~/Langages/Python chris$ exo.py
Les modles suivants ont ete trouves :
Modele 1 : gaa
Modele 2 : ggga
Modele 3 : ggga
Modele 4 : gaaa
Modele 5 : gaa
Modele 6 : gaaa
Modele 7 : gga
Modele 8 : ga
Modele 9 : gaa
Modele 10 : ggaa
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

111

Dpartement dInformatique

Sous forme compacte.

coruscant:~/Langages/Python chris$ cat exo.py


#!/usr/bin/python
import re
sequence =
"ggtagaacagcttcagttgggatcacaggcttctagggatcctttgggcaaaaaagaaacacagaaggcattctttctatacaagaa
aggactttatagagctgctaccatgaacggaac"
liste = re.findall("g+a+", sequence)
print "Les modeles suivants one ete trouves :"
i = 1
for x in liste :
print "Modele " + `i` + " : ", x
i+=1
coruscant:~/Langages/Python chris$ exo.py
Les modles suivants one ete trouves :
Modele 1 : gaa
Modele 2 : ggga
Modele 3 : ggga
Modele 4 : gaaa
Modele 5 : gaa
Modele 6 : gaaa
Modele 7 : gga
Modele 8 : ga
Modele 9 : gaa
Modele 10 : ggaa
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

112

Dpartement dInformatique

Les ensembles.

Un ensemble de caractres entre crochet permet de slectionner un des lments de


l'ensemble.
Trouver deux caractres de l'ensemble [AT], suivi de au moins un caractre de
l'ensemble [cg]
[at][at][cg]+
Connatre l'emplacement de la squence dans la chane.
coruscant:~/Langages/Python chris$ cat exo.py
#!/usr/bin/python
import re
sequence =
"ggtagaacagcttcagttgggatcacaggcttctagggatcctttgggcaaaaaagaaacacagaaggcattctttctatacaagaa
aggactttatagagctgctaccatgaacggaac"
modele = "[at][at][cg][cg]*"
patron = re.compile(modele)
assort = patron.search(sequence)
print 'Chaine trouvee : ', assort.group(0)
print 'Depart de la sequence : ', assort.start()
print 'Fin de la sequence : ', assort.end()
coruscant:~/Langages/Python chris$ exo.py
Chaine trouvee : tag
Depart de la sequence : 2
Fin de la sequence : 5
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

113

Dpartement dInformatique

Les fourchettes explicites.

{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.

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)
print 'Chaine trouvee : ', assort.group(0)
print 'Depart de la sequence : ', assort.start()
print 'Fin de la sequence : ', assort.end()
coruscant:~/Langages/Python chris$ exo.py
Chaine trouvee : tttgggc
Depart de la sequence : 42
Fin de la sequence : 49
coruscant:~/Langages/Python chris$

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)

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,1)
print sequence
coruscant:~/Langages/Python chris$ exo.py
ggtagaacagcttcagttgggatcacaggcttctagggatcc-----aaaaaagaaacacagaaggcattctttctatac
aagaaaggactttatagagctgctaccatgaacggaac
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

116

Dpartement dInformatique

Nombre de substitutions.

La valeur indique en fait le nombre de substitutions raliser.


Si par exemple on dsire que les trois premires occurrences du modle "gg" soient
remplaces par la chane "**"
sequence = patron.sub("**", sequence,3)

coruscant:~/Langages/Python chris$ cat exo.py


#!/usr/bin/python
#!/usr/bin/python
import re
sequence =
"ggtagaacagcttcagttgggatcacaggcttctagggatcctttgggcaaaaaagaaacacagaaggcattctttctatacaagaa
aggactttatagagctgctaccatgaacggaac"
modele = "gg"
patron = re.compile(modele)
assort = patron.search(sequence)
sequence = patron.sub("**", sequence,3)
print sequence
coruscant:~/Langages/Python chris$ exo.py
**tagaacagcttcagtt**gatcaca**cttctagggatcctttgggcaaaaaagaaacacagaaggcattctttctat
acaagaaaggactttatagagctgctaccatgaacggaac
coruscant:~/Langages/Python chris$

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.

coruscant:~/Langages/Python chris$ cat ctr.py


# Definition de la fonction.
def prem (x):
# Declaration de la fonction.
for n in range(2, x):
# Un niveau dindentation, corps de la fonction.
for x in range(2, n):
# Deux niveaux dindentation la fonction + 1 for.
if n % x == 0:
# Trois niveaux dindentation, fonction + 2 for.
print n, "=", x, "*", n/x # Quatre niveaux dindentation, fonction, 2 for, 1 if.
else:
# Trois niveaux dindentation, fin du bloc 1 de if.
print n, "est premier"
# Quatre niveaux dindentation, bloc else du if.
break
# Trois niveaux dindentation, break termine le if.
prem(20)
# Appel de la fonction.
coruscant:~/Langages/Python chris$ ctr.py
3 est premier
4 = 2 * 2
5 est premier
6 = 2 * 3
7 est premier
8 = 2 * 4
9 est premier
10 = 2 * 5
11 est premier
12 = 2 * 6
13 est premier
14 = 2 * 7
15 est premier
16 = 2 * 8
17 est premier
18 = 2 * 9
19 est premier
coruscant:~/Langages/Python chris$

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$

Le rsultat que nous obtenons nest pas trs explicite.


l indique simplement que lobjet en question est une fonction qui sappelle fonction et qui se trouve un
certain emplacement.
Notons au passage que valeur peut sans aucun problme tre affect une variable, autorisant ainsi le
renommage de la fonction.
Nous allons voir cette proprit sur un exemple.

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.

coruscant:~/Langages/Python chris$ cat prog.py


#!/usr/bin/python
def carre (x):
y = x * x

coruscant:~/Langages/Python chris$ cat prog.py


#!/usr/bin/python
def carre (x):
global y
y = x * x

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$

La mthode append() permet de gnrer une liste partir de ses lments.


Ecrire resultat.append(b) revient au mme que d'crire resultat = resultat + [b].
Et permet d'ajouter llment b la fin de la liste resultat.
Ainsi, nous crons la liste des valeurs qui sera retourne la fin lorsque linstruction return resultat sera
rencontre.
C. Aperghis-Tramoni

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$

La fonction peut tre appele avec


une liste dappel qui comportera
0, 1 ou deux arguments.

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.

coruscant:~/Langages/Python chris$ cat fonc.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$ fonc.py
Appel : par_defaut()
valeur de a : 10
valeur de b : Vrai
Appel : par_defaut(75)
valeur de a : 75
valeur de b : Vrai
Appel : par_defaut(Bonjour,Monsieur)
valeur de a : Bonjour
valeur de b : Monsieur
coruscant:~/Langages/Python chris$

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.

Dans le cas dun objet modifiable, par exemple une


liste, cette non rvaluation va nous permettre de
conserver les transformations qui lui auront t faites.

coruscant:~/Langages/Python chris$ cat fonc.py


#!/usr/bin/python
val=Indefini
def par_defaut(a=val,b=[]):
print "valeur de a : ",a
print "valeur de b : ",b
a = Maintenant a est defini
b.append(Valeur)
print "Premier appel : par_defaut()"
par_defaut()
print "Second appel : par_defaut()"
par_defaut()
coruscant:~/Langages/Python chris$ fonc.py
Premier appel : par_defaut()
valeur de a : Indefini
valeur de b : []
Second appel : par_defaut()
valeur de a : Indefini
valeur de b : [Valeur]
coruscant:~/Langages/Python chris$

La fonction possde une liste d'appel de deux arguments


Une chane de caractres initialise Indefini
Une liste initialise [] (liste vide).
La tentative de modification de la chane de caractres nest pas couronne de succs alors que la
modification de la liste qui consiste lui ajouter une valeur, est prise en compte.

C. Aperghis-Tramoni

132

Dpartement dInformatique

Appel par mot cl.


Il est aussi possible de faire rfrence une liste d'appel par mot cl.
Les valeurs correspondant aux cls sont affects au moment de lappel sous la forme cle = valeur.
La valeur par dfaut est substitue dans le cas ou aucune cl nest spcifie.
coruscant:~/Langages/Python chris$ cat fonc.py
#!/usr/bin/python
val=Indefini
def par_defaut(c,a=val,b=[]):
print "valeur de a : ",a
print "valeur de b : ",b
print "valeur de c : ",c

Il est intressant de noter que


dans ce type dappel, lordre des
arguments de la liste dappel est
sans importance.

print "Premier appel : par_defaut(a=I am Arthur!,c=1974)"


par_defaut(a=I am Arthur!,c=1974)
print "Second appel : par_defaut(Vide)"
par_defaut(Vide)
coruscant:~/Langages/Python chris$ fonc.py
Premier appel : par_defaut(a=I am Arthur!,c=1974)
valeur de a : I am Arthur!
valeur de b : []
valeur de c : 1974
Second appel : par_defaut(Vide)
valeur de a : Indefini
valeur de b : []
valeur de c : Vide
coruscant:~/Langages/Python chris$

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.

coruscant:~/Langages/Python chris$ cat fonc.py


#!/usr/bin/python
def fiche(a,**description):
if a == Indefini :
print Il ny a rien a imprimer
else:
print a
print "----------------------------------"
for i in description.keys(): print "
",i, :, description[i]
print "----------------------------------"
print "Premiere execution sans rien a imprimer."
fiche("Indefini)
print "\nSeconde impression avec un dictionnaire."
fiche(Carte de visite.,
nom="Graham",
prenom="Chapman",
profession="Monthy Python")
coruscant:~/Langages/Python chris$ fonc.py
Premiere execution sans rien a imprimer.
Il ny a rien a imprimer
Seconde impression avec un dictionnaire.
Carte de visite.
---------------------------------nom : Graham
profession : Monthy Python
prenom : Chapman
---------------------------------coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

136

Dpartement dInformatique

Liste variable.

Il est possible de spcifier explicitement que la fonction peut tre


appele au moyen dune liste de longueur variable.
Ces arguments seront rcuprs dans un n-uplet
coruscant:~/Langages/Python chris$ cat fonc.py
#!/usr/bin/python
def cube(*arguments):
for i in arguments:
print i**2
print "Appel avec la liste (1,2,3,4)"
cube(1,2,3,4)
print "Appel avec la liste (1,3)"
cube(1,3)
print "Appel avec la liste (3)"
cube(3)
coruscant:~/Langages/Python chris$ fonc.py
Appel avec la liste (1,2,3,4)
1
8
27
64
Appel avec la liste (1,3)
1
27
Appel avec la liste (3)
27
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

137

Dpartement dInformatique

Les fonctions anonymes.


Au moyen du mot cl lambda on met en route une particularit
intressante de Python, les fonctions anonymes.

coruscant:~/Langages/Python chris$ cat fonc.py


#!/usr/bin/python
#Definition de la fonction anonyme.
x=lambda a,b : a+b
#Reference a la fonction anonyme.
z=x(3,5)
#Impression du resultat.
print z
coruscant:~/Langages/Python chris$ fonc.py
8
coruscant:~/Langages/Python chris$

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.

coruscant:~/Langages/Python chris$ cat ferm.py


#!/usr/bin/python
def ferm (val):
def fonc(nb): return val + nb
return fonc
x = ferm (100)
y = ferm (200)
print "Appel de x : ",x(50)
print "Appel de y : ",y(50)
coruscant:~/Langages/Python chris$ fonc.py
Appel de x : 150
Appel de y : 250
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

139

Dpartement dInformatique

Utilisation avance des listes.

Noua allons voir quelques utilisations un peu spcifiques des listes


dans un contexte de programmation..

C. Aperghis-Tramoni

140

Dpartement dInformatique

Les mthodes sur les listes.

Mthode.

Fonctionnalit.

append(x)

Insre la valeur x la fin de la liste spcifie: liste.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)

Insre llment x lemplacement i de la liste spcifie: liste.insert(i,x). insert(0,x) permet ainsi


dinsrer llment x au dbut de la liste.

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)

Renvoie le nombre d'occurrences de la valeur x dans la liste considre: n = liste.count(x).

sort()

Trie les lments de la liste considre: liste.sort().

reverse()

renverse lordre des lments de la liste considre: liste.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.

coruscant:~/Langages/Python chris$ cat fonc.py


#!/usr/bin/python
# Calcul des nombres premiers.
def prem(x):
for i in range (2,x/2+1):
if x % i == 0: return 0
return 1
print 'Nombres premiers de l\'intervalle (1,50) :\n',filter(prem,range(1,50))
print 'Nombres premiers de l\'intervalle (51,100) :\n',filter(prem,range(51,100))
coruscant:~/Langages/Python chris$ fonc.py
Nombres premiers de l'intervalle (1,50) :
[1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
Nombres premiers de l'intervalle (51,100) :
[53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
coruscant:~/Langages/Python chris$

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.

coruscant:~/Langages/Python chris$ cat fonc.py


#!/usr/bin/python
# Calcul des nombres premiers.
def prem(x):
for i in range (2,x/2+1):
if x % i == 0: return 0
return 1
print 'Repartition des nombres premiers entre 1 et 10 :\n',map(prem,range(1,11))
print 'Repartition des nombres premiers entre 109 et 120 :\n',map(prem,range(109,121))
coruscant:~/Langages/Python chris$ fonc.py
Repartition des nombres premiers entre 1 et 10 :
[1, 1, 1, 0, 1, 0, 1, 0, 0, 0]
Repartition des nombres premiers entre 109 et 120 :
[1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
coruscant:~/Langages/Python chris$

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.

coruscant:~/Langages/Python chris$ cat fonc.py


#!/usr/bin/python
def somme(x,y):
return x+y
v1 = [5,8,3,7,2,9,6,3]
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, 9, 6, 3]
v2 = [9, 3, 8, 5, 8]
v1 + v2 =
Traceback (most recent call last):
File "./arg11.py", line 9, in ?
print 'v1 + v2 = ',map(somme,v1,v2)
File "./arg11.py", line 3, in somme
return x+y
TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
coruscant:~/Langages/Python chris$

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.

coruscant:~/Langages/Python chris$ cat fonc.py


#!/usr/bin/python
def somme(x,y):
if x == None : x = 0
if y == None : y = 0
return x+y
v1 = [5,8,3,7,2,9,6,3]
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, 9, 6, 3]
v2 = [9, 3, 8, 5, 8]
v1 + v2 = [14, 11, 11, 12, 10, 9, 6, 3]
coruscant:~/Langages/Python chris$

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.

coruscant:~/Langages/Python chris$ % cat fonc.py


#!/usr/bin/python
l1 = [1,2,3,4,5]
l2=['Un','Deux','Trois','Quatre','Cinq']
l3=['One','Two','Three','Four','Five']
ch = map(None,l1,l2,l3)
for i in ch:
print i
coruscant:~/Langages/Python chris$ fonc.py
(1, 'Un', 'One')
(2, 'Deux', 'Two')
(3, 'Trois', 'Three')
(4, 'Quatre', 'Four')
(5, 'Cinq', 'Five')
coruscant:~/Langages/Python chris$

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.

coruscant:~/Langages/Python chris$ cat fonc.py


#!/usr/bin/python
def carre(x):
return x*x
def cube(y):
return y**3
vect = [3,6,32,12,9,7]
res = map(None,vect,map(carre,vect),map(cube,vect))
for i in res : print i
coruscant:~/Langages/Python chris$ fonc.py
(3, 9, 27)
(6, 36, 216)
(32, 1024, 32768)
(12, 144, 1728)
(9, 81, 729)
(7, 49, 343)
coruscant:~/Langages/Python chris$

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.

Un cas particuliers dans lutilisation de


reduce(), serait d'utiliser une liste peut
tre vide.
Dans ce cas une exception est renvoye.

Si liste peut se rduit un unique


lment, la mthode renvoie alors
uniquement la valeur de cet
lment.

C. Aperghis-Tramoni

coruscant:~/Langages/Python chris$ cat fonc.py


#!/usr/bin/python
def prod(x,y):
return x*y
n=[]
print reduce(prod,n)
coruscant:~/Langages/Python chris$ fonc.py
Traceback (most recent call last):
File "./arg11.py", line 5, in ?
print reduce(prod,n)
TypeError: reduce() of empty sequence with no initial
value
coruscant:~/Langages/Python chris$

coruscant:~/Langages/Python chris$ cat fonc.py


#!/usr/bin/python
def prod(x,y):
return x*y
n=[10]
print reduce(prod,n)
coruscant:~/Langages/Python chris$ fonc.py
10
coruscant:~/Langages/Python chris$

151

Dpartement dInformatique

Un troisime paramtre.

Il est aussi possible de transmettre la mthode reduce un troisime paramtre qui


indiquera une valeur de dpart pour la fonction.
Il sera renvoy tel quel si la liste est vide ou servira comme premier lment de calcul
dans le cas contraire
Calcul de la somme des carrs des n premiers entiers.
coruscant:~/Langages/Python chris$ cat fonc.py
#!/usr/bin/python
def somme_carres(x,y):
return x+y**2
n=10
print 'La somme des carres des',n, 'premiers entiers est : ',reduce(somme_carres,range(1,n+1),0)
coruscant:~/Langages/Python chris$ fonc.py
La somme des carres des 10 premiers entiers est : 385
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

152

Dpartement dInformatique

Les "list comprehension".

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.

Par exemple, soit crer une liste qui contienne


les carrs des lments dune liste de rfrence.

coruscant:~/Langages/Python chris$ cat fonc.py


#!/usr/bin/python
n = [1,2,3,4,5,6,7,8,9]
m = [x**2 for x in n]
print 'n = ',n
print 'm = ',m
coruscant:~/Langages/Python chris$ fonc.py
n = [1, 2, 3, 4, 5, 6, 7, 8, 9]
m = [1, 4, 9, 16, 25, 36, 49, 64, 81]
coruscant:~/Langages/Python chris$

Mme opration, en se contentant de calculer les


carrs des nombres pairs:

coruscant:~/Langages/Python chris$ cat fonc.py


#!/usr/bin/python
n = [1,2,3,4,5,6,7,8,9]
m = [x**2 for x in n if x%2 == 0]
print 'n = ',n
print 'm = ',m
coruscant:~/Langages/Python chris$ fonc.py
n = [1, 2, 3, 4, 5, 6, 7, 8, 9]
m = [4, 16, 36, 64]
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

154

Dpartement dInformatique

Autres exemples.

Crer a partir d'une liste donne une liste de


doublets prsentant llment de rfrence et son
carr. Le n-uplet doit se prsenter entre accolades.

coruscant:~/Langages/Python chris$ cat fonc.py


#!/usr/bin/python
n = [1,2,3,4,5,6,7,8,9]
m = [[x,x**2] for x in n if x%2 == 0]
print 'n = ',n
print 'm = ',m
coruscant:~/Langages/Python chris$ fonc.py
n = [1, 2, 3, 4, 5, 6, 7, 8, 9]
m = [[2, 4], [4, 16], [6, 36], [8, 64]]
coruscant:~/Langages/Python chris$

coruscant:~/Langages/Python chris$ cat fonc.py


#!/usr/bin/python
n = [1,2,3,4,5,6,7,8,9]
m = [{x:x**2} for x in n if x%2 == 0]
print 'n = ',n
print 'm = ',m
coruscant:~/Langages/Python chris$ fonc.py
n = [1, 2, 3, 4, 5, 6, 7, 8, 9]
m = [{2: 4}, {4: 16}, {6: 36}, {8: 64}]
coruscant:~/Langages/Python chris$

ou bien entre deux crochets.


coruscant:~/Langages/Python chris$ cat fonc.py
#!/usr/bin/python
n = [1,2,3,4,5,6,7,8,9]
m = [(x,x**2) for x in n if x%2 == 0]
print 'n = ',n
print 'm = ',m
coruscant:~/Langages/Python chris$ fonc.py
n = [1, 2, 3, 4, 5, 6, 7, 8, 9]
m = [(2, 4), (4, 16), (6, 36), (8, 64)]
coruscant:~/Langages/Python chris$

ou bien entre deux parenthses.

C. Aperghis-Tramoni

155

Dpartement dInformatique

Et une erreur de syntaxe.

Le doublet n'est pas spcifi

C. Aperghis-Tramoni

coruscant:~/Langages/Python chris$ cat fonc.py


#!/usr/bin/python
n = [1,2,3,4,5,6,7,8,9]
m = [x,x**2 for x in n if x%2 == 0]
print 'n = ',n
print 'm = ',m
coruscant:~/Langages/Python chris$ fonc.py
File "./arg11.py", line 3
m = [x,x**2 for x in n if x%2 == 0]
^
SyntaxError: invalid syntax
coruscant:~/Langages/Python chris$

156

Dpartement dInformatique

Un peu plus volu.

Le produit cartsien de deux vecteurs.

C. Aperghis-Tramoni

coruscant:~/Langages/Python chris$ cat fonc.py


#!/usr/bin/python
v1 = [1,6,2,]
v2 = [3,5,8,4]
resultat = [x*y for x in v1 for y in v2]
print 'v1 = ',v1
print 'v2 = ',v2
print 'resultat = ',resultat
coruscant:~/Langages/Python chris$ fonc.py
v1 = [1, 6, 2]
v2 = [3, 5, 8, 4]
resultat = [3, 5, 8, 4, 18, 30, 48, 24, 6, 10, 16, 8]
coruscant:~/Langages/Python chris$

157

Dpartement dInformatique

Destruction d'lments.

Un moyen simple pour dtruire tout objet.


Variable
Liste,
Elment de liste
Sous liste

Linstruction del().

C. Aperghis-Tramoni

coruscant:~/Langages/Python chris$ cat fonc.py


#!/usr/bin/python
v1 = [1,6,2,5,9,3,8,6]
print 'Vecteur d\'origine : ',v1
print 'Suppresion de v1[3], del(v1[3]).'
del v1[3]
print 'v1 : ',v1
print 'Suppresion de v1[1:4], del(v1[1:4]).'
del v1[1:4]
print 'v1 : ',v1
print 'Suppresion de v1, del(v1).'
del v1
print 'Tentative d\'acces a v1 :'
print v1
coruscant:~/Langages/Python chris$ fonc.py
Vecteur d'origine : [1, 6, 2, 5, 9, 3, 8, 6]
Suppresion de v1[3], del(v1[3]).
v1 : [1, 6, 2, 9, 3, 8, 6]
Suppresion de v1[1:4], del(v1[1:4]).
v1 : [1, 3, 8, 6]
Suppresion de v1, del(v1).
Tentative d'acces a v1 :
Traceback (most recent call last):
File "./arg11.py", line 13, in ?
print v1
NameError: name 'v1' is not defined
coruscant:~/Langages/Python chris$

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

Un tuple est toujours


prsent entre
parenthses.
Lorsquil ny a pas de
confusion possible il est
possible de les omettre.
Il est toutefois fortement
conseill de toujours les
faire apparatre.

Dpartement dInformatique

Utilisation des tuples.


On utilisera les tuples chaque fois qu'une structures de donnes doit se prsenter en
plusieurs lments.
Coordonnes cartsiennes (x,y,z)
Coordonnes polaires (rho, theta, phi)
Un tuple n'est pas modifiables.
Il est impossible daffecter une valeur individuelle un lment dun 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=('Chaine',10,'Pi',3.14)
>>> t[1]='****'
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: object doesn't support item assignment
>>> ^D
coruscant:~/Langages/Python chris$

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.

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=()
>>> t
()
>>> t=(314)
>>> t
314
>>> t[0]
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: unsubscriptable object
>>> ^D
coruscant:~/Langages/Python chris$

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.

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')
>>> (a,b) = coord
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ValueError: unpack tuple of wrong size
>>> ^D
coruscant:~/Langages/Python chris$

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

Gnralits sur les exceptions.


Les exceptions sont un mcanisme de gestion des erreurs.
coruscant:~/Langages/Python chris$ cat except.py
print "Premier essai, variable a non initialisee"
try:
a = a + 1
except:
print "Probleme, avec la variable a."
else:
print "Affectation reussie."
print
print "SEcond essai, variable a initialisee"
a = 0
try:
a = a + 1
except:
print "Probleme, avec la variable a."
else:
print "Affectation reussie."
coruscant:~/Langages/Python chris$ python except.py
Premier essai, variable a non initialisee
Probleme, avec la variable a.
Premier essai, variable a initialisee
Affectation reussie.
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

167

Dpartement dInformatique

La gestion des exeptions.


Il est ainsi parfaitement possible dcrire du code afin de prendre en charge
certaines exeptions.
Par exemple, la division par zro (ZeroDivisionError).
L'instruction "try" va nous le permettre.
Elle est forme des clauses :
try
except
finally
else
Sa syntaxe gnrale est la suivante :
Une clause try suivie de au moins une clause except.
Une clause try suivie d'une et une seule clause finally.

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

Test de l'ouverture d'un fichier.


coruscant:~/Langages/Python chris$ cat except.py
#!/usr/bin/python
print "Ouverture sans erreur."
try:
file = open("call.txt", 'r')
except IOError, erreur:
print erreur
else :
print "Le fichier a bien ete ouvert."
print
print "Ouverture de fichier inexistant."
try:
file = open("hello.txt", 'r')
except IOError, erreur:
print erreur
else :
print "Le fichier a bien ete ouvert."
coruscant:~/Langages/Python chris$ cat except.py
Ouverture sans erreur.
Le fichier a bien ete ouvert.
Ouverture de fichier inexistant.
[Errno 2] No such file or directory: 'hello.txt'
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

173

Dpartement dInformatique

Test de l'existance d'une variable.


coruscant:~/Langages/Python chris$ cat except.py
#!/usr/bin/python
print "Variable inexistante."
try:
valeur
except NameError:
print "la variable 'valeur' n'existe pas"
else:
print "la variable 'valeur' existe et contient ", valeur
print
print "Variable initialisee."
valeur = 3.14159
try:
valeur
except NameError:
print "la variable 'valeur' n'existe pas"
else:
print "la variable 'valeur' existe et contient ", valeur
coruscant:~/Langages/Python chris$ cat except.py
Variable inexistante.
la variable 'valeur' n'existe pas
Variable initialisee.
la variable 'valeur' existe et contient
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

3.14159

174

Dpartement dInformatique

Rcupration des exceptions dans un fichier.


Rcupration des exceptions et cration d'un fichier de logs.

coruscant:~/Langages/Python chris$ cat except.py


#!/usr/bin/python
import traceback
def calcul(a,b):
return a/b
try:
print calcul(100,0)
except Exception:
logfile = open('log.txt','a')
traceback.print_exc(file=logfile)
logfile.close()
print "Erreur. Consultez le fichier de log (log.txt)."
coruscant:~/Langages/Python chris$ cat except.py
Erreur. Consultez le fichier de log (log.txt).
coruscant:~/Langages/Python chris$ cat log.txt
Traceback (most recent call last):
File "a.py", line 7, in ?
print calcul(100,0)
File "a.py", line 4, in calcul
return a/b
ZeroDivisionError: integer division or modulo by zero
coruscant:~/Langages/Python chris$

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

Importation d'un module.


On peut aussi utiliser l'importation pour ramener le code qui nous intresse
coruscant:~/Langages/Python chris$ cat porg.py
import b
print 'Depart'
print 'Resultat = ',b.Somme(a=24)
coruscant:~/Langages/Python chris$ cat b.py
def Somme(a):
x=5
resultat=a+x
return resultat
coruscant:~/Langages/Python chris$ python prog.py
Depart
Resultat = 29
coruscant:~/Langages/Python chris$

C. Aperghis-Tramoni

178

Dpartement dInformatique