Cours Python

download Cours Python

of 87

Transcript of Cours Python

Cours de Pythonhttp://www.dsimb.inserm.fr/~fuchs/python/

Patrick Fuchs et Pierre Poulain prnom [point] nom [arobase] univ-paris-diderot [point] fr

version du 27 janvier 2012

DSIMB Inserm UMR_S 665 et Universit Paris Diderot-Paris 7 Institut National de la Transfustion Sanguine (INTS) 75015 Paris, France

Ce document est sous licence Creative Commons BY-SA http://creativecommons.org/licenses/by-sa/2.0/fr/

Bienvenue au cours de Python ! Ce cours a t conu lorigine pour les tudiants dbutants en programmation Python des lires biologie et biochimie de lUniversit Paris Diderot - Paris 7 ; et plus spcialement pour les tudiants du master Biologie Informatique. Ce cours est bas sur les versions 2.x de Python et ne prend pas en compte, pour linstant, les nouvelles versions 3.x. Nanmoins, nous essaierons de le mettre rapidement jour de manire traiter la compatibilit entre les deux gnrations. Si vous relevez des erreurs la lecture de ce document, merci de nous les signaler. Le cours est disponible en version HTML et PDF.

RemerciementsUn grand merci Sander du CMBI de Nijmegen pour la premire version de ce cours. Merci galement tous les contributeurs, occasionels ou rguliers : Jennifer Becq, Virginie Martiny, Romain Laurent, Benoist Laurent, Benjamin Boyer, Hubert Santuz, Catherine Lesourd, Philippe Label, Rmi Cuchillo, Cdric Gageat, Philibert Malbranche, Mikal Naveau. Enn, merci vous tous, les curieux de Python, qui avez t nombreux nous envoyer des retours sur ce cours, nous suggrer des corrections et nous signaler des coquilles. De nombreuses personnes nous ont aussi demand les corrections des exercices. Nous ne les mettons pas sur le site an dviter la tentation de les regarder trop vite, mais vous pouvez nous crire et nous vous les enverrons.

2

Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

Table des matires

Table des matires

Table des matires1 Introduction 1.1 Avant de commencer . . . . . . . . . . . 1.2 Premier contact avec Python sous Linux 1.3 Premier programme Python . . . . . . . 1.4 Commentaires . . . . . . . . . . . . . . . Variables et criture 2.1 Variables . . . . . 2.2 Types . . . . . . . 2.3 Nommage . . . . 2.4 Oprations . . . . 2.5 criture . . . . . . 2.6 criture formate 2.7 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 6 6 7 8 9 9 9 9 10 11 11 13 14 14 14 14 15 16 16 17 18 18 20 21 21 24 24 24 25 26 27 29 29 31 32 34 34 34 35 36 36 37 38 3

2

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

3

Listes 3.1 Dnition . . . . . . . . . . 3.2 Utilisation . . . . . . . . . . 3.3 Opration sur les listes . . . 3.4 Indiage ngatif et tranches 3.5 Fonctions range et len . . . 3.6 Listes de listes . . . . . . . . 3.7 Exercices . . . . . . . . . . . Boucles et comparaisons 4.1 Boucles for . . . . . 4.2 Comparaisons . . . 4.3 Boucles while . . . 4.4 Exercices . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

4

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

5

Tests 5.1 Dnition . . . . . . . . . . . 5.2 Tests plusieurs cas . . . . . . 5.3 Tests multiples . . . . . . . . . 5.4 Instructions break et continue 5.5 Exercices . . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

6

Fichiers 6.1 Lecture dans un chier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 criture dans un chier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modules 7.1 Dnition . . . . . . . . . . . . . . . . . . . 7.2 Importation de modules . . . . . . . . . . . 7.3 Obtenir de laide sur les modules imports 7.4 Modules courants . . . . . . . . . . . . . . . 7.5 Module sys : passage darguments . . . . . 7.6 Module os . . . . . . . . . . . . . . . . . . . 7.7 Exercices . . . . . . . . . . . . . . . . . . . .

7

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

Table des matires

Table des matires

8

Plus sur les chanes de caractres 8.1 Prambule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2 Chanes de caractres et listes . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3 Caractres spciaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.4 Mthodes associes aux chanes de caractres . . . . . . . . . . . . . . . . . . 8.5 Conversion de types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.6 Conversion dune liste de chanes de caractres en une chane de caractres 8.7 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Plus sur les listes 9.1 Proprits des listes 9.2 Test dappartenance 9.3 Copie de listes . . . 9.4 Exercices . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

40 40 40 40 41 43 43 44 46 46 47 47 48 50 50 51 52 53 53 54 55 56 57 58 59 59 60 63 64 64 64 65 66 66 67 67 68 68 69 69 69 73 73 74 75 77

9

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

10 Dictionnaires et tuples 10.1 Dictionnaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2 Tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Fonctions 11.1 Dnition . . . . . . 11.2 Passage darguments 11.3 Porte des variables . 11.4 Porte des listes . . . 11.5 Rgle LGI . . . . . . . 11.6 Exercices . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

12 Expressions rgulires et parsing 12.1 Dnition et syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2 Module re et fonction search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3 Exercices : extraction des gnes dun chier genbank . . . . . . . . . . . . . . . . . 13 Cration de modules 13.1 Cration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Autres modules dintrt 14.1 Module urllib2 . . . . . . . . . 14.2 Module pickle . . . . . . . . . 14.2.1 Codage des donnes . 14.2.2 Dcodage des donnes 14.3 Exercices . . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

15 Modules dintrt en bioinformatique 15.1 Module numpy . . . . . . . . . . . . . . . 15.1.1 Objets de type array . . . . . . . . 15.1.2 Un peu dalgbre linaire . . . . . 15.1.3 Un peu de transforme de Fourier 15.2 Module biopython . . . . . . . . . . . . . 15.3 Module matplotlib . . . . . . . . . . . . . 15.4 Module rpy . . . . . . . . . . . . . . . . . 4

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

Table des matires

Table des matires

15.5 Exercice numpy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.6 Exercice rpy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Avoir la classe avec les objets 16.1 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Gestion des erreurs 18 Trucs et astuces 18.1 Shebang et /usr/bin/env python . . . . . . . 18.2 Python et utf-8 . . . . . . . . . . . . . . . . . . 18.3 Vitesse ditration dans les boucles . . . . . . 18.4 Liste de comprhension . . . . . . . . . . . . 18.5 Sauvegardez votre historique de commandes

79 80 81 81 82 85 85 85 85 86 87

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

5

1

Introduction

11.1

IntroductionAvant de commencer

Avant de dbuter ce cours, voici quelques indications gnrales qui pourront vous servir pour la suite. Familiarisez-vous avec le site www.python.org. Il contient normment dinformations et de liens sur Python et vous permet en outre de le tlcharger pour diffrentes plateformes (Linux, Mac, Windows). La page dindex des modules est particulirement utile. Pour aller plus loin avec Python, Grard Swinnen a crit un trs bon livre intitul Apprendre programmer avec Python et tlchargeable gratuitement. Les ditions Eyrolles proposent galement la version papier de cet ouvrage. Ce cours est bas sur une utilisation de Python sous Linux mais il est parfaitement transposable aux systmes dexploitation Windows et Mac. Lapprentissage dun langage informatique comme Python va ncessiter dcrire des lignes de codes laide dun diteur de texte. Si vous tes dbutants, nous vous conseillons vivement dutiliser gedit ou nedit, qui sont les plus proches des diteurs que lon peut trouver sous Windows (notepad). Des diteurs comme emacs et vi sont trs puissants mais ncessitent un apprentissage particulier.

1.2

Premier contact avec Python sous Linux

Python est un langage interprt, cest--dire que chaque ligne de code est lue puis interprte an dtre excute par lordinateur. Pour vous en rendre compte, lancez la commande : python Celle-ci va dmarrer linterprteur Python. Vous devriez obtenir quelque chose de ce style : [fuchs@opera ~]$ python Python 2.5.1 (r251:54863, Jul 10 2008, 17:25:56) [GCC 4.1.2 20070925 (Red Hat 4.1.2-33)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> Le bloc [fuchs@opera ~]$ reprsente linvite de commande de votre shell sous Linux. Le triple chevron >>> est linvite de Python (prompt en anglais), ce qui signie que Python attend une commande. Tapez par exemple linstruction print "Hello world !" puis validez votre commande avec la touche Entre. Python a excut la commande directement et a afch le texte Hello world !. Il attend ensuite votre prochaine instruction en afchant linvite de linterprteur Python (>>> ). En rsum, voici ce qui a du apparatre sur votre cran : >>> print "Hello world !" Hello world ! >>> Vous pouvez refaire un nouvel essai en vous servant cette fois de linterprteur comme dune machine calculer. 6 Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

1.3

Premier programme Python

1

Introduction

>>> 1 + 1 2 >>> ce stade, vous pouvez entrer une autre commande ou bien quitter linterprteur laide des touches Ctrl-D. Finalement linterprteur Python est un systme interactif dans lequel vous pouvez entrer des commandes, que Python excutera sous vos yeux (au moment o vous validerez la commande en tapant sur Entre). Il existe de nombreux autres langages interprts tels que Perl ou R. Le gros avantage est que lon peut directement tester une commande laide de linterprteur, ce qui est trs utile pour dbugger (cest--dire corriger les ventuelles erreurs dun programme). Gardez bien en mmoire cette proprit de Python qui pourra parfois vous faire gagner un temps prcieux !

1.3

Premier programme Python

Bien sr, linterprteur prsente vite des limites ds lors que lon veut excuter une suite dinstructions plus complexe. Comme tout langage informatique, on peut enregistrer ces instructions dans un chier, que lon appelle communment un script Python. Pour reprendre lexemple prcdent, ouvrez un diteur de texte (par exemple gedit ou nedit) et entrez le code suivant. print 'Hello World !' Ensuite enregistrez votre chier sous le nom test.py, puis quittez lditeur de texte. Lextension standard des scripts Python est .py. Pour excuter votre script, vous avez deux moyens.

1. Soit donner le nom de votre script comme argument la commande Python : [fuchs@opera ~]$ python test.py Hello World ! [fuchs@opera ~]$

2. Soit rendre votre chier excutable. Pour cela deux oprations sont ncessaires : Prcisez au shell la localisation de linterprteur Python en indiquant dans la premire ligne du script : #!/usr/bin/env python Dans notre exemple, le script test.py contient alors le texte suivant : #!/usr/bin/env python print 'Hello World !' Rendez votre script Python excutable en tapant : chmod +x test.py Pour excuter votre script, tapez son nom prcd des deux caractres ./ (an de prciser au shell o se trouve votre script) : [fuchs@opera ~]$ ./test.py Hello World ! [fuchs@opera ~]$ Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant 7

1

Introduction

1.4

Commentaires

1.4

Commentaires

Dans un script, tout ce qui suit le caractre # est ignor par Python jusqu la n de la ligne et est considr comme un commentaire. Une exception notable est la premire ligne de votre script qui peut tre #!/usr/bin/env python et qui a alors une signication particulire pour Python. Les commentaires sont indispensables pour que vous puissiez annoter votre code. Il faut absolument les utiliser pour dcrire les principales parties de votre code dans un langage humain. #!/usr/bin/env python # votre premier script Python print 'Hello World !' # d'autres commandes plus utiles pourraient suivre

8

Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

2

Variables et criture

22.1

Variables et critureVariables

Une variable est une zone de la mmoire dans laquelle une valeur est stocke. Aux yeux du programmeur, cette variable est dnie par un nom, alors que pour lordinateur, il sagit en fait dune adresse (i.e. une zone particulire de la mmoire). En Python, la dclaration dune variable et son initialisation (c.--d. la premire valeur que lon va stocker dedans) se fait en mme temps. Pour vous en convaincre, regardez puis testez les instructions suivantes aprs avoir lanc linterprteur : >>> x = 2 >>> x 2 Dans cet exemple, nous avons dclar, puis initialis la variable x avec la valeur 2. Linterprteur nous a ensuite permis de regarder le contenu de la variable juste en tapant son nom. Retenez ceci car cest une spcicit de linterprteur Python, trs pratique pour chasser les erreurs (debug) dans un programme. Par contre, la ligne dun script Python qui contient seulement le nom dune variable (sans aucune autre fonction) nafchera pas la valeur de la variable lcran.

2.2

Types

Le type dune variable correspond la nature de celle-ci. Les trois types principaux dont nous aurons besoin sont les entiers, les rels et les chanes de caractres. Bien sr, il existe de nombreux autres types (par exemple, les nombres complexes), cest dailleurs un des gros avantages de Python (si vous ntes pas effrays, vous pouvez vous en rendre compte ici). Dans lexemple prcdent, nous avons stock un nombre entier (int) dans la variable x, mais il est tout a fait possible de stocker des nombres rels (oat) ou des chanes de caractres (string) : >>> y = 3.14 >>> y 3.1400000000000001 >>> a = "bonjour" >>> a 'bonjour' >>> b = 'salut' >>> b 'salut' >>> c = '''girafe''' >>> c 'girafe' Vous remarquez que Python reconnat certains types de variable automatiquement (entier, rel). Par contre, pour une chane de caractres, il faut lentourer de guillemets (simples, doubles voire triples) an dindiquer Python le dbut et la n de cette chane.

2.3

Nommage

Le nom des variable en Python peut-tre constitu de lettres minuscules (a z), de lettres majuscules (A Z), de nombres (0 9) ou du caractre soulign (_). Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant 9

2

Variables et criture

2.4

Oprations

Nanmoins, un nom de variable ne doit pas dbuter ni par un chiffre, ni par _ et ne peut pas contenir de caractre accentu. Il faut absolument viter dutiliser un mot rserv par Python comme nom de variable (par ex. : print, range, for, from, etc.). Python est sensible la casse, ce qui signie que les variables TesT, test ou TEST sont diffrentes.

2.4

Oprations

Les quatre oprations de base se font de manire simple sur les types numriques (nombres entiers et rels) : >>> x = 45 >>> x + 2 47 >>> y = 2.5 >>> x + y 47.5 >>> (x * 10) / y 180.0 Remarquez toutefois que si vous mlangez les types entiers et rels, le rsultat est renvoy comme un rel (car ce type est plus gnral). Oprations sur les chanes de caractres Pour les chanes de caractres, deux oprations sont possibles, laddition et la multiplication : >>> chaine = "Salut" >>> chaine 'Salut' >>> chaine + " Python" 'Salut Python' >>> chaine * 3 'SalutSalutSalut' Loprateur daddition + permet de concatner (assembler) deux chanes de caractres et loprateur de multiplication * permet de dupliquer plusieurs fois une chane.

Oprations illicites Attention ne pas faire dopration illicite car vous obtiendriez un message derreur : >>> 'toto' + 2 Traceback (most recent call last): File "", line 1, in ? TypeError: cannot concatenate 'str' and 'int' objects Notez que Python vous donne le maximum dindices dans son message derreur. Dans lexemple prcdent, il vous indique que vous ne pouvez pas mlanger des objets de type str (string, donc des chanes de caractres) avec des objets de type int (donc des entiers), ce qui est assez logique. 10 Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

2.5

criture

2

Variables et criture

Fonction type() Si vous ne vous souvenez plus du type dune variable, utilisez la fonction type qui vous le rappelle. >>> x = 2 >>> type(x) >>> x = 2.0 >>> type(x) >>> x = '2' >>> type(x) Faites bien attention, pour Python, la valeur 2 (nombre entier) est diffrente de 2.0 (nombre rel), de mme que 2 (nombre entier) est diffrent de '2' (chane de caractres).

2.5

criture

Nous avons dj vu au chapitre prcdent la fonction print qui permet dcrire une chane de caractres. Elle permet en plus dcrire le contenu dune ou plusieurs variables : >>> x = 32 >>> nom = 'John' >>> print nom , ' a ' , x , ' ans' John a 32 ans Python a donc crit la phrase en remplaant les variables x et nom par leur contenu. Vous pouvez noter galement que pour crire plusieurs blocs de texte sur une seule ligne, nous avons utilis le sparateur , avec la commande print. En regardant de plus prs, vous vous aperevrez que Python a automatiquement ajout un espace chaque fois que lon utilisait le sparateur ,. Par consquent, si vous voulez mettre un seul espace entre chaque bloc, vous pouvez retirer ceux de vos chanes de caractres : >>> print nom , 'a' , x , 'ans' John a 32 ans Pour imprimer deux chanes de caractres lune ct de lautre sans espace, vous devrez les concatner : >>> ani1 = 'chat' >>> ani2 = 'souris' >>> print ani1, ani2 chat souris >>> print ani1 + ani2 chatsouris

2.6

criture formate

Imaginez que vous vouliez calculer puis afcher la proportion de GC dun gnome. Notez que la proportion de GC sobtient comme la somme des bases Guanine (G) et Cytosine (C) divise par le nombre total de bases. Sachant que lon a 4500 bases G, 2575 bases C pour un total de 14800 bases, vous pourriez faire comme suit (notez bien lutilisation des parenthses pour grer les priorits des oprateurs) : Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant 11

2

Variables et criture

2.6

criture formate

>>> propGC = (4500.0 + 2575)/14800 >>> print "La proportion de GC est", propGC La proportion de GC est 0.478040540541 Remarquez que si vous aviez fait le calcul avec (4500 + 2575)/14800, vous auriez obtenu 0 car tous les nombres sont des entiers et le rsultat aurait t, lui aussi, un entier. Lintroduction de 4500.0 qui est un rel rsoud le problme, puisque le calcul se fait alors sur des rels. Nanmoins, le rsultat obtenu prsente trop de dcimales (onze dans le cas prsent). Pour pouvoir crire le rsultat plus lisiblement, vous pouvez utiliser loprateur de formatage %. Dans votre cas, vous voulez formater un rel pour lafcher avec deux puis trois dcimales : >>> print "La Le proportion >>> print "La La proportion proportion de GC est %.2f" % propGC de GC est 0.48 proportion de GC est %.3f" % propGC de GC est 0.478

Le signe % est appel une premire fois (%.2f) pour 1. dsigner lendroit o sera place la variable dans la chane de caractres ; 2. prciser le type de la variable formater, ici f pour oat donc pour un rel ; 3. prciser le formatage voulu, ici .2 soit deux chiffres aprs la virgule. Le signe % est rappel une seconde fois (% propGC) pour indiquer les variables formater. Notez que les rels ainsi formats sont arrondis et non tronqus. Vous pouvez aussi formatez des entiers >>> nbG = 4500 >>> print "Le gnome de cet exemple contient %i guanines" % nbG Le gnome de cet exemple contient 4500 guanines ou mettre plusieurs nombres dans une mme chane de caractres. >>> nbG = 4500 >>> nbC = 2575 >>> print "Ce gnome contient %i G et %i C, soit une proportion de GC de %.2f" \ ... % (nbG,nbC,propGC) Ce gnome contient 4500 G et 2575 C, soit une proportion de GC de 0.48 Remarque : 1. Dans lexemple prcdent, nous avons utilis le symbole % pour formater des variables. Si vous avez besoin dcrire le symbole pourcentage % sans quil soit confondu avec celui servant pour lcriture formate, il suft de le doubler. Toutefois, si lcriture formate nest pas utilise dans la mme chane de caractres o vous voulez utilisez le symbole pourcent, cette opration nest pas ncessaire. Par exemple : >>> nbG = 4500 >>> nbC = 2575 >>> percGC = propGC * 100 >>> print "Ce gnome contient %i G et %i C, soit un %%GC de %.2f" \ ... % (nbG,nbC,percGC) ,"%" Ce gnome contient 4500 G et 2575 C, soit un %GC de 47.80 % 2. Le signe \ en n de ligne permet de poursuivre la commande sur la ligne suivante. Cette syntaxe est pratique lorsque vous voulez taper une commande longue. 12 Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

2.7

Exercices

2

Variables et criture

Enn, il est possible de prciser sur combien de caractres vous voulez quun rsultat soit crit. Dans la portion de code suivant, le caractre ; sert de sparateur entre les instructions sur une mme ligne : >>> print 10 ; print 100 ; print 1000 10 100 1000 >>> print "%4i" % 10 ; print "%4i" % 100 ; print "%4i" % 1000 10 100 1000 >>> Ceci est galement possible sur les chanes de caractres : >>> print "atom HN" ; print "atom HDE1" atom HN atom HDE1 >>> print "atom %4s" % "HN" ; print "atom %4s" % "HDE1" atom HN atom HDE1 Vous voyez tout de suite lnorme avantage de lcriture formate. Cela permet dcrire en colonnes parfaitement alignes. Nous verrons que ceci est trs pratique si lon veut crire les coordonnes des atomes dune molcule au format PDB.

2.7

ExercicesConseil : utilisez linterprteur Python pour les exercices 2 5.

1. Ouvrez linterprteur Python et tapez 1+1. Que se passe-t-il ? crivez la mme chose dans un script test.py. Excutez ce script en tapant python test.py dans un shell. Que se passe-t-il ? Pourquoi ? 2. Calculez le pourcentage de GC avec le code percGC = ((4500 + 2575)/14800)*100 puis afchez le rsultat. Que se passe-t-il ? Comment expliquez-vous ce rsultat ? Corrigez linstruction prcdente pour calculer correctement le pourcentage de GC. Afchez cette valeur avec deux dcimales de prcision. 3. Gnrez une chane de caractres reprsentant un oligonuclotide polyA (AAAA...) de 20 bases de longueurs, sans taper littralement toutes les bases. 4. Suivant le modle du dessus, gnrez en une ligne de code un polyA de 20 bases suivi dun polyGC rgulier (GCGCGC...) de 40 bases. 5. En utilisant lcriture formate, afchez en une seule ligne les variables a, b et c dont les valeurs sont respectivement "salut", 102 et 10.318.

Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

13

3

Listes

33.1

ListesDnition

Une liste est une structure de donnes qui contient une srie de valeurs. Ces valeurs ntant pas forcment du mme type, ceci confre une grande exibilit ces listes. Une liste est dclare par une srie de valeurs (ne pas oublier les guillemets, simples ou doubles, sil sagit de chanes de caractres) spares par des virgules, et le tout encadr par des crochets. En voici quelques exemples : >>> animaux = ['girafe','tigre','singe','souris'] >>> tailles = [5, 2.5, 1.75, 0.15] >>> mixte = ['girafe', 5, 'souris', 0.15] >>> animaux ['girafe', 'tigre', 'singe', 'souris'] >>> tailles [5, 2.5, 1.75, 0.15] >>> mixte ['girafe', 5, 'souris', 0.15] Lorsque lon afche une liste, Python la restitue telle quelle a t saisie.

3.2

Utilisation

Un des gros avantages dune liste est que vous pouvez appeler ses lments par leur position. Ce numro est appel indice (ou index) de la liste. liste : ['girafe', 'tigre', 'singe', 'souris'] indice : 0 1 2 3 Soyez trs attentifs au fait que les indices dune liste de n lments commence 0 et se termine n-1. Voyez lexemple suivant : >>> animaux = ['girafe','tigre','singe','souris'] >>> animaux[0] 'girafe' >>> animaux[1] 'tigre' >>> animaux[3] 'souris' Par consquent, si on appelle llment dindice 4 de notre liste, Python renverra un message derreur : >>> animaux[4] Traceback (innermost last): File "", line 1, in ? IndexError: list index out of range Noubliez pas ceci ou vous risqueriez dobtenir des bugs inattendus !

3.3

Opration sur les listes

Tout comme les chanes de caractres, les listes supportent loprateur + de concatnation, ainsi que loprateur * pour la duplication : 14 Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

3.4

Indiage ngatif et tranches

3

Listes

>>> ani1 = >>> ani2 = >>> ani1 + ['girafe', >>> ani1 * ['girafe',

['girafe','tigre'] ['singe','souris'] ani2 'tigre', 'singe', 'souris'] 3 'tigre', 'girafe', 'tigre', 'girafe', 'tigre']

3.4

Indiage ngatif et tranchesLa liste peut galement tre indexe avec des nombres ngatifs selon le modle suivant :

liste : ['girafe', 'tigre', 'singe', 'souris'] indice positif : 0 1 2 3 indice ngatif : -4 -3 -2 -1 ou encore : liste : ['A','C','D','E','F','G','H','I','K','L'] indice positif : 0 1 2 3 4 5 6 7 8 9 indice negatif : -10 -9 -8 -7 -6 -5 -4 -3 - 2 -1 Les indices ngatifs reviennent compter partir de la n. Leur principal avantage est que vous pouvez appeler le dernier lment dune liste laide de lindice -1 sans pour autant connatre la longueur de la liste. >>> animaux = ['girafe','tigre','singe','souris'] >>> animaux[-4] 'girafe' >>> animaux[-2] 'singe' >>> animaux[-1] 'souris' Un autre avantage des listes est la possibilit de slectionner une partie en utilisant un indiage construit sur le modle [m:n+1] pour rcuprer tous les lments, du mime au nime (de llment m inclus llment n+1 exclus). On dit alors quon rcupre une tranche de la liste, par exemple : >>> animaux = ['girafe', 'tigre', 'singe', 'souris'] >>> animaux[0:2] ['girafe', 'tigre'] >>> animaux[0:3] ['girafe', 'tigre', 'singe'] >>> animaux[0:] ['girafe', 'tigre', 'singe', 'souris'] >>> animaux[:] ['girafe', 'tigre', 'singe', 'souris'] >>> animaux[1:] ['tigre', 'singe', 'souris'] >>> animaux[1:-1] ['tigre', 'singe'] Remarquez que lorsquaucun indice nest indiqu gauche ou droite du symbole : , Python prend par dfaut tous les lments depuis le dbut ou tous les lments jusqu la n respectivement. Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant 15

3

Listes

3.5

Fonctions range et len

Dans les versions rcentes de Python, on peut aussi prciser le pas en ajoutant un : supplmentaire et en indiquant le pas par un entier. >>> animaux = ['girafe', 'tigre', 'singe', 'souris'] >>> animaux[0:3:2] ['girafe', 'singe'] >>> x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> x [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> x[::1] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> x[::2] [0, 2, 4, 6, 8] >>> x[::3] [0, 3, 6, 9] >>> x[1:6:3] [1, 4] Finalement, on voit que laccs au contenu dune liste avec des crochets fonctionne sur le modle liste[dbut:fin:pas].

3.5

Fonctions range et len

Linstruction range() vous permet de crer des listes dentiers (et dentiers uniquement) de manire simple et rapide. Voyez plutt : >>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> range(0,5) [0, 1, 2, 3, 4] >>> range(15,20) [15, 16, 17, 18, 19] >>> range(0,1000,200) [0, 200, 400, 600, 800] >>> range(2,-2,-1) [2, 1, 0, -1] Linstruction range() fonctionne sur le modle range([dbut,] fin[, pas]). Les arguments entre crochets sont optionnels. Linstruction len() vous permet de connatre la longueur dune liste, ce qui parfois est bien pratique lorsquon lit un chier par exemple, et que lon ne connat pas a priori la longueur des lignes. Voici un exemple dutilisation : >>> animaux = ['girafe', 'tigre', 'singe', 'souris'] >>> len(animaux) 4 >>> len(range(10)) 10

3.6

Listes de listes

Pour nir, sachez quil est tout--fait possible de construire des listes de listes. Cette fonctionnalit peut tre parfois trs pratique. Par exemple : 16 Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

3.7

Exercices

3

Listes

>>> enclos1 = ['girafe', 4] >>> enclos2 = ['tigre', 2] >>> enclos3 = ['singe', 5] >>> zoo = [enclos1, enclos2, enclos3] >>> zoo [['girafe', 4], ['tigre', 2], ['singe', 5]] Dans cet exemple, chaque sous-liste contient une catgorie danimal et le nombre danimaux pour chaque catgorie. Pour accder un lment de la sous-liste, on utilise un double indiage. >>> zoo[1] ['tigre', 2] >>> zoo[1][0] 'tigre' >>> zoo[1][1] 2 On verra un peu plus loin quil existe en Python les dictionnaires qui sont trs pratiques pour faire ce genre de choses.

3.7

ExercicesConseil : utilisez linterprteur Python.

1. Constituez une liste semaine contenant les 7 jours de la semaine. partir de cette liste, comment rcuprez-vous seulement les 5 premiers jours de la semaine dune part, et ceux du week-end dautre part (utilisez pour cela lindiage) ? Cherchez un autre moyen pour arriver au mme rsultat (en utilisant un autre indiage). 2. Trouvez deux manires pour accder au dernier jour de la semaine. 3. Inversez les jours de la semaine en une commande. 4. Crez 4 listes hiver, printemps, ete et automne contenant les mois correspondant ces saisons. Crez ensuite une liste saisons contenant les sous-listes hiver, printemps,ete et automne. Prvoyez ce que valent les variables suivantes, puis vriez-le dans linterprteur : saisons[2] saisons[1][0] saisons[1:2] saisons[:][1] Comment expliquez-vous ce dernier rsultat ? 5. Afchez la table de 9 en une seule commande avec linstruction range(). 6. Avec Python, rpondez la question suivante en une seule commande. Combien y a-t-il de nombres pairs dans lintervalle [2 , 10000] inclus ?

Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

17

4

Boucles et comparaisons

44.1

Boucles et comparaisonsBoucles for

Imaginez que vous ayez une liste de quatre lments dont vous voulez afcher les lments les uns aprs les autres. Dans ltat actuel de vos connaissances, il faudrait taper quelque chose du style : animaux = ['girafe','tigre','singe','souris'] print animaux[0] print animaux[1] print animaux[2] print animaux[3] Si votre liste ne contient que quatre lments, ceci est encore faisable mais imaginez quelle en contienne 100 voire 1000 ! Pour remdier cela, il faut utiliser les boucles. Regardez lexemple suivant : >>> animaux = ['girafe','tigre','singe','souris'] >>> for i in animaux: ... print i ... girafe tigre singe souris En fait, la variable i va prendre successivement les diffrentes valeurs de la liste animaux chacune de ses itrations. Dores et dj, remarquez avec attention lindentation. Vous voyez que linstruction print i est dcale par rapport linstruction for i in animaux:. Outre une meilleure lisibilit, ceci est formellement requis en Python. Toutes les instructions que lon veut rpter constituent le corps de la boucle (ou un bloc dinstructions) et doivent tre indentes dun(e) ou plusieurs espace(s) ou tabulation(s). Dans le cas contraire, Python vous renvoie un message derreur : >>> for i in animaux: ... print i File "", line 2 print i ^ IndentationError: expected an indented block Notez galement que si le corps de votre boucle contient plusieurs instructions, celles-ci doivent tre indentes de la mme manire (e.g. si vous avez indent la premire instruction avec deux espaces, vous devez faire de mme avec la deuxime instruction, etc). Remarquez galement un autre aspect de la syntaxe, une instruction for doit absolument se terminer par le signe deux-points:. Il est aussi possible dutiliser une tranche dune liste : >>> animaux = ['girafe','tigre','singe','souris'] >>> for i in animaux[1:3]: ... print i ... tigre singe 18 Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

4.1

Boucles for

4

Boucles et comparaisons

On a vu que les boucles for pouvaient utiliser une liste contenant des chanes de caractres, mais elles peuvent tout aussi bien utiliser des listes numriques. En utilisant linstruction range on peut facilement accder une liste dentiers. >>> for i in range(4): ... print i ... 0 1 2 3 Par consquent, vous pouvez utiliser les boucles comme une itration sur les indices des lments dune liste. >>> animaux = ['girafe', 'tigre', 'singe', 'souris'] >>> for i in range(4): ... print animaux[i] ... girafe tigre singe souris Cependant, la mthode utiliser pour parcourir avec une boucle for les lments dune liste est celle qui ralise les itrations directement sur les lements. >>> animaux = ['girafe','tigre','singe','souris'] >>> for i in animaux: ... print i ... girafe tigre singe souris Si vous avez besoin de parcourir votre liste par ses indices, prfrez la fonction xrange() qui sutilise de la mme manire que range() mais qui ne construit pas de liste et qui est donc beaucoup plus rapide. >>> animaux = ['girafe','tigre','singe','souris'] >>> for i in xrange(4): ... print animaux[i] ... girafe tigre singe souris Enn, si vous avez besoin de lindice dun lment dune liste et de llment lui-mme, la fonction enumerate() est pratique. Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant 19

4

Boucles et comparaisons

4.2

Comparaisons

>>> animaux = ['girafe','tigre','singe','souris'] >>> for i, ani in enumerate(animaux): ... print i, ani ... 0 girafe 1 tigre 2 singe 3 souris

4.2

Comparaisons

Avant de passer une autre sorte de boucles (les boucles while), nous abordons tout de suite les comparaisons. Celles-ci seront reprises dans le chapitre des tests. Python est capable deffectuer toute une srie de comparaisons telles que : syntaxe Python == != > >= < >> x >>> x True >>> x False >>> x True = 5 == 5 > 10 < 10

Python renvoie la valeur True si la comparaison est vraie et False si elle est fausse. True et False sont des boolens. Faites bien attention ne pas confondre loprateur daffectation = qui donne une valeur une variable et loprateur de comparaison == qui compare les valeurs de deux variables. Vous pouvez galement effectuer des comparaisons sur des chanes de caractres. >>> animal >>> animal False >>> animal True >>> animal True = "tigre" == "tig" != "tig" == 'tigre'

Dans le cas des chanes de caractres, a priori seuls les tests == et != ont un sens. En fait, on peut aussi utiliser les oprateurs , =. Dans ce cas lordre alphabtique est pris en compte, par exemple : >>> "a" < "b" True 20 Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

4.3

Boucles while

4

Boucles et comparaisons

"a" est infrieur "b" car il est situ avant dans lordre alphabtique. En fait, cest lordre ASCII des caractres qui est pris en compte (i.e. chaque caractre est affect un code numrique), on peut donc comparer aussi des caractres spciaux (comme # ou ~) entre eux. On peut aussi comparer des chanes plus dun caractre. >>> "ali" < "alo" True >>> "abb" < "ada" True Dans ce cas, Python compare caractre par caractre de la gauche vers la droite (le premier avec le premier, le deuxime avec le deuxime, etc). Ds quun caractre est diffrent entre lune et lautre des chanes, il considre que la chane la plus petite est celle qui prsente le caractre ayant le plus petit code ASCII (les caractres suivants de la chane sont ignors dans la comparaison), comme dans notre test "abb" < "ada" ci-dessus.

4.3

Boucles while

Une autre alternative linstruction for couramment utilise en informatique est la boucle while. Le principe est simple. Une srie dinstructions est excute tant quune condition est vraie. Par exemple : >>> i = 1 >>> while i >> x = 2 >>> if x == 2: ... print "Le test est vrai !" ... Le test est vrai ! >>> x = "tigre" >>> if x == "tigre": ... print "Le test est vrai !" ... Plusieurs remarques concernant ces deux exemples : Dans le premier exemple, le test tant vrai, linstruction print "Le test est vrai !" est excute. Dans le second exemple, le test est faux et rien nest afch. Les blocs dinstruction dans les tests doivent forcment tre indents comme les boucles for et while. Lindentation indique la porte des instructions excuter si le test est vrai. Linstruction if se termine comme les instructions for et while par le caractre :.

5.2

Tests plusieurs cas

Parfois, il est pratique de tester si la condition est vraie ou si elle est fausse dans une mme instruction if. Plutt que dutiliser deux instructions if, on peut se servir de if et de else : >>> x = 2 >>> if x == ... print ... else: ... print ... Le test est >>> x = 3 >>> if x == ... print ... else: ... print ... Le test est 2: "Le test est vrai !" "Le test est faux !" vrai ! 2: "Le test est vrai !" "Le test est faux !" faux !

On peut utiliser une srie de tests dans la mme instruction if, notamment pour tester plusieurs valeurs dune mme variable. Par exemple, on se propose de tirer au sort une base dADN puis dafcher le nom de cette dernire. Dans le code suivant, nous utilisons lintruction random.choice(liste) qui renvoie un lment choisi au hasard dans une liste. Linstruction import random sera vue plus tard, admettez pour le moment quelle est ncessaire. >>> import random 24 Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

5.3

Tests multiples

5

Tests

>>> base = random.choice(["a", "t", "c", "g"]) >>> if base == "a": ... print "choix d'une adnine" ... elif base == "t": ... print "choix d'une thymine" ... elif base == "c": ... print "choix d'une cytosine" ... elif base == "g": ... print "choix d'une guanine" ... choix d'une cytosine Dans cet exemple, Python teste la premire condition, puis, si et seulement si elle est fausse, teste la deuxime et ainsi de suite... Le code correspondant la premire condition vrie est excut puis Python sort du if. Remarque De nouveau, faites bien attention lindentation dans ces deux derniers exemples ! Vous devez tre trs rigoureux ce niveau l. Pour vous en convaincre, excutez ces deux scripts dans linterprteur Python : Script 1 : nombres = [4, 5, 6] for i in nombres: if i == 5: print "Le test est vrai" print "car la variable i vaut", i Script 2 : nombres = [4, 5, 6] for i in nombres: if i == 5: print "Le test est vrai" print "car la variable i vaut", i Comment expliquez-vous ce rsultat ?

5.3

Tests multiples

Les tests multiples permettent de tester plusieurs conditions en mme temps en utilisant des oprateurs boolens. Les deux oprateurs les plus couramment utiliss sont le OU et le ET. Voici un petit rappel du mode de fonctionnement de ces oprateurs : Condition 1 Vrai Vrai Faux Faux Vrai Vrai Faux Faux Oprateur OU OU OU OU ET ET ET ET Condition 2 Vrai Faux Vrai Faux Vrai Faux Vrai Faux Rsultat Vrai Vrai Vrai Faux Vrai Faux Faux Faux

En Python, on utilise le mot rserv and pour loprateur ET et le mot rserv or pour loprateur OU. Respectez bien la casse, and et or scrivent en minuscule. En voici un exemple dutilisation : Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant 25

5

Tests

5.4

Instructions break et continue

>>> x = 2 >>> y = 2 >>> if x == 2 and y == 2: ... print "le test est vrai" ... le test est vrai Notez que le mme rsulat serait obtenu en utilisant deux instructions if imbriques : >>> x = 2 >>> y = 2 >>> if x == 2: ... if y == 2: ... print "le test est vrai" ... le test est vrai Vous pouvez aussi tester directement leffet de ces oprateurs laide de True et False (attention respecter la casse). >>> True or False True Enn, on peut utiliser loprateur logique de ngation not qui inverse le rsultat dune condition : >>> not True False >>> not False True >>> not (True and True) False

5.4

Instructions break et continue

Ces deux instructions permet de modier le comportement dune boucle (for ou while) avec un test. Linstruction break stoppe la boucle. >>> for i in range(5): ... if i > 2: ... break ... print i ... 0 1 2 Linstruction continue saute litration suivante. >>> for i in range(5): ... if i == 2: ... continue ... print i 26 Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

5.5

Exercices

5

Tests

... 0 1 3 4

5.5

Exercices

Conseil : pour ces exercices, crivez des scripts dans des chiers, puis excutez-les dans un shell. 1. Constituez une liste semaine contenant les sept jours de la semaine. En utilisant une boucle, crivez chaque jour de la semaine ainsi que les messages suivants : Au travail sil sagit du lundi au jeudi Chouette c'est vendredi sil sagit du vendredi Repos ce week-end sil sagit du week-end. (Les messages ne sont que des suggestions, vous pouvez laisser aller votre imagination.) 2. La liste ci-dessous reprsente une squence dADN : ["A","C","G","T","T","A","G","C","T","A","A","C","G"] crivez un script qui transforme cette squence en sa squence complmentaire. Rappel : la squence complmentaire sobtient en remplaant A par T, T par A, C par G et G par C. 3. La fonction min() de Python, renvoie llment le plus petit dune liste. Sans utiliser cette fonction, crivez un script qui dtermine le plus petit lment de la liste [8, 4, 6, 1, 5]. 4. La liste ci-dessous reprsente une squence dacides amins ["A","R","A","W","W","A","W","A","R","W","W","R","A","G","A","R"] Calculez la frquence en alanine (A), arginine (R), tryptophane (W) et glycine (G) dans cette squence. 5. Voici les notes dun tudiant [14, 9, 13, 15, 12]. crivez un script qui afche la note maximum (fonction max()), la note minimum (fonction min()) et qui calcule la moyenne. Afchez la valeur de la moyenne avec deux dcimales. Afchez aussi la mention obtenue sachant que la mention est passable si la moyenne est entre 10 inclus et 12 exclus, assez-bien entre 12 inclus et 14 exclus et bien au-del de 14. 6. Faites une boucle qui parcourt les nombres de 0 20 et qui afche les nombres pairs infrieurs ou gaux 10 dune part, et les nombres impairs strictement suprieur 10 dautre part. Pour cet exercice, vous pourrez utiliser loprateur modulo % qui retourne le reste de la division entire entre deux nombres. 7. Exercice +++. Conjecture de Syracuse. La conjecture de Syracuse est une conjecture mathmatique qui reste improuve ce jour et qui est dnie de la manire suivante. Soit un entier positif n. Si n est pair, alors le diviser par 2. Si il est impair, alors le multiplier par 3 et lui ajouter 1. En rptant cette procdure, la suite de nombres atteint la valeur 1 puis se prolonge indniment par une suite de trois valeurs triviales appele cycle trivial. Jusqu prsent, la conjecture de Syracuse, selon laquelle depuis nimporte quel entier positif la suite de Syracuse atteint 1, na pas t mise en dfaut. Par exemple, les premiers lments de la suite de Syracuse pour un entier de dpart de 10 sont : 10, 5, 16, 8, 4, 2, 1... crivez un script qui, partant dun entier positif n, cre une liste des nombres de la suite de Syracuse. Avec diffrents points de dpart (n), la conjecture de Syracuse est-elle toujours vrie ? Quels sont les nombres qui constituent le cycle trivial ? Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant 27

5

Tests

5.5

Exercices

Remarque 1 : pour cet exercice, vous avez besoin de faire un nombre ditrations inconnu pour que la suite de Syracuse atteigne 1 puis entame son cycle trivial. Vous pourrez tester votre algorithme avec un nombre arbitraire ditrations, typiquement 20 ou 100, suivant votre nombre n de dpart. Remarque 2 : un nombre est pair lorsque le reste de sa division entire (oprateur modulo %) par 2 est nul. 8. Exercice +++. Attribution simple de structure secondaire. Les angles didres phi/psi dune hlice alpha parfaite ont une valeur de -57 degrs et -47 degrs respectivement. Bien sr, il est trs rare que lon trouve ces valeurs parfaites dans une protine, par consquent il est couramment accept de tolrer une dviation de +/30 degrs sur celles-ci. Ci-dessous vous avez une liste de listes contenant les valeurs de phi/psi de la premire hlice de la protine 1TFE qui est un facteur dlongation Ts. laide de cette liste, crivez un programme qui teste, pour chacun des rsidus, sils sont ou non en hlice. [[48.6,53.4],[-124.9,156.7],[-66.2,-30.8],[-58.8,-43.1], [-73.9,-40.6],[-53.7,-37.5],[-80.6,-16.0],[-68.5,135.0], [-64.9,-23.5],[-66.9,-45.5],[-69.6,-41.0],[-62.7,-37.5], [-68.2,-38.3],[-61.2,-49.1],[-59.7,-41.1],[-63.2,-48.5], [-65.5,-38.5],[-64.1,-40.7],[-63.6,-40.8],[-66.4,-44.5], [-56.0,-52.5],[-55.4,-44.6],[-58.6,-44.0],[-77.5,-39.1], [-91.7,-11.9],[48.6,53.4]] \ \ \ \ \ \

9. Exercice +++. Dtermination des nombres premiers infrieurs 100. Voici un extrait de larticle sur les nombres premiers tir de wikipdia. Un nombre premier est un entier naturel qui admet exactement deux diviseurs distincts entiers et positifs (qui sont alors 1 et lui-mme). Cette dnition exclut 1, qui na quun seul diviseur entier positif. Par opposition, un nombre non nul produit de deux nombres entiers diffrents de 1 est dit compos. Par exemple 6 = 2 3 est compos, tout comme 21 = 3 7, mais 11 est premier car 1 et 11 sont les seuls diviseurs de 11. Les nombres 0 et 1 ne sont ni premiers ni composs. Dterminez les nombres premiers infrieurs 100. Pour cela, vous pouvez parcourir tous les nombres entre 2 100 et vrier si ceux-ci sont composs, cest--dire quils sont le produit de deux nombres premiers. Pratiquement, cela consiste vrier que le reste de la division entire (oprateur modulo %) entre le nombre considr et nimporte quel nombre premier est nul. Le cas chant, ce nombre nest pas premier. Combien y a-t-il de nombres premiers entre 0 et 100 ?

28

Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

6

Fichiers

66.1

FichiersLecture dans un chier

Dans la plupart des travaux de programmation, on doit lire ou crire dans un chier. Python possde pour cela tout un tas doutils qui vous simplient la vie. Avant de passer un exemple concret, crez un chier dans un diteur de texte que vous enregistrerez dans votre rpertoire avec le nom zoo.txt, par exemple : girafe tigre singe souris Ensuite, testez cet exemple : >>> filin = open('zoo.txt', 'r') >>> filin >>> filin.readlines() ['girafe\n', 'tigre\n', 'singe\n', 'souris\n'] >>> filin.close() >>> filin La premire commande ouvre le chier zoo.txt en lecture seule (ceci est indiqu avec la lettre r). Remarquez que le chier nest pas encore lu, mais simplement ouvert (un peu comme lorsquon ouvre un livre, mais quon ne la pas encore lu). Lorsquon afche la valeur de la variable filin, vous voyez que Python la considre comme un objet de type chier Et oui, Python est un langage orient objet. Retenez seulement que lon peut considrer chaque variable comme un objet et que lon peut appliquer des mthodes sur chacun de ces objets. propos de mthode, on applique la mthode readlines() sur lobjet filin dans linstruction suivante (remarquez la syntaxe du type objet.mthode). Ceci nous retourne une liste contenant toutes les lignes du chier (dans notre analogie avec un livre, ceci correspondrait lire les lignes du livre). Enn, on applique la mthode close() sur lobjet filin, ce qui vous vous en doutez, va fermer le chier (ceci correspondrait bien sr fermer le livre). On pourra remarquer que ltat de lobjet a chang Vous navez bien-sr pas retenir ces concepts dobjets pour pouvoir programmer avec Python, nous avons juste ouvert cette parenthse pour attirer votre attention sur la syntaxe. Remarque : nutilisez jamais le mot file comme nom de variable pour un chier car file est un mot rserv Python. Voici maintenant un exemple complet de lecture dun chier avec Python. >>> filin = open('zoo.txt', 'r') >>> lignes = filin.readlines() >>> lignes ['girafe\n', 'tigre\n', 'singe\n', 'souris\n'] >>> for i in lignes: ... print i Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant 29

6

Fichiers

6.1

Lecture dans un chier

... girafe tigre singe souris >>> filin.close() Vous voyez quen cinq lignes de code, vous avez lu et parcouru le chier. Remarques : Notez que la liste lignes contient le caractre \n la n de chacun de ses lments. Ceci correspond au saut la ligne de chacune dentre elles (ceci est cod par un caractre spcial que lon symbolise par \n). Vous pourrez parfois rencontrer galement la notation octale \012. Remarquez aussi que lorsque lon afche les diffrentes lignes du chier laide de la boucle for et de linstruction print, Python saute chaque fois une ligne. Mthode read() Il existe dautres mthodes que readlines() pour lire (et manipuler) un chier. Par exemple, la mthode read() lit tout le contenu dun chier et renvoie une chane de caractres unique. >>> filin = open('zoo.txt', 'r') >>> filin.read() 'girafe\ntigre\nsinge\nsouris\n' >>> filin.close() Mthode readline() La mthode readline() (sans s) lit une ligne dun chier et la renvoie sous forme dune chane de caractres. chaque nouvel appel de readline(), la ligne suivante est renvoye. Associe la boucle while, cette mthode permet de lire un chier ligne par ligne. >>> filin = open('zoo.txt', 'r') >>> ligne = filin.readline() >>> while ligne != "": ... print ligne ... ligne = filin.readline() ... girafe tigre singe souris >>> filin.close() 30 Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

6.2

criture dans un chier

6

Fichiers

Mthodes seek() et tell() Les mthodes seek() et tell() permettent respectivement de se dplacer au ne caractre (plus exactement au ne octet) dun chier et dafcher o en est la lecture du chier, cest--dire quel caractre (ou octet) est en train dtre lu. >>> filin = open('zoo.txt', 'r') >>> filin.readline() 'girafe\n' >>> filin.tell() 7 >>> filin.seek(0) >>> filin.tell() 0 >>> filin.readline() 'girafe\n' >>> filin.close() On remarque qu louverture dun chier, le tout premier caractre est considr comme le caractre 0 (tout comme le premier lment dune liste). La mthode seek() permet facilement de remonter au dbut du chier lorsque lon est arriv la n ou lorsquon en a lu une partie. Itrations directement sur le chier Python essaie de vous faciliter la vie au maximum. Voici un moyen la fois simple et lgant de parcourir un chier. >>> filin = open('zoo.txt', 'r') >>> for li in filin: ... print li ... girafe tigre singe souris >>> filin.close() La boucle for va demander Python daller lire le chier ligne par ligne. Privilgiez cette mthode par la suite.

6.2

criture dans un chiercrire dans un chier est aussi simple que de le lire. Voyez lexemple suivant :

>>> >>> >>> ... ... >>>

animaux2 = ['poisson', 'abeille', 'chat'] filout = open('zoo2.txt', 'w') for i in animaux2: filout.write(i) filout.close() 31

Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

6

Fichiers

6.3

Exercices

Le contenu du chier zoo2.txt est poissonabeillechat. Quelques commentaires sur cet exemple : Aprs avoir initialis la liste animaux2, nous avons ouvert un chier mais cette fois-ci en mode criture (avec le caractre w). Ensuite, on a balay cette liste laide dune boucle. chaque itration, nous avons crit chaque lment de la liste dans le chier. Remarquez nouveau la mthode write() qui sapplique sur lobjet filout. Enn, on a ferm le chier avec la mthode close(). Vous voyez quil est extrmement simple en Python de lire ou dcrire dans un chier. Remarque. Si votre programme produit uniquement du texte, vous pouvez lcrire sur la sortie standard (avec linstruction print). Lavantage est que dans ce cas lutilisateur peut bncier de toute les potentialits dUnix (redirection, tri, parsing...). Sil veut crire le rsultat du programme dans un chier, il pourra toujours le faire en redirigeant la sortie.

6.3

Exercices

Conseil : pour les exercices 1 et 2, utilisez linterprteur Python. Pour les exercices suivants, crivez des scripts dans des chiers, puis excutez-les dans un shell. 1. Dans lexemple 'girafe', 'tigre', etc. ci-dessus, comment expliquer vous que Python saute une ligne chaque itration ? Rcrivez les instructions ad-hoc pour que Python crive le contenu du chier sans sauter de ligne. 2. En reprenant le dernier exemple sur lcriture dans un chier, vous pouvez constater que les noms danimaux ont t crits les uns la suite des autres, sans retour la ligne. Comment expliquez-vous ce rsultat ? Modiez les instructions de manire crire un animal par ligne. 3. Dans cet exercice, nous allons utiliser une sortie partielle de DSSP (Dene Secondary Structure of Proteins), qui est un logiciel dextraction des structures secondaires. Ce chier contient 5 colonnes correspondant respectivement au numro de rsidu, lacide amin, sa structure secondaire et ses angles phi/psi. Sauvez le chier disponible ici dans votre rpertoire de travail (jetez-y un oeil en passant). Chargez les lignes de ce chier en les plaant dans une liste puis fermez le chier. crivez chaque ligne lcran pour vrier que vous avez bien charg le chier. crivez dans un chier output.txt chacune des lignes. Noubliez pas le retour la ligne pour chaque acide amin. crivez dans un chier output2.txt chacune des lignes suivies du message line checked. Encore une fois, noubliez pas les retours la ligne. 4. Tlchargez le chier PDB (1BTA) de la barstar. En utilisant Python, calculez le nombre de lignes de ce chier. Par ailleurs, dterminez de quel organisme vient cette protine en afchant la 9e ligne. Afchez uniquement les lignes correspondant aux carbones alpha (lignes contenant le champ ATOM et le nom datome CA). 5. Exercice +++. Triangle de Pascal Voici le dbut du triangle de Pascal : 1 11 121 1331 14641 ... 32 Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

6.3

Exercices

6

Fichiers

Comprenez comment une ligne est construite partir de la prcente. partir de lordre 1 (ligne 2, 11), gnrez lordre suivant (121). Vous pouvez utiliser une liste pralablement gnre avec range(). Gnralisez laide dune boucle. crivez dans un chier pascal.out les lignes du triangle de Pascal de lordre 1 jusqu lordre 10.

Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

33

7

Modules

77.1

ModulesDnition

Les modules sont des programmes Python qui contiennent des fonctions que lon est amen rutiliser souvent (on les appelle aussi bibliothques ou librairies). Les dveloppeurs de Python ont mis au point de nombreux modules qui effectuent une quantit phnomnale de tches. Pour cette raison, prenez le rexe de vrier si une partie du code que vous souhaitez crire nexiste pas dj sous forme de module. La plupart de ces modules sont dj installs dans les versions standards de Python. Vous pouvez accder une documentation exhaustive sur le site de Python. Surfez un peu sur ce site, la quantit de modules est impressionante.

7.2

Importation de modules

Jusqu maintenant, nous avons rencontr une fois cette notion de module lorsque nous avons voulu tirer un nombre alatoire. >>> import random >>> random.randint(0,10) 4 Regardons de plus prs cet exemple : Linstruction import permet daccder toutes les fonctions du module random Ensuite, nous utilisons la fonction (ou mthode) randint(a,b) du module random. Attention cette fonction renvoie un nombre entier alatoirement entre a inclus et b inclus (contrairement range() par exemple). Remarquez la notation objet random.randint() o la fonction randint() peut tre considre comme une mthode de lobjet random. Il existe un autre moyen dimporter une ou des fonctions dun module : >>> from random import randint >>> randint(0,10) 7 laide du mot-cl from, vous pouvez importer une fonction spcique dun module donn. Remarquez que dans ce cas il est inutile de rpter le nom du module, seul le nom de ladite fonction est requis. On peut galement importer toutes les fonctions dun module : >>> from random import * >>> x = [1, 2, 3, 4] >>> shuffle(x) >>> x [2, 3, 1, 4] >>> shuffle(x) >>> x [4, 2, 1, 3] >>> randint(0,50) 46 >>> uniform(0,2.5) 0.64943174760727951 Comme vous lavez devin, linstruction from random import * importe toutes les fonctions du module random. On peut ainsi utiliser toutes ses fonctions directement, comme par exemple shuffle(), qui permute une liste alatoirement. 34 Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

7.3

Obtenir de laide sur les modules imports

7

Modules

Dans la pratique, plutt que de charger toutes les fonctions dun module en une seule fois (from random import *), nous vous conseillons de charger le module (import random) puis dappeler explicitement les fonctions voulues (random.randint(0,2)). Enn, si vous voulez vider de la mmoire un module dj charg, vous pouvez utiliser linstruction del : >>> import random >>> random.randint(0,10) 2 >>> del random >>> random.randint(0,10) Traceback (most recent call last): File "", line 1, in ? NameError: name 'random' is not defined Vous pouvez constater quun rappel dune fonction du module random aprs lavoir vid de la mmoire retourne un message derreur. Enn, il est galement possible de dnir un alias (un nom plus court) pour un module : >>> import random as rand >>> rand.randint(1, 10) 6 Dans cet exemple, les fonctions du module random sont accessibles via lalias rand.

7.3

Obtenir de laide sur les modules imports

Pour obtenir de laide sur un module rien de plus simple, il suft dinvoquer la commande help() : >>> import random >>> help(random) ... On peut se promener dans laide avec les ches ou les touches page-up et page-down (comme dans les commandes Unix man, more ou less). Il est aussi possible dinvoquer de laide sur une fonction particulire dun module de la manire suivante help(random.randint).

La commande help() est en fait une commande plus gnrale permettant davoir de laide sur nimporte quel objet charg en mmoire. >>> x = range(2) >>> help(x) Help on list object: class list(object) | list() -> new list | list(sequence) -> new list initialized from sequence's items | | Methods defined here: | | __add__(...) Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant 35

7

Modules

7.4

Modules courants

| | ...

x.__add__(y) x+y

Enn, si on veut connatre en seul coup doeil toutes les mthodes ou variables associes un objet, on peut utiliser la commande dir :

>>> import random >>> dir(random) ['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemR 'TWOPI', 'WichmannHill', '_BuiltinMethodType', '_MethodType', '__all__', '__built '__doc__', '__file__', '__name__', '_acos', '_ceil', '_cos', '_e', '_exp', '_hexl '_inst', '_log', '_pi', '_random', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', '_warn', 'betavariate', 'choice', 'expovariate', 'gammavariate', 'gau 'getrandbits', 'getstate', 'jumpahead', 'lognormvariate', 'normalvariate', 'paretovariate', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'uniform', 'vonmisesvariate', 'weibullvariate'] >>>

7.4

Modules courants

Il existe une srie de modules que vous serez probablement amens utiliser si vous programmez en Python. En voici une liste non exhaustive. Pour la liste complte, reportez-vous la page des modules sur le site de Python : math : fonctions et constantes mathmatiques de base (sin, cos, exp, pi...). sys : passage darguments, gestion de lentre/sortie standard... os : dialogue avec le systme dexploitation (e.g. permet de sortir de Python, lancer une commande en shell, puis de revenir Python). random : gnration de nombres alatoires. time : permet daccder lheure de lordinateur et aux fonctions grant le temps. calendar : fonctions de calendrier. prole : permet dvaluer le temps dexcution de chaque fonction dans un programme (proling en anglais). urllib2 : permet de rcuprer des donnes sur internet depuis python. Tkinter : interface python avec Tk (permet de crer des objets graphiques ; ncessite dinstaller Tk). re : gestion des expressions rgulires. pickle : criture et lecture de structures Python (comme les dictionnaires par exemple). Nous vous conseillons vivement daller surfer sur les pages de ces modules pour dcouvrir toutes leurs potentialits. Vous verrez plus tard comment crer votre propres modules lorsque vous tes amens rutiliser souvent vos propres fonctions. Enn, notez quil existe de nombreux autres modules qui ne sont pas installs de base dans Python mais qui sont de grand intrt en bioinformatique (au sens large). Citons-en quelquesuns : numpy (algbre linaire, transforme de Fourier), biopython (recherche dans les banques de donnes biologiques), rpy (dialogue R/Python)...

7.5

Module sys : passage darguments

Le module sys contient (comme son nom lindique) des fonctions et des variables spciques au systme, ou plus exactement linterprteur lui-mme. Par exemple, il permet de grer lentre (stdin) et la sortie standard (stdout). Ce module est particulirement intressant pour rcuprer les arguments passs un script Python lorsque celui-ci est appel en ligne 36 Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

7.6

Module os

7

Modules

de commande. Dans cet exemple, oublions linterprteur et crivons le script suivant que lon enregistrera sous le nom test.py (noubliez pas de le rendre excutable) : #!/usr/bin/env python import sys print sys.argv Ensuite lancez test.py suivi de plusieurs arguments. Par exemple : poulain@cumin> python test.py salut girafe 42 ['test.py', 'salut', 'girafe', '42'] Dans lexemple prcdent, poulain@cumin> reprsente linvite du shell, test.py est le nom du script Python, salut, girafe et 42 sont les arguments passs au script. La variable sys.argv est une liste qui reprsente tous les arguments de la ligne de commande, y compris le nom du script lui mme quon peut retrouver dans sys.argv[0]. On peut donc accder chacun de ces arguments avec sys.argv[1], sys.argv[2]... On peut aussi utiliser la fonction sys.exit() pour quitter un script Python. On peut donner comme argument un objet (en gnral une chane de caractres) qui sera renvoy au moment ou Python quittera le script. Par exemple, si vous attendez au moins un argument en ligne de commande, vous pouvez renvoyer un message pour indiquer lutilisateur ce que le script attend comme argument : #!/usr/bin/env python import sys if len(sys.argv) != 2: sys.exit("ERREUR : il faut exactement un argument.") # # suite du script # Puis on lexcute sans argument : poulain@cumin> python test.py ERREUR : il faut exactement un argument. Notez quici on vrie que le script possde deux arguments car le nom du script lui-mme est le premier argument et file.txt constitue le second.

7.6

Module osLe module os gre linterface avec le systme dexploitation. Une fonction pratique de ce module permet de grer la prsence dun chier sur le disque.

>>> import sys >>> import os >>> if os.path.exists("toto.pdb"): ... print "le fichier est prsent" ... else: ... sys.exit("le fichier est absent") ... le fichier est absent Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant 37

7

Modules

7.7

Exercices

Dans cet exemple, si le chier nest pas prsent sur le disque, on quitte le programme avec la fonction exit() du module sys.

La fonction system() permet dappeler nimporte quelle commande externe.

>>> import os >>> os.system("ls -al") total 5416 drwxr-xr-x 2 poulain dsimb 4096 2010-07-21 14:33 drwxr-xr-x 6 poulain dsimb 4096 2010-07-21 14:26 -rw-r--r-- 1 poulain dsimb 124335 2010-07-21 14:31 -rw-r--r-- 1 poulain dsimb 4706057 2010-07-21 14:31 -rw-r--r-- 1 poulain dsimb 233585 2010-07-21 14:30 -rw-r--r-- 1 poulain dsimb 463559 2010-07-21 14:33 0

. .. 1BTA.pdb NC_000913.fna NC_001133.fna NC_001133.gbk

La commande externe ls -al est introduite comme une chane de caractres la fonction system().

7.7

Exercices

Conseil : pour les trois premiers exercices, utilisez linterprteur Python. Pour les exercices suivants, crivez des scripts dans des chiers, puis excutez-les dans un shell. 1. Afchez sur la mme ligne les nombres de 10 20 (inclus) ainsi que leur racine carre avec 3 dcimales (module math). Exemple : 10 11 12 13 3.162 3.317 3.464 3.606

2. Calculez le cosinus de pi/2 (module math). 3. Retournez la liste des chiers du rpertoire courant (module os sans utiliser la fonction os.system(), documentation la page Process Management). 4. crivez les nombres de 1 10 avec 1 seconde dintervalle (module time). 5. Gnrez une squence alatoire de 20 chiffres, ceux-ci tant des entiers tirs entre 1 et 4 (module random). 6. Gnrez une squence alatoire de 20 bases de deux manires diffrentes (module random). 7. Dterminez votre jour (lundi, mardi...) de naissance (module calendar). 8. Exercice +++. valuation du nombre par la mthode Monte Carlo. Soit un cercle de rayon 1 (en rouge) inscrit dans un carr de cot 2 (en bleu). 38 Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

7.7

Exercices

7

Modules

Laire du carr vaut (2R)2 soit 4. Laire du cercle vaut R2 soit . En choississant N points alatoires lintrieur du carr, la probabilit que ces points se trouvent aussi dans le cercle est p= aire du cercle = aire du carr 4

Soit n, le nombre points effectivement dans le cercle, il vient alors p= do =4 n = , N 4 n . N

Dterminez une approximation de par cette mthode. Pour cela, vous allez, pour N itrations, choisir alatoirement les coordonnes dun point entre -1 et 1 (fonction uniform() du module random), calculer la distance entre le centre du cercle et ce point et dterminer si cette distance est infrieure au rayon du cercle. Le cas chant, le compteur n sera incrment. Que vaut lapproximation de pour 100 itrations ? 500 ? 1000 ? Conseil : pour les premiers exercices, utilisez linterprteur Python.

Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

39

8

Plus sur les chanes de caractres

88.1

Plus sur les chanes de caractresPrambule

Nous avons dj abord les chanes de caractres dans le chapitre variables et criture. Ici nous allons un peu plus loin notamment avec les mthodes associes aux chanes de caractres. Notez quil existe un module string mais qui est maintenant considr comme obsolte depuis la version 2.5 de Python.

8.2

Chanes de caractres et listesLes chanes de caractres peuvent tre considres comme des listes.

>>> animaux = "girafe tigre" >>> animaux 'girafe tigre' >>> len(animaux) 12 >>> animaux[3] 'a' Nous pouvons donc utiliser certaines proprits des listes comme les tranches : >>> animaux = "girafe tigre" >>> animaux[0:4] 'gira' >>> animaux[9:] 'gre' >>> animaux[:-2] 'girafe tig' A contrario des listes, les chanes de caractres prsentent toutefois une diffrence notable, ce sont des listes non modiables. Une fois dnie, vous ne pouvez plus modier un de ses lments. Le cas chant, Python renvoie un message derreur : >>> animaux = "girafe tigre" >>> animaux[4] 'f' >>> animaux[4] = "F" Traceback (most recent call last): File "", line 1, in TypeError: 'str' object does not support item assignment Par consquent, si vous voulez modier une chane, vous tes obligs den construire une nouvelle. Pour cela, noubliez pas que les oprateurs de concatnation (+) et de duplication (*) (cf chapitre variables et criture) peuvent vous aider. Vous pouvez galement gnrer une liste, qui elle est modiable, puis revenir une chane.

8.3

Caractres spciaux

Il existe certains caractres spciaux comme le \n que nous avons dj vu (pour le retour la ligne). Le \t vous permet dcrire une tabulation. Si vous voulez crire un guillemet simple ou double (et que celui-ci ne soit pas confondus avec les guillemets de dclaration de la chane de caractres), vous pouvez utiliser \' ou \" ou utiliser respectivement des guillements doubles ou simple pour dclarer votre chane de caractres. 40 Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

8.4

Mthodes associes aux chanes de caractres

8

Plus sur les chanes de caractres

>>> print "Un retour a la ligne\npuis une tabulation\t, puis un guillemet\"" Un retour a la ligne puis une tabulation , puis un guillemet" >>> print 'J\'imprime un guillemet simple' J'imprime un guillemet simple >>> print "Un brin d'ADN" Un brin d'ADN >>> print 'Python est un "super" langage' Python est un "super" langage Lorsquon souhaite crire un texte sur plusieurs lignes, il est trs commode dutiliser les guillemets triples permettant de conserver le formatage (notamment les retours la ligne) : >>> x = '''souris ... chat ... abeille''' >>> x 'souris\nchat\nabeille' >>> print x souris chat abeille

8.4

Mthodes associes aux chanes de caractresVoici quelques mthodes spciques aux objets de type string :

>>> x = "girafe" >>> x.upper() 'GIRAFE' >>> x 'girafe' >>> 'TIGRE'.lower() 'tigre' Les fonctions lower() et upper() passent un texte en minuscule et en majuscule respectivement. On remarque que lutilisation de ces fonctions naltrent pas la chane de dpart mais renvoie la chane transforme. Pour mettre en majuscule la premire lettre seulement, vous pouvez faire : >>> x[0].upper() + x[1:] 'Girafe' ou encore plus simple avec la fonction Python adquate : >>> x.capitalize() 'Girafe' Il existe une mthode associe aux chanes de caractres qui est particulirement pratique, la fonction split() : >>> animaux = "girafe tigre singe" >>> animaux.split() ['girafe', 'tigre', 'singe'] Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant 41

8

Plus sur les chanes de caractres

8.4

Mthodes associes aux chanes de caractres

>>> for i in animaux.split(): ... print i ... girafe tigre singe La fonction split() dcoupe la ligne en champs, en utilisant comme sparateur les espaces ou les tabulations. Il est possible de modier le sparateur de champs, par exemple : >>> animaux = "girafe:tigre:singe" >>> animaux.split(":") ['girafe', 'tigre', 'singe'] La fonction find() recherche une chane de caractres passe en argument. >>> >>> 1 >>> 3 >>> -1 animal = "girafe" animal.find('i') animal.find('afe') animal.find('tig')

Si llment recherch est trouv, alors lindice du dbut de llment dans la chane de caractres est renvoy. Si llment nest pas trouv, alors la valeur -1 est renvoye. Si llment recherch est trouv plusieurs fois, seul lindice de la premire occurence est retourn : >>> animaux = "girafe tigre" >>> animaux.find("i") 1 On trouve aussi la fonction replace(), qui serait lquivalent de la fonction de substitution de la commande Unix sed : >>> animaux = "girafe tigre" >>> animaux.replace("tigre", "singe") 'girafe singe' >>> animaux.replace("i", "o") 'gorafe togre' Enn, la fonction count() compte le nombre de fois quune chane de caractres passe en argument est trouve : >>> >>> 2 >>> 0 >>> 1 42 animaux = "girafe tigre" animaux.count("i") animaux.count("z") animaux.count("tigre")

Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

8.5

Conversion de types

8

Plus sur les chanes de caractres

8.5

Conversion de types

Dans tout langage de programmation, on est souvent amen convertir les types, cest-dire passer dun type numrique une chane de caractres ou vice-versa. En Python, rien de plus simple avec les fonctions int(), float() et str(). Pour vous en convaincre, regardez ces exemples : >>> i = 3 >>> str(i) '3' >>> i = '456' >>> int(i) 456 >>> float(i) 456.0 >>> i = '3.1416' >>> float(i) 3.1415999999999999 Ces conversions sont essentielles lorsquon lit ou crit des nombres dans un chier. En effet, les nombres dans un chier sont considrs comme du texte par la fonction readlines(), par consquent il faut les convertir si on veut effectuer des oprations numriques dessus.

8.6

Conversion dune liste de chanes de caractres en une chane de caractres

La conversion dune liste de chanes de caractres en une chane de caractres est un peu particulire puisquelle fait appelle la fonction join(). >>> seq = ["A", "T", "G", "A", "T"] >>> seq ['A', 'T', 'G', 'A', 'T'] >>> "-".join(seq) 'A-T-G-A-T' >>> " ".join(seq) 'A T G A T' >>> "".join(seq) 'ATGAT' Les lments de la liste initiale sont concatns les uns la suite des autres et intercals par un sparateur qui peut tre nimporte quelle chane de caractres (ici, nous avons utilis un tiret, un espace et rien). Attention, la fonction join() ne sapplique qu une liste de chanes de caractres. >>> maliste = ["A", 5, "G"] >>> " ".join(maliste) Traceback (most recent call last): File "", line 1, in TypeError: sequence item 1: expected string, int found Nous esprons quaprs ce petit tour dhorizon vous serez convaincu de la richesse des mthodes associes aux chanes de caractres. Pour avoir une liste exhaustive de lensemble des mthodes associes une variable particulire, vous pouvez utiliser la commande dir(). Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant 43

8

Plus sur les chanes de caractres

8.7

Exercices

>>> dir(animaux) ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__g '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__n '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__str__', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'index', 'isalnum', 'isalpha', 'isdigit', 'islo 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill'] Pour linstant vous pouvez ignorer les mthodes qui commencent et qui se terminent par deux tirets bas (underscores) __ . Vous pouvez ensuite accder laide et la documentation dune fonction particulire avec help() : >>> help(animaux.split) Help on built-in function split: split(...) S.split([sep [,maxsplit]]) -> list of strings Return a list of the words in the string S, using sep as the delimiter string. If maxsplit is given, at most maxsplit splits are done. If sep is not specified or is None, any whitespace string is a separator. (END)

8.7

Exercices

Conseil : pour ces exercices, crivez des scripts dans des chiers, puis excutez-les dans un shell. 1. Soit la liste ['girafe', 'tigre', 'singe', 'souris']. Avec une boucle, afchez chaque lment ainsi que sa taille (nombre de caractres). 2. Soit la squence nuclique ATATACGGATCGGCTGTTGCCTGCGTAGTAGCGT. Calculez la frquence de chaque base dans cette squence. 3. Soit la squence protique ALA GLY GLU ARG TRP TYR SER GLY ALA TRP. Transformez cette squence en une chane de caractres en utilisant le code une lettre pour les acides amins. 4. Distance de Hamming. La distance de Hamming mesure la diffrence entre deux squences de mme taille en sommant le nombre de positions qui, pour chaque squence, ne correspondent pas au mme acide amin. Calculez la distance de Hamming pour les squences AGWPSGGASAGLAIL et IGWPSAGASAGLWIL. 5. Palindrome. Un palindrome est un mot ou une phrase dont lordre des lettres reste le mme si on le lit de gauche droite ou de droite gauche. Par exemple, ressasser et Engage le jeu que je le gagne sont des palindromes. crivez un script qui dtermine si une chane de caractres est un palindrome. Pensez vous dbarasser des majuscules et des espaces. Testez si les expressions suivantes sont des palindromes : Radar , Never odd or even , Karine alla en Iran , Un roc si biscornu . 44 Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

8.7

Exercices

8

Plus sur les chanes de caractres

6. Mot composable. Un mot est composable partir dune squence de lettres si la squence contient toutes les lettres du mot. Comme au Scrabble, chaque lettre de la squence ne peut tre utilise quune seule fois. Par exemple, coucou est composable partir de uocuoceokzefhu. crivez un script qui permet de savoir si un mot est composable partir dune squence de lettres. Testez le avec diffrents mots et squences. Remarque : dans votre script, le mot et la squence de lettres seront des chanes de caractres. 7. Alphabet et pangramme. Les codes ASCII des lettres minuscules de lalphabet vont de 97 (lettre a) 122 (lettre z). La fonction chr() prend en argument un code ASCII sous forme dune entier et renvoie le caractre correspondant. Ainsi chr(97) renvoie 'a', chr(98) renvoie 'b' et ainsi de suite. crivez un script qui construit une chane de caractres contenant toutes les lettres de lalphabet. Un pangramme est une phrase comportant au moins une fois chaque lettre de lalphabet. Par exemple, Portez ce vieux whisky au juge blond qui fume est un pangramme. Modiez le script prcdent pour dterminer si une chane de caractres est un pangramme ou non. Pensez vous dbarasser des majuscules le cas chant. Testez si les expressions suivantes sont des pangrammes : Monsieur Jack vous dactylographiez bien mieux que votre ami Wolf , Buvez de ce whisky que le patron juge fameux . 8. Tlchargez le chier pdb 1BTA dans votre rpertoire. Faites un script qui rcupre seulement les carbones alpha et qui les afche lcran. 9. En vous basant sur le script prcdent, afchez lcran les carbones alpha des deux premiers rsidus. Toujours avec le mme script, calculez la distance inter atomique entre ces deux atomes. 10. En vous basant sur le script prcdent, calculez les distances entre carbones alpha conscutifs. Afchez ces distances sous la forme numero_calpha_1 numero_calpha_2 distance la n du script, faites galement afcher la moyenne des distances. La distance inter carbone alpha dans les protines est trs stable et de lordre de 3,8 angstrms. Observez avec attention les valeurs que vous avez obtenues. Expliquez lanomalie dtecte.

Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

45

9

Plus sur les listes

99.1

Plus sur les listesProprits des listes

Jusqu maintenant, nous avons toujours utilis des listes qui taient dj remplies. Nous savons comment modier un de ses lments, mais il est aussi parfois trs pratique den remanier la taille (e. g. ajouter, insrer ou supprimer un ou plusieurs lments, etc.). Les listes possdent cet effet des mthodes qui leurs sont propres comme append(), insert(), del, remove(), sort() et reverse(). Regardez les exemples suivants : append() pour ajouter un lment la n dune liste. >>> x = [1,2,3] >>> x.append(5) >>> x [1, 2, 3, 5] qui est quivalent >>> x = [1,2,3] >>> x = x + [5] >>> x [1, 2, 3, 5] insert() pour insrer un object dans une liste avec un indice dtermin. >>> x.insert(2,-15) >>> x [1, 2, -15, 3, 5] del pour supprimer un lment dune liste une indice dtermin. >>> del x[1] >>> x [1, -15, 3, 5] remove() pour supprimer un lment dune liste partir de sa valeur >>> x.remove(5) >>> x [1, -15, 3] sort() pour trier une liste. >>> x.sort() >>> x [-15, 1, 3] reverse() pour inverser une liste. >>> x.reverse() >>> x [3, 1, -15] Remarque : attention, une liste remanie nest pas renvoye ! Pensez-y dans vos utilisations futures des listes. La mthode append() est particulirement pratique car elle permet de construire une liste au fur et mesure des itrations dune boucle. Pour cela, il est commode de dnir pralablement une liste vide de la forme maliste = []. Voici un exemple o une chane de caractres est convertie en liste : >>> seq = 'CAAAGGTAACGC' >>> seq_list = [] >>> seq_list 46 Cours de Python / Universit Paris Diderot - Paris 7 / UFR Sciences du Vivant

9.2

Test dappartenance

9

Plus sur les listes

[] >>> for i in seq: ... seq_list.append(i) ... >>> seq_list ['C', 'A', 'A', 'A', 'G', 'G', 'T', 'A', 'A', 'C', 'G', 'C'] Remarquez que vous pouvez directement utiliser la fonction list() qui prend nimporte quel objet squentiel (liste, chane de caractres, tuples, etc.) et qui renvoie une liste : >>> seq = 'CAAAGGTAACGC' >>> list(seq) ['C', 'A', 'A', 'A', 'G', 'G', 'T', 'A', 'A', 'C', 'G', 'C'] Cette mthode est certes plus simple, mais il arrive parfois que lon doive utiliser les boucles tout de mme, comme lorquon lit un chier.

9.2

Test dappartenanceLinscription in permet de tester si un lment fait partie dune liste.

liste >>> 3 True >>> 4 False >>> 3 False >>> 4 True

= [1, 3, 5, 7, 9] in liste in liste not in liste not in liste

La variation avec not permet, a contrario, de vrier quun lement nest pas dans une liste.

9.3

Copie de listes

Il est trs important de savoir que laffectation dune liste ( partir dune liste prexistante) cre en ralit une rfrence et non une copie : >>> >>> >>> [1, >>> >>> [1, x = [1,2,3] y = x y 2, 3] x[1] = -15 y -15, 3]

Vous