Vous êtes sur la page 1sur 23

Cours programmation - Marc Jachym Licence professionnelle Mtrologie dimensionnelle et qualit IUT de St enis!

Uni"ersit #aris $%

Cours de Programmation avec le langage Python Niveau dbutant en programmation

Table des matires


#artie II Les lments de &ase du langage #ython'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''( II'$' #ourquoi #ython ) *uelques notions essentielles sur le langage #ython''''''''''''''''''''''''''''''''''''''''( II'(' #remiers lments de programmation en #ython'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''% II'('$ Les "aria&les''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''% II'('( Le type des "aria&les''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''+ II'('% Les chaines de caract,res'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''II'('. Le formatage des chaines de caract,res'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''/ II'('+ Les 0ntres 1 Sorties'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$$ II'('2 Les oprateurs''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$% II'('3 Les "aleurs &oolennes et les tests'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$+ II'('3'$ La structure if''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$2 II'('- Les structures de contr4le ou &oucles''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$II'('-'$ La &oucle 5hile'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$II'('-'( La &oucle for'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''$/ II'('-'% Les instructions &rea6 et continue'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''($ II'('/ Un premier cas de collection d7lments 8 les listes'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''($ II'('$9 Les sous-programmes ou fonctions''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(. II'('$9'$ #rsentation'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(. II'('$9'( finition d7une fonction''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(2 II'('$9'% Utilisation d7une fonction''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(II'('$9'. :etour sur le passage d7argument ; une fonction''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(II'('$$ La gestion des erreurs d7e<cution! les e<ceptions'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(/

$ 1 (%

Partie II Les lments de base du langage Python II.1. Pourquoi Python ? uelques notions essentielles sur le langage Python
#ython est un langage de programmation gnraliste! facile ; apprendre et rapide ; mettre en =u"re' #ython est gnraliste car! selon les multiples ralisations qu7il a ; son actif! il peut >tre utilis dans tous les domaines 8 criture d7applications pour le ?e& @ser"eur d7application Aope! frame5or6 BangoC! programmes de calculs mathmatiques @&i&lith,que Sci#yC! interfaces graphiques @il e<iste des supports de #ython pour les syt,mes d7interface graphique DTE! *t! TE! 5<?idgetC! programmation de scripts syst,mes! etc' e fait! #ython dispose d7une tr,s large &i&lioth,que standard qui offre au programmeur des outils tr,s di"ers pour 8 la gestion rseau @li&rairie soc6etC! la manipulation du format <ml! l7acc,s au< protocoles d7Internet @protocoles des ser"ices courriel! di"ers protocoles 5e&C! l7acc,s au< lments du syst,me d7e<ploitation sous-Bacent @acc,s au< fichiers et rpertoires! gestion des processusC! l7criture d7interfaces graphiques @li&rairie T6interC! l7acc,s au< &ases de donnes relationnelles! etc' Il est aussi possi&le d7tendre #ython en intgrant de nou"eau< modules' #ar e<emple la li&rairie #IL permet de traiter des images'
FThe #ython Standard Li&rary8 http811docs'python'org1(1li&rary1inde<'htmlG

#ython est facile ; apprendre car de nom&reuses oprations d"olues au programmeur dans les langages classiques comme le langage C! par e<emple la gestion de la mmoire! sont prises en charge par l7interprteur #ython' e m>me! #ython g,re dynamiquement les "aria&les et li&,re le programmeur des dclarations de type' e plus #ython impose d7crire les &locs d7instructions de mani,re indente! ce qui fa"orise grandement la lecture des programmes' 0nfin! en tant que langage interprt @"oir dans la partie I de ce coursC! #ython est rapide ; mettre en =u"re' Il suffit de lancer la console #ython pour a"oir sous la min de quoi tester directement des commandes et des structures de donnes' Cela est un gain de temps pour le programmeur par rapport au cycle compilation1dition de liens du langage C'

( 1 (%

Ceci tant dit! et s7il est "rai que #ython peut >tre utilis dans de nom&reu< domaines! cela ne signifie par que #ython est le &on choi< dans tous les cas H #ython est sou"ent considr comme un langage de scripts! c7est ; dire destin ; l7criture de petits programmes utilitaires ser"ant dans des conte<tes particuliers' 0n tant que langage dynamique interprt! #ython doit raliser un nom&re d7oprations &ien plus grand que les lignes crite par le programmeur dans son programme' 0n effet! il faut que #ython garde en mmoire et g,re des descripteurs pour chacun des sym&oles utiliss dynamiquement et qu7il g,re les rser"ations et li&rations de mmoire correspondantes' LIe<cution d7un programme #ython sera donc touBours plus lente que celle d7un programme compil' Jinsi un gros logiciel diffus ; grande chelle @prenons l7e<emple d7un logiciel de traitement de te<te ou d7un gestionnaire de &ases de donnesC sera plus pro&a&lement crit en langage C ou en CKK' Mais pour de nom&reu< usages! quand la rapidit d7e<cution n7est pas le crit,re dterminant! #ython est un &on choi<' #our l7apprentissage de la programmation! c7est un &on choi< galement car cela permet une entre en mati,re plus rapide et simplifie' Il faut cependant a"oir conscience que les facilits offertes par #ython ou autres langages dynamiques cachent de nom&reu< dtails au programmeur et pourraient donner une impression errone au d&utant en programmation' 0n effet la gestion mmoire d7un ta&leau de nom&res entiers! par e<emple! n7est pas une chose L allant de soi M et le programmeur en assem&leur ou en C @ou dans le cas de #ython 8 l7interprteurC doit contr4ler ce qui se passe en mmoire' Cela est en quelque sorte plus pdagogique' Last &ut not least 8 #ython est un langage orient ob!et et nous "errons ce que cela signifie dans la partie III de ce cours'

II.". Premiers lments de programmation en Python


II.".1 Les variables :appelons qu7une "aria&le reprsente un stoc6age en mmoire "i"e de l7ordinateur @mmoire "i"e 8 l; ou s7e<cutent les programmes! par opposition ; mmoire de masse! comme par e<emple un disque dur oN sont stoc6es des informations ; long termeC' Ce stoc#age est manipul grOce ; un nom symbolique' Contrairement ; ce qui est ha&ituel dans les langages dits de L &as ni"eau M! oN l7architecture matrielle de l7ordinateur est apparente au programmeur! le programmeur #ython ne tra"aille Bamais par acc,s e<plicite ; la mmoire en manipulant des adresses @ni m>me des L pointeurs M comme en langage CC' Tout
% 1 (%

acc,s ; la mmoire est ralis par l7intermdiaire de "aria&les qui ont une signification prcise pour le programmeur' Les noms des "aria&les o&issent ; des r,gles 8 Un nom doit d&uter par une lettre ou par le caract,re de soulignement $ puis il doit >tre sui"i par un nom&re quelconque de lettres! chiffres ou de caract,res de soulignement' Pn remarquera donc que le soulignement est le seul caract,re L e<otique M autoris' #ar e<emple! le tiret n7est pas autoris et un nom comme ma-variable n7est pas "ala&le comme nom de "aria&le' 0< de noms "ala&les 8 compteur! Unnom&re! unQom&re! unRnom&re! Rcompteur$! RRcompteur$(! u(%.! a! i( 0< de noms in"alides 8 $nom&re! ma-"aria&le! codeSsecret! Intressant % Pn en profitera pour dcou"rir dans la documentation officielle de #ython! la partie The Python langage reference. La partie (! Lexical analysis, utilise la notation appele BNF grammar pour prsenter de mani,re compl,te et normalise la synta<e du langage #ython' #our la description du nom des "aria&les! "oir Identifiers ans Key ords 8 http811docs'python'org1('31reference1le<icalRanalysis'htmlTidentifiers La cration d&une variable se fait lors de sa premi,re utilisation qui est touBours une initialisation ralise grOce ; l7oprateur d&a''ectation ( )* % aU. Cette affectation cr une "aria&le nomme a et lui affecte la "aleur enti,re .' Pn peut d,s lors utiliser cette "aria&le' #our afficher son contenu 8 print a #our la placer dans une autre "aria&le 8 &Ua #our l7utiliser dans une e*pression 8 c U $9 K (Va +q importante % Le signe U utilis dans les e<emples prcdents est &ien l7oprateur d&a''ectation' Il s7agit d7une action "isant ; placer dans le mem&re de gauche @c7est ; dire le stoc6age
. 1 (%

mmoire reprsent par la "aria&le place ; gauche du signe UC le contenu reprsent par l7e<pression simple ou comple<e place ; droite de l7oprateur' Il ne faut surtout pas confondre cet oprateur a"ec le signe U des mathmatiques' Ce dernier sert ; affirmer une galit' L7oprateur d7affectation! lui! n7a pas "aleur d7affirmation mathmatique mais reprsente une action'

II."." Le type des variables C7est une notion tr,s importante en programmation' 0n effet! au< valeurs contenues en mmoire sont associs des types' Ces types permettent ; la machine de sa"oir ce qu7elle peut faire a"ec les "aleurs et comment les manipuler' #ar e<emple 8 le caract,re 7J7 est cod en mmoire par la "aleur 2+! le caract,re 7W7 par la "aleur 22' Si les "aleurs sont considres comme des entiers! l7oprateur 7K7 reprsente l7addition 8 2+K22 a pour rsultat $%$ Si les "aleurs sont considres comme des @chaines deC caract,res! l7oprateur 7K7 reprsente la concatnation @mise &out ; &outC 8 7J7K7W7 a pour rsultat 7JW7 0n #ython! contrairement ; ce qui se passe pour d7autres langages comme le langage C! il n7y a pas de dclaration de type lors de la cration d&une variable H #ar e<emple! en langage C! la dclaration d7une "aria&le de type entier! a"ec initialisation ; une certaine "aleur! se fait par la dclaration sui"ante 8 int "ar U $2 X cela cr une "aria&le de type entier nomme "ar' 0n #ython! cela donne 8 "ar U $2 Les variables Python sont cres lors de leur premi,re a''ectation- sans dclaration pralable' Les "aria&les #ython ne sont donc pas associes ; des types! mais les "aleurs qu7elles contiennent! elles! le sont H C7est au programmeur de sa"oir le type de la "aleur contenue dans une "aria&le ; un moment donn pour ne pas faire d7opration incompati&le'
+ 1 (%

#ar e<emple! "oici deu< instructions successi"es incompati&les tapes dans l7interprteur #ython 8 YYY "ar U $2 YYY "ar U "ar K 7c7 Trace&ac6 @most recent call lastC8 Zile [\stdinY[! line $! in \moduleY Type0rror8 unsupported operand type@sC for K8 7int7 and 7str7 ans la seconde instruction! nous tentons d7aBouter le caract,re 7c7 au contenu de la "aria&le "ar qui contient dB; la valeur enti,re $2' Cela est incompati&le et l7interprteur! essayant de raliser l7addition! nous signale une erreur'

Qous "enons dB; de parler de deu< types e<istants dans le langage #ython 8 le type entier! le type chaines de caract,res' Le type entier est un type simple 8 une "aleur de type entier ne reprsente qu7une seule "aleur' Le type chaine de caract,res @ou string en anglaisC est un type comple<e 8 une "aleur de ce type contient plusieurs caract,res qui peu"ent >tre adresss indi"iduellement' Un autre type simple est le type flottant qui reprsente un nom&re rel' Les nom&res rels peu"ent >tre reprsents de diffrentes mani,res 8 '$.$2 ' '9%$.$2e( @notation a"ec mantisse et e<posant 8 9 '9($.$2 < $9]C e-. @ %$.$2 < $9-.C

II.".. Les chaines de caract,res Les chaines de caract,res sont des "aleurs composes de plusieurs caract,res' Il n7y a pas en #ython de type 7caract,re indi"iduel7 comme en langage C par e<emple @mais on peut tr,s &ien a"oir une chaine ne comportant qu7un seul caract,reC' ^oici des e<emples de chaines littrales 8
2 1 (%

7WonBour7 [WonBour[ 7Une chaine a"ec un retour ; la ligne_n7 Les chaines sont un e<emple de collection dont nous "errons d7autres e<emples par la suite' Les collections permettent le stoc6age et la manipulation en mmoire d7ensem&les de donnes reprsents par des "aria&les' #our adresser @accder ;C un lment particulier d7une collection! on dispose de l7oprateur /0 par e<emple 8 myString U [ma chaine[ print myString print myStringF.G :emarque 8 le premier indice est 9' Jinsi! le premier caract,re est myStringF9G et le dernier est myStringFla taille-!G #our manipuler une collection telle qu7une chaine de caract,res! nous disposons aussi de 'onctions et d7oprateurs attachs au nom des "aria&les' #ar e<emple pour conna`tre la taille d7une chaine de caract,res 8 taille U len@myStringC print taille myUpperString U myString'upper@C Qous dcou"rons ici des 'onctions @len! upperC appartenant ; la li&rairie standard de #ython' Qous re"iendrons plus en dtail dans la partie III de ce cours sur les collections! dont les chaines de caract,res sont un cas particulier'
FString Methods 8 http811docs'python'org1('31li&rary1stdtypes'htmlTstring-methodsG

II.".1 Le 'ormatage des chaines de caract,res Qous pou"ons! pour lIaffichage dIinformations ; lIcran par e<emple! a"oir &esoin de crer des messages comportant des informations de diffrents types! comme des caract,res et des nom&res' Pr nous a"ons "u prcdemment quIil nIest pas possi&le de L concatner M directement des "aleurs de types diffrents'
3 1 (%

Qous de"rons alors utiliser des fonctions de con"ersion de type' 0<emple 8 pri< U $2 message U [Le pri< est [ K str@pri<C K [ euros[ print message #our faciliter ce genre dIoprations tr,s courantes! le langage #ython dispose dIun oprateur spcial de formatage des chaines de caract,res 8 S La synta<e gnrale est 8 chaineRa"ecRformats S "aleurs la spcification des formats eu<-m>mes dans la chaine fait appel ; lIoprateur S' Jinsi Sd signifie que lIon "a placer dans la chaine une "aleur de type dcimal' Qotre e<emple de"ient ainsi 8 pri< U $2 message U [Le pri< est Sd euros[ S pri< print message Jutre e<emple 8 "al$ U + "al( U / message U [La somme de Sd et Sd "aut Sd[ S @"al$! "al(! "al$K"al(C Les derni,res "ersions de #ython ont introduit une mthode que l7on peut prfrer ; l7oprateur S pour le formatage des chaines de caract,res' Il s7agit de la fonction format qui fait dsormais partie des o&Bets de type chaine de caract,res' ^oici sur un e<emple 8 article U [stylos[ quantite U + pri< U .!+ message U [le pri< de a9b a$b est a(b['format@quantite! article! pri<C print message Cela affiche 8 le pri< de + stylos est .'+
Fformatage des chaines 8 http811docs'python'org1('31li&rary1stdtypes'htmlTstring-formatting-operationsG

- 1 (%

II.".2 Les )ntres 3 4orties Un programme doit a"oir des moyens de communiquer a"ec lIe<trieur de la seule mmoire "i"e de lIordinateur' Les oprations qui "isent ; lire des donnes et ; en crire ailleurs quIen mmoire "i"e sont des oprations d5entres 3 sorties' #armi les oprations dIentres 1 sorties les plus courantes figurent la lecture de caract,res au cla"ier @entreC et lIcriture dIinformation ; lIcran @sortieC' Il y en a dIautres! galement tr,s courantes! comme lire et crire dans des fichiers sur le disque dur! rece"oir et en"oyer des donnes par lIintermdiaire dIune interface rseau' #our lire des caract,res au cla"ier le langage #ython fournit la fonction 8 ra6$input chaine U ra5Rinput@[Saisissec des caract,res puis tapec 70ntre7 8 [C La fonction ra5Rinput prend une chaine en argument @un message qui sIaffiche ; lIcranC et retourne la chaine saisie au cla"ier @la saisie se terminant par la frappe de la touche [0ntre[C' Qous re"errons en dtail les fonctions! leurs arguments et leur "aleur retourne' Ici! ce qui a t saisi au cla"ier est plac! sous la forme dIune chaine de caract,res! dans la "aria&le nomme chaine ' #our les affichages ; lIcran! le langage #ython offre une instruction spciale 8 print print chaine La chaine ; afficher peut contenir des ordres spciau< en plus des caract,res ; afficher ; lIcran'Ces Lordres spciau<M se prsentent sous la forme de Lsquences dIchapementM @descape sequenceI en anglaisC est son introduite par le caract,re _ @&ac6 slashC' #ar e<emple 8 _n pour passer ; la ligne _I permet dIafficher la simple cote qui sinon est interprte comme dlimiteur de chaine _[ permet dIafficher la dou&le cote! sinon interprte elle aussi comme dlimiteur de chaine

/ 1 (%

_h<< permet de spcifier un caract,re JSCII @cod sur - &itsC en fournissant sa "aleur he<adcimale @chaque < reprsente un digit he<adcimal 8 "aleur de 9 ; Z - soit 9 ; $+ en dcimal - correspondant ; . &its' << reprsente donc une "aleur code sur - &itsC _u<<<< reprsente le codage he<adcimal dIun caract,re unicode cod sur ( octets @$- &itsC' Cette squence dIchappement ne peut >tre utilise quIa"ec les chaines de caract,res unicode' Une chaine unicode sIcrit a"ec le prfi<e u! par e< 8 print u[cha_u99eene unicode[

II.".7 Les oprateurs Les oprateurs permettent de manipuler les "aria&les en mmoire pour o&tenir des rsultats' Le premier oprateur est l&a''ectation reprsent par le signe (' Cet oprateur fondamental! qu7il ne faut pas confondre a"ec le test d7galit mathmatique que nous "errons ultrieurement! a dB; t prsent' a3 8prateurs arithmtiques % K V 1 addition soustraction multiplication di"ision a U &K+ T affecte dans a la "aleur reprsente par &K+ c U c f T soustrait de c la "aleur de f a U +1( T la di"ision ici est une di"ision enti,re car les deu< oprandes le sont' Le rsulatat est donc la "aleur enti,re (

S KU -U

a U +'9 1 ( T di"ision dcimale car un des oprateur est dcimal' Le rsultat sera ('+ oprateur modulo 8 reste a U + S ( T a est affect a"ec le reste de la de la di"ision enti,re di"ision de + par (! ce qui donne la "aleur $ aBout d7une quantit ; a KU . T on aBoute . ; la "aleur @suppose une "aria&le numriqueC contenue dans la "aria&le a retrait d7une quantit ; a -U . T on aBoute . ; la "aleur @suppose une "aria&le numriqueC contenue dans la "aria&le a

b3 8prateurs logiques
$9 1 (%

Les oprateurs logiques permettent de com&iner des valeurs boolennes! cIest ; dire des lments dont la "aleur est interprte comme vrai ou 'au*! pour o&tenir des e<pressions logiques plus comple<es' #our o&tenir la liste e<hausti"e des oprateurs logiques! on se reportera ; la documentation officielle de #ython' Ce sera un &on e<ercice de recherche et de familiarisation a"ec cette documentation' CIest une source e<hausti"e ; laquelle un programmeur #ython a rguli,rement &esoin de se rfrer' Pn acc,de a"ec cette documentation grOce au menu eelp de la fen>tre Python "hell du Python I#L$ @raccourci cla"ier par Z$C' Cela nous en"ois sur le site 8 http811docs'python'org1('31 Les oprateurs logiques sont dcrits dans la partie The Python "tandard Library! au paragraphe +'% ans les e<pressions arithmtiques et logiques comple<es! il faut sa"oir quelles oprations sont ralises en premier' Cela est indispensa&le pour dterminer le rsultat de toute e<pression compose' ^oici dans la documentation #ython le ta&leau de prcdence @prioritC des oprateurs 8 http811docs'python'org1(1reference1e<pressions'htmlToperator-precedence c3 8prateurs sur les chaines de caract,res Se reporter au ta&leau dIoprations du paragraphe +'2 de The Python "tandard Library dans la documentation #ython prsente prcdemment' Pn regardera aussi les mthodes applica&les au< ob!ets string dans le paragraphe +'2'$ de la documentation #ython'
FString operations and methods 8 http811docs'python'org1('31li&rary1stdtypes'htmlTsequence-types-str-unicode-list-tuple-&ytearray-&uffer-<rangeG

II.".9 Les valeurs boolennes et les tests Pn appel L "aleur &oolenne M une "aleur qui reprsente une "aluation logique et qui reprsente donc lIune des deu< possi&ilits sui"antes 8 "rai ou fau<' Les "aleurs &oolennes sont le rsultat de lI"aluation dIe*pressions logiques et elles ser"ent ; faire des choi< dans un programme @effectuer telle action quand telle condition est raliseC' ^oici quelques e<emples dIe<pressions logiques ; partir de deu< "aria&les a et & dont nous supposons quIelles contiennent des "aleurs enti,res' 0<pressions logiques simples 8
$$ 1 (%

aY+ a \U $9 a\& a UU & @galit logique entre a et &C 0<pressions logiques composes 8 a YU + and a \U $9 @cette e<pression est "raie si a est compris entre + et $9 inclusC not @a \ + or a Y $9C @cette e<pression a la m>me "aleur de "rit que la prcdenteC Toutes ces e<pressions reprsentent une valeur boolenne! elles sont soient "raies! soit fausses'
FComparisons 8 The Python "tandard Library! au paragraphe +'%G

II.".9.1 La structure i' Les e<pressions logiques! ou les "aleurs &oolennes! peu"ent >tre utilises dans des instructions conditionnelles introduite par le mot rser" i'' ^oici la structure dIun &loc if 8 if e<pressionRlogique 8 instruction $ instruction ( ' ' Instruction n else 8 autreR&locRinstructions Si lIe<pression logique est "alue ; "rai le bloc d5instruction sous le test est e<cut! sinon! si lIe<pression logique est "alue ; fau<! cIest le &loc dIinstruction sous le mot rser" else qui est e<cut' Pn constate quIen langage #ython! les &locs dIinstructions sont d'inis gr:ce au dcalage @ou indentationC des instructions qui le composent' Cela est propre ; #ython! dIautres langages! comme le C! utilisent des marqueurs plus e<plicites @ a &loc instructions b C' LIa"antage de rendre le dcalage o&ligatoire comme marqueur de &loc dIinstructions @par ailleurs conseill dans tous les langagesC est quIil o&lige ; une criture claire des programmes'

$( 1 (%

:emarque 8 ans la structure if! lIalternati"e else est facultati"e' ans ce cas! si lIe<pression logique est "alue ; fau<! le &loc dIinstruction sous le if est simplement saut! lIe<cution du programme reprenant ; la premi,re instruction apr,s le &loc if @donc en fait la premi,re instruction qui aura le m>me dcalage que le if lui-m>meC' Il y a un autre mot rser" eli'! qui permet des instructions de tests successifs! ce quIon appelle aussi lIalternati"e multiple 0<emple 8 temperature U getTemperature@C if temperature \ 9 8 print [il g,le[ elif temperature YU9 and temperature \$99 8 print [lIeau est liquide[ else 8 print [lIeau est ; lItat gaceu<[ Le rsultat dIune e<pression logique peut >tre plac dans une "aria&le' Une telle "aria&le prend alors une valeur boolenne' #ar e<emple 8 estLiquide U @temperature YU9 and temperature \$99C if estLiquide 8 print [lIeau est ; l7tat liquide[ Le langage #ython fournit les deu< "aleurs ;rue et <alse pour reprsenter les "aleurs &oolennes' Mais comme en langage C! toute "aleur peut >tre interprte comme une "aleur &oolenne de la mani,re sui"ante 8 si une variable contient la valeur = ou une chaine >de caract,res? vide- elle est interprte comme 'ausse- toute variable qui ne contient pas = ou toute chaine non vide est interprte comme vrai'

II.".@ Les structures de contrAle ou boucles II.".@.1 La boucle 6hile Qous "enons de "oir comment tester une e<pression logique ou "aleur &oolenne a"ec la structure if'
$% 1 (%

Il est aussi possi&le dIe<cuter un m>me &loc dIinstructions tant quIune condition est "rifie grOce ; la structure 6hile dont "oici la synta<e 8 5hile condition 8 &locRinstructions Comme dans la structure if! la condition est dIa&ord "alue et si elle "raie! le &loc dIinstructions est e<cut' Mais ici! apr,s e<cution du &loc dIinstruction! la condition est "alue ; nou"eau et le &loc dIinstructions est r-e<cut tant que la condition est "rai' *uand la condition de"ient fausse! le contr4le du programme passe ; lIinstruction sui"ant le &loc 5hile' Le &loc dIinstruction est! ici galement! dfini par son indentation ou dcalage :emarque 8 il est tr,s important! dans la structure 5hile! que le &loc dIinstructions ait une in'luence sur la condition- de mani,re ; ce que si la condition est "raie au dpart! elle puisse de"enir fausse apr,s un certain nom&re de tours dans la &oucle! sans quoi on se trou"erait dans le cas dIune boucle in'inie et dIun programme &loqu' 0<emple 8 temperature U (+ 5hile temperature \U $99 8 temperature KU $ print [la temprature est Sd! l7eau est liquide_n[ S temperature print [le chauffage de lIeau est termin! la temperature est Sd_n[ S temperature

II.".@." La boucle 'or Il y a aussi en langage #ython une structure 'or permettant de parcourir un nom&re fini d7lments' La structure gnrale de la &oucle for est la sui"ante 8 'or element in ta&leau 8 &loc instructions

$. 1 (%

ans le &loc d7instructions! le programme dispose de la "aria&le reprsentant l&lment courant pris dans le tableau. Ci-dessus cette "aria&le a t nomme element! mais tout autre nom correct de "aria&le con"ient' Le &loc d7instructions sera e<cut autant de fois qu7il y a de "aleur dans le ta&leau! chaque "aleur tant place tour ; tour dans la "aria&le lment' Les mots 'or et in sont les deu< mots rser"s utiliss dans cette structure' 0<emple 8 Qous n7a"ons pas encore tudi les ta&leau< ou collections d7lments en #ython @il y en a plusieurs types et ces types sont une des forces du langage #ythonC mais dIores et dB; nous pou"ons utiliser la fonction range>val1- val"? de la &i&lioth,que standard de #ython' Cette fonction ren"oie la L collection M des "aleurs comprises entre "al$ @inclusC et "al( @e<clusC' #ar e<emple range@$!$9C ren"oie la liste des / lments sui"ants 8 F$!(!%!.!+!2!3!-!/G Qous "errons ultrieurement que cette criture correspond ; une liste modi'iable' ^oici comment utiliser une &oucle for pour afficher toutes les "aleurs d7un inter"alle 8 for i in range@+!$$C 8 print i Cela est qui"alent ; la &oucle sui"ante for i in F+!2!3!-!/!$9G 8 print i Pu encore! il est possi&le d7utiliser une liste prala&lement place dans une "aria&le 8 maListe U F+!2!3!-!/!$9G for i in maListe 8 print i

II.".@.. Les instructions break et continue Les mots rser"s brea# et continue sont utiliss pour modifier le cours normal du droulement d7une &oucle for ou d7une &oucle 5hile'

$+ 1 (%

Il arri"e en effet que dans certaines situations @dtectes par un test if ; l7intrieur d7une &oucleC! on dcide soir de sortir de la &oucle @grOce ; l7instruction brea#C! soit de sauter le reste des instructions de la &oucle pour commencer directement l7itration sui"ante de la &oucle @grOce ; l7instruction continueC'
F&rea6 et continue 8 http811docs'python'org1('31tutorial1controlflo5'htmlT&rea6-and-continue-statements-and-else-clauses-on-loopsG

II.".B Cn premier cas de collection d&lments % les listes Qous "enons d7introduire les listes dans l7e<emple prcdent' Tous les langages de programmation offrent! d7une mani,re ou d7une autre! la possi&ilit de manipuler des collections d5lments! sou"ent appeles ta&leau<' Un ta&leau est gnralement une collection dIlments de m>me type' #ar e<emple en langage C! on dclare un ta&leau d7entiers de la mani,re sui"ante 8 int monTa&leauF$9G X 11 dclare un ta&leau de $9 entiers 11 et rser"e la place ncessaire en mmoire pour contenir les $9 entiers l7acc,s au< lments du ta&leau se fait ensuite en utilisant le nom du ta&leau et en fournissant un indice entre crochets 8 monTa&leauF+G U $+9 X 11 placer la "aleur $+9 dans le ta&leau ; la position d7indice + "al U monTa&leauF9G X 11 place dans une "aria&le appele "al! la "aleur contenue ; l7indice 9 11 du ta&leau' 0n langage C! le premier indice du ta&leau est touBours 9 et le dernier indice est donc sa taille $' Le programmeur doit touBours a"oir une ide tr,s prcise des limites d7un ta&leau et de la correspondance des indices sans quoi il s7e<pose ; des erreurs de programmation @effets de &ordsC'

)n langage Python! les listes fonctionnent un peu comme les ta&leau< du langage C mais a"ec quelques diffrences nota&les @qui facilitent grandement la "ie du programmeurHC 8

$2 1 (%

comme pour toute autre "aria&le en #ython! on cr une liste sans dclaration prala&le! sans prciser le type des lments contenus dans la liste' maListe U F$!(!%!.!+!2!3!-!/G T cr 7e<-nihilo7 une liste de / "aleurs enti,res on peut aussi cr une liste "ide au dpart 8 maListe U FG

ou encore 8 maListe U list@C La taille d7une liste n7est pas fige apr,s sa premi,re cration' Pn pourra touBours aBouter des lments' C7est l7interprteur #ython qui se charge tout seul de la gestion de la mmoire ncessaire pour contenir et grer la liste' maListe'appendF//G T aBoute la "aleur // comme nou"el lment ; la fin de la liste print maListe T affiche F$!(!%!.!+!2!3!-!/!//G Contrairement au< langages traditionnels comme le C! il est tout ; fait possi&le de placer dans une m>me liste des lments de type @tr,sC diffrents' #ar e<emple une m>me liste peut contenir non seulement des nom&res entiers et des nom&res flottants mais on peut aussi y aBouter des chaines de caract,res' monJutreListe U F+(! [&onBour[! [$[! (G Un lments commun ; C et #ython est la notation D crochets pour adresser des lments indi"iduels des listes' #ar e<emple 8 uneListe U F+!3!/G "al U uneListeF$G K uneListeF(G T"al contiendra la "aleur 3K/ c;d $2 0t tout comme en langage C! le premier indice d7une liste en #ython est 9' Le dernier indice est donc la taille de la liste @nom&re d7lmentsC moins $' #our conna`tre le nom&re d7lments contenus dans une liste! la &i&lioth,que standard de #ython fournit la fonction len'
$3 1 (%

#ar e<emple 8 taille U len@uneListeC Qous "errons ultrieurement que les listes fournissent plusieurs mthodes permettant de les manipuler ou d7en e<traire des sous listes' 7ailleurs les listes ne sont qu7un cas particulier des diffrents types de collections fournit par le langage #ython' Qous en a"ons dB; rencontr un autre cas 8 les chaines de caract,res' Il y en a encore d7autres que nous tudierons par la suite' +appel % nous a"ons "u au paragraphe prcdent II'('- qu7il e<iste une structure de contr4le! la &oucle 'or.... in qui permet de parcourir les lments d7un ta&leau! l7un apr,s l7autre'
FLists 8 http811docs'python'org1('31tutorial1introduction'htmlTlistsG

II.".1= Les sousEprogrammes ou 'onctions II.".1=.1 Prsentation ,s qu7un programme atteint une certaine taille! il est ncessaire de le dcouper et de le sparer en plusieurs parties correspondant chacune ; un traitement plus spcifique' Cette dcoupe fonctionnelle facilite la lecture et la maintenance des programmes et permet de rutiliser certaines portions de traitement sans qu7il soit &esoin de les rcrire plusieurs fois' #ar e<emple les mthodes "ues prcdemment pour manipuler les chaines de caract,res sont des sous-programmes offerts au programmeur #ython par la Python "tandard Library' Qous a"ons dB; rencontrs des fonctions dans les e<emples des chapitres prcdents! par e<emple des fonctions pour manipuler des chaines de caract,res' :eprenons l7e<emple tr,s simple "u en II'('% 8 myString U [ma chaine[ print myString print myStringF.G taille U len@myStringC print taille myUpperString U myString'upper@C Qous a"ons ici deu< fonctions @appartenant la la &i&lioth,que standard de #ythonC 8
$- 1 (%

len@C et upper@C la premi,re est une fonction autonome qui admet un argument donn entre parenth,ses' C7est la fonction len@C' Pn crit touBours une fonction en indiquant un Beu de parenth,se qui sym&olise le passage d7argument! m>me pour les fonctions qui n7en prennent aucun @liste d7arguments "ideC'

La fonction len@C prend une chaine de caract,re comme argument et elle effectue le calcul du nom&re de caract,res contenus dans cette chaine' 0lle ren"oie ensuite la "aleur calcule dans une "aria&le du programme 8
"aleur retourne fonction appele

taille U len @myStringC


affectation argument

L7autre fonction rencontre dans cet e<emple est la fonction upper@C' Celle-ci fonctionne de mani,re un peu diffrente' 0lle s7applique aussi ; une chaine de caract,res et elle a pour &ut de crer une nou"elle chaine de caract,res 8 une copie de la premi,re chaine mais a"ec tous les caract,res passs en maBuscules' La chaine de dpart n7est pas ici donne en argument' La fonction! ici! fait partie de l7o&Bet [chaine de caract,res[ et l7appel est ralis de la mani,re sui"ante 8 myUpperString U myString'upper@C onc la fonction s7applique directement ; la "aria&le chaine par l7oprateur point @.C 0n fait! et nous "errons cela en dtail par la suite! une chaine de caract,re en #ython est un ob!et qui contient ; la fois des donnes @les caract,res de la chaineC et des traitements @les fonctions qui s7appliquent ; la chaine elle-m>meC Ici la chaine s7 applique la fonction upper@C! ce qui a pour effet de ren"oyer dans une "aria&le du programme @ici la "aria&le myUpperStringC une copie de la chaine oN tous les caract,res ont t con"ertis en maBuscule'

$/ 1 (%

II.".1=."

F'inition d&une 'onction

Pn utilise le mot rser" de' pour crer un sous-programme @appel aussi fonctionC et on indique entre parenth,ses les arguments a"ec lesquels ce sous-programme de"ra tra"ailler' Les arguments sont les "aleurs sur lesquelles on "eut effectuer certains traitements'

La forme gnrale de dfinition d7une fonction est la sui"ante 8 de' Qom eLaZonction @arg$! arg(! fC % instruction$ instruction ( ''' return "aleur Le mot rser" return permet ; la fonction le ren"oie d7une "aleur au programme appelant' L7utilisation est facultati"e car il est possi&le d7crire des sous-programme ralisant des traitement mais ne retournant pas de "aleur' 0<emple 8 ans l7e<emple prcdent nous a"ons "u l7e<istence d7une fonction len fournie par la &i&lioth,que standard de #ython pour calculer la longueur d7une chaine de caract,res' ^oici comment on pourrait crire cette fonction! mais nous allons lui donner un autre nom pour ne pas entrer en conflit a"ec le sym&ole len dB; e<istant 8 def tailleChaine@laChaineC 8 taille U 9 for c in laChaine 8 taille KU $ return taille

II.".1=.. Ctilisation d&une 'onction #our in"oquer une fonction depuis un programme appelant @la fonction est alors le programme appelC on crit son nom sui"i par la liste des "aleurs qui "ont correspondre au< arguments dclars lors de la dfinition de la fonction' Les "aleurs sont crites entre parenth,ses'
(9 1 (%

0<emple 8 Qous allons appeler la fonction de l7e<emple prcdent pour l7appliquer ; une chaine de caract,re concr,te' maChaine U [WonBour[ tail U tailleChaine@maChaineC print [la taille de la chaine _[Ss_[ est Sd _n[ S @maChaine! tailC

II.".1=.1 +etour sur le passage d&argument D une 'onction Il y a deu< mani,res de passer des arguments ; une fonction 8 par valeur ou par r'rence' La question qui se pose est la sui"ante 8 les modifications faites sur les arguments ; l7intrieur de la fonction sont ils rpercuts ou non ; l7 e<trieur de la fonction ) 0n langage #ython! les arguments sont passs par valeur' #ython cr une ta&le de sym&oles locale ; chaque entre dans une fonction et cette ta&le contiendra une copie pro"isoire des "aria&les locales et des arguments formels' La "aleur passe ne consiste cependant pas en une recopie des o&Bets dans la ta&le de sym&oles locale! mais en une copie de la rfrence de l7o&Bet' Jinsi! pour les types de donnes modifia&les @m%table ob&ects dans la documentation #ythonC! comme les listes! c7est &ien une rfrence ; la liste qui est passe et si l7on alt,re un des lments de la liste! cette altration sera effecti"e m>me apr,s le retour dans le programme appelant'
FLes fonctions dans la doc #ython 8 http811docs'python'org1('31tutorial1controlflo5'htmlTdefining-functionsG

II.".11 La gestion des erreurs d&e*cution- les e*ceptions


+appel %*uand l7interprteur #ython rencontre une instruction qu7il n7est pas en mesure d7e<cuter @erreur de synta<e! di"ision par cro! acc,s ; un fichier qui n7e<iste pas! etcC! il lance une e*ception. Si cette e<ception n7est pas gre par le programme dont l7instruction fait partie! le rsultat est l7arr>t du programme a"ec affichage d7un message d7erreur' #ar e<emple! "oici une instruction demandant la saisie d7un nom&re flottant' L7instruction utilise la fonction ra5Rinput@C qui lit une chaine de caract,res au cla"ier! puis la fonction float@C tente de con"ertir cette chaine en un nom&re flottant 8 "al Ufloat@ra5Rinput@[saisir un flottant 8 [CC si l7utilisateur saisit des caract,res qui ne peu"ent pas >tre con"ertis en un nom&re flottant! nous aurons une e<ception puis un message d7erreur 8 ($ 1 (%

YYY "al Ufloat@ra5Rinput@[saisir un flottant 8 [CC saisir un flottant 8 +'+'( Trace&ac6 @most recent call lastC8 Zile [\pyshellT$Y[! line $! in \moduleY "al Ufloat@ra5Rinput@[saisir un flottant 8 [CC ^alue0rror8 in"alid literal for float@C8 +'+'( Pr il y a moyen pour le programmeur de contr4ler les instructions pou"ant gnrer des e<ceptions et de dfinir ses propres traitements d7erreur' #our cela le langage #ython offre le mcanisme tr,s efficace des &locs try et e*cept' Les instructions pou"ant gnrer des e<ceptions sont places dans un &loc try et un ou plusieurs &locs e*cept ser"ent ; dfinir les traitements d7erreur' Les e<ceptions gnres par les fonctions de la &i&lioth,que #ython ont des identifiants qui permettent de les distinguer et d7effectuer les traitements adquats'

)*emples% $1 :eprenons l7e<emple prcdent de la saisie de caract,res au cla"ier pour les transformer en un nom&re flottant' Pn peut utiliser un &loc try... e*cept... dans une &oucle pour redemander la saisie Busqu7; o&tenir une chaine con"erti&le en nom&re flottant 8 saisieRo6 U Zalse 5hile @not saisieRo6C 8 try 8 reel$ U float@ra5Rinput@[nom&re $ 8 [CC saisieRo6 U True e<cept ^alue0rror8 print @[ce n7est pas un flottant' :ecommencec[C saisieRo6 U Zalse (1 ^oici un autre e<emple concernant l7ou"erture d7un fichier' Si le fichier n7est pas trou" ; l7endroit indiqu par la fonction open! la fonction open gn,re une e<ception IP0rror' La gestion de cette e<ception permet l7affichage d7un message adquat 8 try 8 nom U ra5Rinput@[0ntrec un nom de fichier 8 [C fic U open@nomC data U fic'read@C fic'close@C &rea6 e<cept IP0rror8 print@[erreur lecture du fichier[C sys'e<it@C

+emarque % Les e<ceptions ^alue0rror et IP0rror rencontres dans les e<emples prcdents sont gnres respecti"ement par les fonctions ra5Rimput@C et float@C de la &i&lioth,que standard de (( 1 (%

#ython' Il est galement possi&le pour le programmeur de dclencher e<plicitement une e<ception grOce ; l7instruction raise \Qom d7une 0<ceptionY! et aussi il est possi&le de dfinir de nou"elles e<ceptions pour des &esoins particuliers! mais cela sort du cadre de ce cours' Pour en savoir plus %
F0rrors and 0<ceptions 8 http811docs'python'org1('31tutorial1errors'htmlG

0t pour conna`tre la liste des e<ceptions dfinies dans la &i&lioth,que standard de #ython 8
FWuilt-in 0<ceptions 8 http811docs'python'org1('31tutorial1errors'htmlG

(% 1 (%

Vous aimerez peut-être aussi