apprendre_python3_5

Upload: stephvitch

Post on 02-Mar-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/26/2019 apprendre_python3_5

    1/472

  • 7/26/2019 apprendre_python3_5

    2/472

    Pages de variables

    Document = Apprendre programmer avec Python

    NumeroExercice = 0

    caractres invisibles blancs :ttt

    Point est une variable qui sert afficher/masquer un point dans le titre courant de la page de droite : .

    La version numrique de ce texte peut tre tlcharge librement partir du site :http://inforef.be/swi/python.htm

    uel!ues paragraphes de cet ouvrage ont "t" adapt"s de :How to think like a computer scientistdeAllen B. Downe! "e##re $l%ner & 'hris (eers

    disponible sur : http:##thin$python%comou : http:##&&&%openboo$pro'ect%net#thin$()py

    Copyright (C) 2000-2012 Grard Swinnen

    *+ouvrage !ui suit est distribu" suivant les termes de la *icence Creative Commons, Paternit"-Pasd+.tilisation (ommerciale-Partage des (onditions /nitiales l+/denti!ue - %0 1rance 2%

    (ela signi3ie !ue vous pouve4 copier5 modi3ier et redistribuer ces pages tout 3ait librement5 pourautant !ue vous respectie4 un certain nombre de rgles !ui sont pr"cis"es dans cette licence5 dont letexte complet peut 6tre consult" dans l+annexe (5 page 778%

    Pour l+essentiel5 sache4 !ue vous ne pouve4 pas vous approprier ce texte pour le redistribuer ensuite9modi3i" ou non en d"3inissant vous-m6me d+autres droits de copie% *e document !ue vousredistribue45 modi3i" ou non5 doit obligatoirement inclure int"gralement le texte de la licence cit"eci-dessus5 le pr"sent avis et la pr"3ace !ui suit% *+accs ces notes doit rester libre pour tout le monde%;ous 6tes autoris" demander une contribution 3inancire ceux !ui vous redistribue4 ces notes5mais la somme demand"e ne peut concerner !ue les 3rais de reproduction% ;ous ne pouve4 pasredistribuer ces notes en exigeant pour vous-m6me des droits d+auteur5 ni limiter les droits dereproduction des copies !ue vous distribue4% *a di33usion commerciale de ce texte en librairie5 sous la

    3orme classi!ue d+un manuel imprim"5 est r"serv"e exclusivement la maison d+"dition Eyrolles9Paris%

    La couverture

    'hoisie dlibrment hors propos! l)illustration de couverture est la reproduction d)une *uvre l)huile ralisepar l)auteur d)apr+s une gravure de ".". Bau,ean. $lle met en sc+ne un petit sloop de cabotage de la #in du -esi+cle.'es b/timents de 01 1 tonneaux possdaient une grande voile de #ortune! utilise par vent arri+re comme on levoit ici! ainsi qu)un hunier pour les plus grands d)entre eux.

  • 7/26/2019 apprendre_python3_5

    3/472

    2race 3opper! inventeur du compilateur :4 5our moi! la programmation est plus qu)un art appliqu important. ')est aussi une ambitieuse qute menedans les tr#onds de la connaissance. 6

    7 (aximilien! 8lise! Lucille! Augustin et Alexane.

  • 7/26/2019 apprendre_python3_5

    4/472

  • 7/26/2019 apprendre_python3_5

    5/472

    5r#aceEn tant !ue pro3esseur ayant prati!u" l

  • 7/26/2019 apprendre_python3_5

    6/472

    ;

    servons par ailleurs !ue les 'eunes !ui arrivent au'ourd

  • 7/26/2019 apprendre_python3_5

    7/472

    ;;

    Nous avons alors d"cid" d

  • 7/26/2019 apprendre_python3_5

    8/472

    ;;;

    Python est portable5 non seulement sur les di33"rentes variantes d

  • 7/26/2019 apprendre_python3_5

    9/472

    ;F

    Python est un langage !ui continue & "oluer5 soutenu par une communaut" d

  • 7/26/2019 apprendre_python3_5

    10/472

    F

    *indows5 ?nix5 etc%5 son tutorieloriginal5 son manuel der#rence5 la documentationdes biblioth!ues de 3onctions5 etc% sont disponibles en t"l"chargementgratuit depuis /nternet5 partir du site &eb o33iciel : http://www.python.org

    ;ous pouve4 aussi trouver en ligne et en 3ran@ais5 l de Iobert (ordeau5pro3esseur l

  • 7/26/2019 apprendre_python3_5

    11/472

    F;

    /l existe "galement de trs bons ouvrages imprim"s concernant Python% *a plupart concernent encorePython %x5 mais vous ne devre4 gure "prouver de di33icult"s adapter leurs exemples Python >% En

    langue 3ran@aise5 vous pourre4 trs pro3itablement consulter les manuels ci-aprs : rogrammation ython5 par Mare$ Uiad"5 "ditions Eyrolles5 Paris5 00F5 8GR p%5 /)VN

    FWG---7G>-8% (G8 p%5 /)VN FWG--W770-7G-0 et FWG--W770-F8-7% (-0F>R->5trs complet5 trs clair5 agr"able lire et !ui utilise une m"thodologie "prouv"e%

    Pour aller plus loin5 notamment dans l5 et surtout l

  • 7/26/2019 apprendre_python3_5

    12/472

    F;;

    ,emerciements

    (e livre est pour une partie le r"sultat d

  • 7/26/2019 apprendre_python3_5

    13/472

  • 7/26/2019 apprendre_python3_5

    14/472

    F;

    2. 3nstructions r!p!titives ............................................................................................ 4#a00ectation........................................................................................................................................................... 62#ptitions en boucle L"instruction 9hile........................................................................................................ 6'

    'ommentaires .......................................................................................................................................................................................................... GJemarques .................................................................................................................................................................................................................GK8laboration de tables ..............................................................................................................................................................................................GK'onstruction d)une suite mathmatique ...........................................................................................................................................................1

    *remiers scripts, ou comment conser)er nos programmes............................................................................. 315robl+mes ventuels lis aux caract+res accentus .........................................................................................................................................M

    5. rincipaux types de donn!es ................................................................................... 04Les donnes numriques........................................................................................................................................ 32

    Le tpe integer ..........................................................................................................................................................................................................H

    Le t+pe 0loat............................................................................................................................................................. 34Les donnes alphanumriques.............................................................................................................................. :

    Le tpe string ............................................................................................................................................................................................................M-Jemarques.......................................................................................................................................................................................................... MG

  • 7/26/2019 apprendre_python3_5

    15/472

    F

    =aleurs par d0aut pour les param8tres............................................................................................................. 2!/rguments a)ec tiquettes.................................................................................................................................... 22

    9. %tilisation de fentres et de graphismes ............................................................... 48nter0aces graphiques $?

  • 7/26/2019 apprendre_python3_5

    16/472

    F;

    'onversion d)une chaNne string en chaNne btes...................................................................................................................................... -'onversions automatiques lors du traitement des #ichiers.................................................................................................................... -

    'as des scripts 5thon.................................................................................................................................................................................... -MAccder d)autres caract+res que ceux du clavier ........................................................................................................................................-ILes chaNnes sont des ob,ets ..................................................................................................................................................................................-0onctions intgres ............................................................................................................................................................................................... -ormatage des chaNnes de caract+res ............................................................................................................................................................... -ormatage des chaNnes 4 l)ancienne 6 ........................................................................................................................................................... -M1

    Le point sur les listes............................................................................................................................................ 11D#inition d)une liste P acc+s ses lments ................................................................................................................................................... -M-Les listes sont modi#iables ...................................................................................................................................................................................-MGLes listes sont des ob,ets .......................................................................................................................................................................................-MG

  • 7/26/2019 apprendre_python3_5

    17/472

    F;;

    D#inition concr+te d)une mthode dans un script ........................................................................................................................................-HI$ssai de la mthode! dans une instance quelconque .....................................................................................................................................-HI

    La mthode constructeur.................................................................................................................................... 12!$xemple ....................................................................................................................................................................................................................-H0Dspaces de noms des classes et instances.......................................................................................................... 1':Eritage.................................................................................................................................................................. 1'1Eritage et pol+morphisme................................................................................................................................. 1'6

    'ommentaires ........................................................................................................................................................................................................ -MModules contenant des biblioth8ques de classes............................................................................................. 1'2

    -0. Classes et interfaces graphi"ues ........................................................................... -8-(ode des couleurs ; un petit proet bien encapsul..........................................................................................141

    'ahier des charges de notre programme.................................................................................................................................................... -KG

    (ise en *uvre concr+te................................................................................................................................................................................. -KG'ommentaires.................................................................................................................................................................................................. -K

    *etit train ; hritage, change d"in0ormations entre obets........................................................................... 145'ahier des charges.......................................................................................................................................................................................... -K0;mplmentation............................................................................................................................................................................................... -K0'ommentaires.................................................................................................................................................................................................. -KH

    scillo?raphe ; un 9idget personnalis............................................................................................................ 14'$xprimentation.............................................................................................................................................................................................. G11'ahier des charges.......................................................................................................................................................................................... G1-;mplmentation............................................................................................................................................................................................... G1-

    (urseurs ; un 9idget composite.......................................................................................................................... 6:35rsentation du widget 9cale ............................................................................................................................................................................. G1'onstruction d)un panneau de contrOle trois curseurs .............................................................................................................................G1M

    'ommentaires.................................................................................................................................................................................................. G105ropagation des vnements........................................................................................................................................................................ G1

    ntgration de 9idgets composites dans une application s+nth8se..............................................................6:''ommentaires.................................................................................................................................................................................................. G-1

    -2. +t pour "uel"ues widgets de plus... ....................................................................... -4Les boutons radio.................................................................................................................................................. 612

    'ommentaires ........................................................................................................................................................................................................ G-

  • 7/26/2019 apprendre_python3_5

    18/472

    F;;;

    Barres d"outils e&pressions lambda................................................................................................................ 634(taprogrammation P expressions lambda ................................................................................................................................................... GM1

    5assage d)une #onction Rou d)une mthodeS comme argument ..................................................................................................................GM-CenFtres a)ec menus............................................................................................................................................ 66

    'ahier des charges de l)exercice .........................................................................................................................................................................GM5remi+re bauche du programme ..................................................................................................................................................................... GM

    Analse du script......................... ................ .............. ............... .............. ............... ............... .............. .............. ................ ............. ............... ... GMMA,out de la rubrique (usiciens ..........................................................................................................................................................................GM0

    Analse du script......................... ................ .............. ............... .............. ............... ............... .............. .............. ................ ............. ............... ... GMHA,out de la rubrique 5eintres ..............................................................................................................................................................................GMH

    Analse du script......................... ................ .............. ............... .............. ............... ............... .............. .............. ................ ............. ............... ... GMA,out de la rubrique @ptions .............................................................................................................................................................................. GM(enu avec cases cocher ....................................................................................................................................................................................GMK(enu avec choix exclusi#s ...................................................................................................................................................................................GI1'ontrOle du #lux d)excution l)aide d)une liste ............................................................................................................................................ GI-5rslection d)une rubrique ................................................................................................................................................................................GIG

    -5. (nalyse de programmes concrets ......................................................................... 55Ieu des bombardes................................................................................................................................................ 655

    5rototpage d)une classe 'anon ........................................................................................................................................................................ GI'ommentaires.................................................................................................................................................................................................. G01

    A,out de mthodes au prototpe ........................................................................................................................................................................G0-'ommentaires.................................................................................................................................................................................................. G0G

    Dveloppement de l)application .........................................................................................................................................................................G0'ommentaires.................................................................................................................................................................................................. G0

    Dveloppements complmentaires ....................................................................................................................................................................G0K'ommentaires.................................................................................................................................................................................................. GH

    Ieu de *ing............................................................................................................................................................. 6235rincipe ....................................................................................................................................................................................................................GHM5rogrammation ......................................................................................................................................................................................................GHM

    'ahier des charges du logiciel dvelopper.............................................................................................................................................. GHI

    -6. #estion dune base de donn!es .............................................................................. 48Les bases de donnes............................................................................................................................................ 624

    92BDJ P Le mod+le clientserveur .....................................................................................................................................................................G1Le langage 9UL .......................................................................................................................................................................................................G-9ULite .......................................................................................................................................................................................................................GG

    'ration de la base de donnes P @b,ets 4 connexion 6 et 4 curseur 6 ......................................................................................................GG'onnexion une base de donnes existante ................................................................................................................................................... GMJecherches slectives dans une base de donnes ...........................................................................................................................................G0La requte select .................................................................................................................................................................................................... G

    bauche d"un logiciel client pour *ostgre7L.................................................................................................. 6'4Dcrire la base de donnes dans un dictionnaire d)application .................................................................................................................GK1D#inir une classe d)ob,ets=inter#aces ...............................................................................................................................................................GK

    'ommentaires.................................................................................................................................................................................................. GKM'onstruire un gnrateur de #ormulaires ........................................................................................................................................................GK0

    'ommentaires.................................................................................................................................................................................................. GK0Le corps de l)application ......................................................................................................................................................................................GKH

    'ommentaires.................................................................................................................................................................................................. GKK

  • 7/26/2019 apprendre_python3_5

    19/472

    F;F

    -4. (pplications web ..................................................................................................... 0

  • 7/26/2019 apprendre_python3_5

    20/472

    FF

    'ommentaires.................................................................................................................................................................................................. HI'onclusions et perspectives .......................................................................................................................................................................... HI

  • 7/26/2019 apprendre_python3_5

    21/472

    --7 l)cole des sorciers

    Apprendre programmer est une activit d, tr+s intressante en elle=mme : elle peut stimulerpuissamment votre curiosit intellectuelle. (ais ce n)est pas tout. Acqurir cette comptence vous

    ouvre galement la voie menant la ralisation de pro,ets tout #ait concrets Rutiles ou ludiquesS!ce qui vous procurera certainement beaucoup de #iert et de grandes satis#actions.

    Avant de nous lancer dans le vi# du su,et! nous allons vous proposer ici quelques r#lexions sur lanature de la programmation et le comportement par#ois trange de ceux qui la pratiquent! ainsique l)explication de quelques concepts #ondamentaux. ;l n)est pas vraiment di##icile d)apprendre programmer! mais il #aut de la mthode et une bonne dose de persvrance! car vous pourreVcontinuer progresser sans cesse dans cette science : elle n)a aucune limite.

    AoBtes noires et pens!e magi"ue.ne caract"risti!ue remar!uable de notre soci"t" moderne est !ue nous vivons de plus en plusentour"s de boNtes noires% *es scienti3i!ues ont l

  • 7/26/2019 apprendre_python3_5

    22/472

    G 7 l)cole des sorciers

    (

  • 7/26/2019 apprendre_python3_5

    23/472

    (agie blanche! magie noire

    ;agie blanche= magie noire

    Nous n

  • 7/26/2019 apprendre_python3_5

    24/472

    M 7 l)cole des sorciers

    par exemple5 un peu la manire d

  • 7/26/2019 apprendre_python3_5

    25/472

    Langage machine! langage de programmation I

    Langage machine= langage de programmation

    strictement parler5 un ordinateur n

  • 7/26/2019 apprendre_python3_5

    26/472

    0 7 l)cole des sorciers

    gure de modi3ications sur des machines ou des systmes d

  • 7/26/2019 apprendre_python3_5

    27/472

    (ise au point d)un programme P Jecherche des erreurs RdebugS H

    En 3ait5 il peut exister dans un programme trois types d

  • 7/26/2019 apprendre_python3_5

    28/472

    7 l)cole des sorciers

    d

  • 7/26/2019 apprendre_python3_5

    29/472

    Jecherche des erreurs et exprimentation K

    tel 10% D

  • 7/26/2019 apprendre_python3_5

    30/472

  • 7/26/2019 apprendre_python3_5

    31/472

    G5remiers pas

    La programmation est donc l)art de commander un ordinateur de #aire exactement ce que vousvouleV! et 5thon compte parmi les langages qu)il est capable de comprendre pour recevoir vos

    ordres. Eous allons essaer cela tout de suite avec des ordres tr+s simples concernant des nombres!puisque les nombres constituent son matriau de prdilection. Eous allons lui #ournir nospremi+res 4 instructions 6! et prciser au passage la d#inition de quelques termes essentiels duvocabulaire in#ormatique! que vous rencontrereV constamment dans la suite de cet ouvrage.

    'omme nous l)avons expliqu dans la pr#ace Rvoir : ersions du langage! page F;;S! nous avons prisle parti d)utiliser dans ce cours la nouvelle version de 5thon! laquelle a introduit quelqueschangements sntaxiques par rapport aux versions prcdentes. Dans la mesure du possible! nousvous indiquerons ces di##rences dans le texte! a#in que vous puissieV sans probl+me analser ouutiliser d)anciens programmes crits pour 5thon - ou G.

    Calculer avec ythonPython pr"sente la particularit" de pouvoir 6tre utilis" de plusieurs manires di33"rentes% ;ous alle4d

  • 7/26/2019 apprendre_python3_5

    32/472

    -G 5remiers pas

    nement de travail sp"cialis" tel !ue ;DL$% ;oici par exemple ce !ui appara?t dans une 3en6tre determinal 2nome9sous ?buntu Linux8:

    Avec ;DL$sous >indows5 votre environnement de travail ressemblera celui-ci :

    *es trois caractres , sup"rieur 2 constituent le signal d>> 2 9 # les espaces sont optionnels

    >>> 7 + 3 * 4 # la hirarchie des oprations mathmatiques # est-elle respecte ?

    >>> (7+3)*4

    >>> 20 / 3 # attention : ceci fonctionnerait diffremment sous Python 2

    >>> 20 // 3

    8 )ous >indows!vous aure4 surtout le choix entre l environnement ;DL$d"velopp" par Huido ;an Iossum5au!uel nous donnons nous-m6me la pr"3"rence5 et 5thon>in5 une inter3ace de d"veloppement d"velopp"epar Qar$ ammond% Dautres environnements de travail plus sophisti!u"s existent aussi5 tels l excellent Boa'onstructor par exemple 9!ui 3onctionne de 3a@on trs similaire Delphi5 mais nous estimons !uils neconviennent gure aux d"butants% Pour tout renseignement compl"mentaire5 veuille4 consulter le site Oebde Python%)ous Linux5 nous pr"3"rons personnellement travailler dans une simple 3en6tre de terminal pour lancer

    l

  • 7/26/2019 apprendre_python3_5

    33/472

    'alculer avec 5thon -

    (omme vous pouve4 le constater5 les op"rateurs arithm"ti!ues pour l

  • 7/26/2019 apprendre_python3_5

    34/472

    -M 5remiers pas

    $oms de variables et mots r!serv!s

    *es noms de variables sont des noms !ue vous choisisse4 vous-m6me asse4 librement% E33orce4-vouscependant de bien les choisir : de pr"3"rence asse4 courts5 mais aussi explicites !ue possible5 demanire exprimer clairement ce !ue la variable est cens"e contenir% Par exemple5 des noms devariables tels !ue altitude5 altitou altconviennent mieux !ue x pour exprimer une altitude%

    %n bon programmeur doit veiller ? ce "ue ses lignes dinstructions soient faciles ? lire.

    )ous Python5 les noms de variables doivent en outre ob"ir !uel!ues rgles simples :

    .n nom de variable est une s"!uence de lettres 9a 4 5 A U et de chi33res 90 F5 !ui doittou'ours commencer par une lettre%

    )eules les lettres ordinaires sont autoris"es% *es lettres accentu"es5 les c"dilles5 les espaces5 les

    caractres sp"ciaux tels !ue 5 5 5 etc% sont interdits5 l , mots r"serv"s 2 ci-dessous 9ils sont utilis"s par le langage lui-m6me :

    and as assert break class continue def

    del elif else except False finally for

    from global if import in is lambda

    None nonlocal not or pass raise return

    True try while with yield

    (ffectation Fou assignationGNous savons d"sormais comment choisir 'udicieusement un nom de variable% ;oyons pr"sentcomment nous pouvons d#inirune variable et lui a##ecterune valeur% *es termes , a33ecter une valeur 2

    ou , assigner une valeur 2 une variable sont "!uivalents% /ls d"signent l

  • 7/26/2019 apprendre_python3_5

    35/472

    A##ectation Rou assignationS -I

    >>> n = 7 # dfinir la variable n et lui donner la valeur >>> msg = "Quo ! nu# $" # affecter la valeur "uoi de neuf ? ms$

    >>> p = 3.%4%59 # assi$ner sa valeur la variable pi*es exemples ci-dessus illustrent des instructions d

  • 7/26/2019 apprendre_python3_5

    36/472

    -0 5remiers pas

    >>> p'nt(msg)Quo ! nu# $

    >>> p'nt(n)7

    Iemar!ue4 la subtile di33"rence dans les a33ichages obtenus avec chacune des deux m"thodes% *a3onction p'nt()n

  • 7/26/2019 apprendre_python3_5

    37/472

    >> 'gu' * hutu'930

    % Assigne4 les valeurs respectives >5 85 W trois variables a5 b5 c%

    E33ectue4 l

  • 7/26/2019 apprendre_python3_5

    38/472

    - 5remiers pas

    *a seconde ligne de l>> s = p * '**2>>> p'nt(s)>>> p'nt(typ('), typ(p), typ(s))

    uelle est5 votre avis5 l

  • 7/26/2019 apprendre_python3_5

    39/472

    5riorit des oprations -K

    (et Dpour multiplicationet division5 !ui ont la m6me priorit"% Elles sont "valu"es avant l

  • 7/26/2019 apprendre_python3_5

    40/472

  • 7/26/2019 apprendre_python3_5

    41/472

    0'ontrOle du #lux d)excution

    Dans notre premier chapitre! nous avons vu que l)activit essentielle d)un programmeur est larsolution de probl+mes. @r! pour rsoudre un probl+me in#ormatique! il #aut tou,ours e##ectuer une

    srie d)actions dans un certain ordre. La description structure de ces actions et de l)ordre danslequel il convient de les e##ectuer s)appelle un algorithme.

    Le 4 chemin 6 suivi par 5thon travers un programme est appel un #lux d)excution! et lesconstructions qui le modi#ient sont appeles des instructions de contrOle de #lux.Les structures de contrOle sont les groupes d)instructions qui dterminent l)ordre dans lequel lesactions sont e##ectues. $n programmation moderne! il en existe seulement trois : la squence-1et laslection! que nous allons dcrire dans ce chapitre! et la rptition que nous aborderons au chapitresuivant.

    @!"uence dinstructions)au3 mention explicite5 les instructions d>> = >>> = >>> p'nt(, )

    ;ous obtiendre4 un r"sultat contraire si vous intervertisse4 les eet >elignes%

    0 Mel !uil est utilis" ici5 le terme de s!"uenced"signe donc une s"rie dinstructions !ui se suivent% Nouspr"3"rerons dans la suite de cet ouvrage r"server ce terme un concept Python pr"cis5 le!uel englobe leschaBnes de caractres5 les tupleset les listes9voir plus loin%

  • 7/26/2019 apprendre_python3_5

    42/472

    GG 'ontrOle du #lux d)excution

    Python ex"cute normalement les instructions de la premire la dernire5 sau3 lors!u> = %50>>> # ( > %00)1...

    *a premire commande a33ecte la valeur 80 la variable a% Kus!u> est maintenant remplac" par un prompt secondaireconstitu" detrois points%

    )i votre "diteur ne le 3ait pas automati!uement5 vous deve4 pr"sent e33ectuer une tabulation 9ouentrer 7 espaces avant d> = %50>>> # ( > %00)1... p'nt(" !pss ntn")...

    1rappe4 encore une 3ois $nterf% *e programme s

  • 7/26/2019 apprendre_python3_5

    43/472

    9lection ou excution conditionnelle G

    >>> = 20>>> # ( > %00)1

    ... p'nt(" !pss ntn")... s1

    ... p'nt(" n !pss ps nt")

    ...

    1rappe4 $nterf encore une 3ois% *e programme s= y # . est plus $rand que ou $al y = y # . est plus petit que ou $al y

    4emple

    >>> = 7>>> # ( 2 == 0)1... p'nt(" st p'")... p'nt("p' u 'st ! s !son p' 2 st nu")... s1... p'nt(" st mp'")...

    Note4 bien !ue l

  • 7/26/2019 apprendre_python3_5

    44/472

    GM 'ontrOle du #lux d)excution

    'ours la m6me structure : une ligne d

  • 7/26/2019 apprendre_python3_5

    45/472

    Uuelques r+gles de sntaxe 5thon GI

    Les limites des instructions et des blocs sont d!finies par la mise en page

    Dans de nombreux langages de programmation5 il 3aut terminer cha!ue ligne d

  • 7/26/2019 apprendre_python3_5

    46/472

    G0 'ontrOle du #lux d)excution

    Important

    5ous pou/ez aussi indenter laide de tabulations, mais alors /ous de/rez faire tr0sattention ne pas utiliser tant8t des espaces, tant8t des tabulations pour indenter leslignes dun m4me bloc.

  • 7/26/2019 apprendre_python3_5

    47/472

    2M;nstructions rptitives

    L)une des t/ches que les machines #ont le mieux est la rptition sans erreur de t/ches identiques. ;lexiste bien des mthodes pour programmer ces t/ches rptitives. Eous allons commencer par l)une

    des plus #ondamentales : la boucle de rptition construite autour de l)instruction while.

    ,!affectationNous ne l

  • 7/26/2019 apprendre_python3_5

    48/472

    G ;nstructions rptitives

    >>> , , , ! = 3, 4, 5, 7

    (ette 3onctionnalit" de Python est bien plus int"ressante encore !u

  • 7/26/2019 apprendre_python3_5

    49/472

    Jptitions en boucle P L)instruction while GK

    tructions d

  • 7/26/2019 apprendre_python3_5

    50/472

    1 ;nstructions rptitives

    >>> = 0>>> ;h %21

    ... = +%... p'nt( , **2 , **3)

    ;ous devrie4 obtenir la liste des carr"s et des cubes des nombres de %

    Note4 au passage !ue la 3onction print()permet d

  • 7/26/2019 apprendre_python3_5

    51/472

    Jptitions en boucle P L)instruction while -

    Variables a b c

    Valeurs initiales 1 1 1

    Valeurs prisessuccessivement aucours des it!rations

    1 " "

    " # #

    # $ %

    $ & $

    ''' ''' '''

    (xpression deremplacement

    b a)b c)1

    Dans une telle table5 on e33ectue en !uel!ue sorte , la main 2 le travail de l

  • 7/26/2019 apprendre_python3_5

    52/472

    G ;nstructions rptitives

    Pour ce 3aire5 vous alle4 d"sormais r"diger vos s"!uences dordpad! 2ean! Comodo editor...sous >indows5ou encore l

  • 7/26/2019 apprendre_python3_5

    53/472

    5remiers scripts! ou comment conserver nos programmes

    .n script Python contiendra des s"!uences d

  • 7/26/2019 apprendre_python3_5

    54/472

    M ;nstructions rptitives

    3ui ris3ueraient d4tre d9 attribus des modules p(t"on existants # des noms tels 3uemathpyou t

  • 7/26/2019 apprendre_python3_5

    55/472

    5remiers scripts! ou comment conserver nos programmes I

    93ran@ais5 allemand5 portugais5 etc%5 encod" sur un seul octet suivant la norme ;9@=IK=-5 la!uelleest souvent d"sign"e aussi par l

  • 7/26/2019 apprendre_python3_5

    56/472

  • 7/26/2019 apprendre_python3_5

    57/472

    5I5rincipaux tpes de donnes

    Dans le chapitre G! nous avons d, manipul des donnes de di##rents tpes : des nombres entiersou rels! et des chaNnes de caract+res. ;l est temps prsent d)examiner d)un peu plus pr+s ces tpes

    de donnes! et galement de vous en #aire dcouvrir d)autres.

    Les donn!es num!ri"uesDans les exercices r"alis"s 'us!u

  • 7/26/2019 apprendre_python3_5

    58/472

    5rincipaux tpes de donnes

    *R7G L7W7G>R7W%

    *es op"rations e33ectu"es sur des entiers compris entre ces deux limites sont donc tou'ours trsrapides5 parce !ue le processeur est capable de les traiter directement% En revanche5 lors!u bits au maximum%

    ;ous n bits cha!ue 3ois !ue c

  • 7/26/2019 apprendre_python3_5

    59/472

    Les donnes numriques K

    582%%07420928%3 1 70059890%%%83200292374%399572%92%24545057972979%7383923%327%754

    8832%235044347340028952049%030088325024900843742470237847552%4 1 45452807452579985329404824935%205%823987072294%5%40%55555839842227%3358%5%2382578240%998020%4%53747%%094%735505%42279479530059%70099504229307903824734055829%752983%9422450393350%754770330040%27583825>>>

    Dans l

  • 7/26/2019 apprendre_python3_5

    60/472

    M1 5rincipaux tpes de donnes

    Fn# Fn#

    (omme vous l0Get 0>0Gavec une pr"cision de chi33res signi3icati3s% (es nombres sont encod"sd

  • 7/26/2019 apprendre_python3_5

    61/472

    Les donnes alphanumriques M-

    Bous apprendrons au c"apitre 17 3uil ne faut pas confondre les notions de = c"a;ne decaract0res > et = s3uence doctets > comme le faisaient abusi/ement les langages de

    programmation anciens dont les premi0res /ersions de P(t"on-. Pour linstant,r9ouissons&nous 3ue P(t"on traite dsormais de mani0re parfaitement co"rente toutesles c"a;nes de caract0res, ceux&ci pou/ant faire partie dalp"abets 3uelcon3ues'1.

    Le type string

    .ne donn"e de typestringpeut se d"3inir en premire approximation comme une suite !uelcon!ue decaractres% Dans un script python5 on peut d"limiter une telle suite de caractres5 soit par desapostrophes 9simple !uotes5 soit par des guillemets 9double !uotes% Exemples :

    >>> ph's% = 's ou#s !u's.'>>> ph's2 = '"Gu", 'pon!t-,'>>> ph's3 = "H'm n"

    >>> p'nt(ph's2, ph's3, ph's%)"Gu", 'pon!t-, H'm n s ou#s !u's.

    *es > variables phrase15 phrase25 phrase*sont donc des variables de typestring%

    Iemar!ue4 l>> ut = "I st un hJn putKt onguCn ontnnt pusu's gns C... ! tt (I #ontonnCn ! mm #Lon n I/I++.CnC... @otM u s ns n !utCn ! gn sont sgn#t#s.Cn">>> p'nt(ut)I st un hJn putKt onguontnnt pusu's gns ! tt (I #ontonn! mm #Lon n I/I++. @otM u s ns n !ut

    ! gn sont sgn#t#s.

    (eci constitue donc l

  • 7/26/2019 apprendre_python3_5

    62/472

    MG 5rincipaux tpes de donnes

    ,emar"ues

    *a s"!uence Cndans une cha?ne provo!ue un saut la ligne% *a s"!uence C&permet d>> p'nt(%)

    ?mp ! tt p'#o'mt, &st-N-!'!ont s n!nttons t s

    't's spu C & " sontons's sns

    ut' #o'm ! p'os.>>>

    (ccs aux caractres individuels dune chaBne

    *es cha?nes de caractres constituent un cas particulier d

  • 7/26/2019 apprendre_python3_5

    63/472

    Les donnes alphanumriques M

    Attention cependant : comme vous aure4 l%05 vous obtene4 sanssurprise les r"sultats attendus :

    >>> h ="@o n Rm'">>> p'nt(hO%P,hO2P,hO3P,hO4P,hO8P,hO9P,hO%0P,hO%%P,hO%2P)o R m

    Ne vous pr"occupe4 pas pour l

  • 7/26/2019 apprendre_python3_5

    64/472

    MM 5rincipaux tpes de donnes

    >>> h ='To'gs'>>> p'nt(n(h))

    7(ela marche tout aussi bien si la cha?ne contient des caractres accentu"s :>>> h ='Un'>>> p'nt(n(h))4

    (onvertir en nombre v"ritable une cha?ne de caractres !ui repr"sente un nombre% Exemple :>>> h = '847'>>> p'nt(h + 45)

    ``` erreur `` : on ne peut pas additionner une cha?ne et un nombre>>> n = nt(h)>>> p'nt(n + 5)

    87%2 # => : on peut additionner 2 nombresDans cet exemple5 la 3onction int"gr"e int() convertit la cha?ne en nombre entier% /l serait"galement possible de convertir une cha?ne de caractres en nombre r"el5 l

  • 7/26/2019 apprendre_python3_5

    65/472

    Les listes Rpremi+re approcheS MI

    >>> Hou' = O'un!', 'm'!', 'm''!', %800, 20.357, 'Hu!', 'n!'!'P>>> p'nt(Hou')

    O'un!', 'm'!', 'm''!', %800, 20.357, 'Hu!', 'n!'!'P

    Dans cet exemple5 la valeur de la variablejourest une liste%

    (omme on peut le constater dans le m6me exemple5 les "l"ments individuels !ui constituent une listepeuvent 6tre de types vari"s% Dans cet exemple5 en e33et5 les trois premiers "l"ments sont des cha?nesde caractres5 le !uatrime "l"ment est un entier5 le cin!uime un r"el5 etc% 9nous verrons plus loin!u> Hou' = O'un!', 'm'!', 'm''!', %800, 20.357, 'Hu!', 'n!'!'P>>> p'nt(Hou'O2P)m''!>>> p'nt(Hou'O4P)20.357

    la di33"rence de ce !ui se passe pour les cha?nes5 !ui constituent un type de donn"es non=modi#iables

    9nous aurons plus loin diverses occasions de revenir l-dessus5 il est possible de changer les "l"mentsindividuels d>> p'nt(Hou')O'un!', 'm'!', 'm''!', %800, 20.357, 'Hu!', 'n!'!'P>>> Hou'O3P = Hou'O3P +47>>> p'nt(Hou')O'un!', 'm'!', 'm''!', %847, 20.357, 'Hu!', 'n!'!'P

    Jn peut donc remplacer certains "l"ments d> Hou'O3P = 'Vut'>>> p'nt(Hou')O'un!', 'm'!', 'm''!', 'Vut', 20.357, 'Hu!', 'n!'!'P

    *a #onction intgre len()5 !ue nous avons d"' rencontr"e propos des cha?nes5 s

  • 7/26/2019 apprendre_python3_5

    66/472

    M0 5rincipaux tpes de donnes

    .ne autre#onction intgrepermet de supprimer d> !(Hou'O4P)>>> p'nt(Hou')O'un!', 'm'!', 'm''!', 'Hut', 'Hu!', 'n!'!'P

    /l est "galement tout 3ait possible d>> p'nt(Hou')O'un!', 'm'!', 'm''!', 'Hut', 'Hu!', 'n!'!', 'sm!'P>>>

    Dans la premire ligne de l

  • 7/26/2019 apprendre_python3_5

    67/472

    Les listes Rpremi+re approcheS MH

    Exercices

    8% )oient les listes suivantes :

    t% = O3%, 28, 3%, 30, 3%, 30, 3%, 3%, 30, 3%, 30, 3%Pt2 = O'Vn'', '''', '

  • 7/26/2019 apprendre_python3_5

    68/472

  • 7/26/2019 apprendre_python3_5

    69/472

    60onctions prd#inies

    L)un des concepts les plus importants en programmation est celui de #onction GM. Les #onctionspermettent en e##et de dcomposer un programme complexe en une srie de sous=programmes plus

    simples! lesquels peuvent leur tour tre dcomposs en #ragments plus petits! et ainsi de suite.D)autre part! les #onctions sont rutilisables : si nous disposons d)une #onction capable de calculerune racine carre! par exemple! nous pouvons l)utiliser un peu partout dans nos programmes sansavoir la r=crire chaque #ois.

    La fonction printFGNous avons bien "videmment d"' rencontr" cette 3onction% Pr"cisons simplement ici !u>> p'nt("YonHou'", "N", "tous", sp ="")YonHou'Ntous

    De m6me5 vous pouve4 remplacer le saut la ligne par l>> n =0>>> ;h n1... p'nt("Mut", n! ="")... n = n+%...MutMutMutMutMut

    7 )ous Python5 le terme , 3onction 2 est utilis" indi33"remment pour d"signer la 3ois de v"ritables 3onctionsmais "galement des procdures % Nous indi!uerons plus loin la distinction entre ces deux concepts proches%

  • 7/26/2019 apprendre_python3_5

    70/472

    I1 onctions prd#inies

    3nteraction avec lutilisateur : la fonction inputFG

    *a plupart des scripts "labor"s n"cessitent un moment ou l>> = nput("?nt'M un !onn num'u 1 ")?nt'M un !onn num'u 1 52.37>>> typ()ss 'st''>>>> = #ot() # conversion de la chane en un nombre rel>>> typ()ss '#ot'>

    3mporter un module de fonctions;ous ave4 d"' rencontr" d

  • 7/26/2019 apprendre_python3_5

    71/472

    ;mporter un module de #onctions I-

    +es modules sont des fic"iers 3ui regroupent des ensembles de fonctions'E.

    ;ous verre4 plus loin combien il est commode de d"couper un programme important en plusieurs3ichiers de taille modeste pour en 3aciliter la maintenance% .ne application Python typi!ue sera alorsconstitu"e d

    #'om mth mpo't *

    nom' = %2%ng = p/ # soit 4@A # %la biblioth+que math inclut aussi la dfinition de pi&p'nt("'n '' !", nom', "=", s't(nom'))p'nt("snus !", ng, "'!ns", "=", sn(ng))

    *

  • 7/26/2019 apprendre_python3_5

    72/472

    IG onctions prd#inies

    Nous allons d"velopper tout ceci dans les pages suivantes% ;euille4 noter au passage !ue les 3onctionsmath"mati!ues utilis"es ici ne repr"sentent !u crive4 un programme !ui calcule la p"riode d

  • 7/26/2019 apprendre_python3_5

    73/472

    ?n peu de dtente avec le module turtle I

    g"om"tri!ues correspondant la piste laiss"e derrire elle par une petite , tortue 2 virtuelle5 dontnous contrlons les d"placements sur l> 'st()

    >>> = 0>>> ;h %21 = +% #o';'!(%50) #t(%50)

    Attention cependant : avant de lancerun tel script5 assure4-vous tou'ours!u

  • 7/26/2019 apprendre_python3_5

    74/472

    IM onctions prd#inies

    Qais comment un ordinateur peut-il d"terminer si !uel!ue chose est vraiou#aux]

    En 3ait X et vous le save4 d"' X un ordinateur ne manipule strictement !ue des nombres% Mout ce !u

  • 7/26/2019 apprendre_python3_5

    75/472

    racit#ausset d)une expression II

    s1 p'nt("#u")

    ;ous obtiendre4 #u pour toute cha?ne vide5 et ' pour toute cha?ne contenant au moins uncaractre% ;ous pourrie4 de la m6me manire tester la , v"racit" 2 d

  • 7/26/2019 apprendre_python3_5

    76/472

    I0 onctions prd#inies

    # en liste toute chane de valeurs spares par des vir$ules :2

    nn = st((h))

    m, n! = nnO0P, 'p'm''# nnO%P > m1 # ne pas omettre le double point ! m = nnO%P n! = 'son!'# nnO2P > m1 m = nnO2P n! = 't'osm'p'nt("6 pus g'n! ! s nom's st", m)p'nt("I nom' st ", n!, "! ot' st.")

    Dans cet exercice5 vous retrouve4 nouveau le concept de , bloc d et 75 et !ue vous deve4 absolument assimiler% Pour rappel5 les blocs d

  • 7/26/2019 apprendre_python3_5

    77/472

    Jvision IH

    Nous retrouvons ici une boucle while5 associ"e un groupe d

  • 7/26/2019 apprendre_python3_5

    78/472

    I onctions prd#inies

    R%W Ieprendre le programme c avec a = 0 au lieu de a = %ue se passe-t-il ] (onclure S

    R%G crire un programme !ui5 "tant donn"es deux bornes entires a et b5 additionne les nombresmultiples de > et de 8 compris entre ces bornes% Prendre par exemple a = 05 b = > _ le r"sultatdevrait 6tre alors 0 L 8 L >0 = 78%Qodi3ier l"grement ce programme pour !u ou de 8compris entre les bornes a et b% Avec les bornes 0 et >5 le r"sultat devrait donc 6tre : 0 L > L 8L R L F L 0 L L 8 L G L 0 L L 7 L 8 L W L >0 = 8%

    R%F D"terminer si une ann"e 9dont le mill"sime est introduit par l

  • 7/26/2019 apprendre_python3_5

    79/472

    Jvision IK

    Exemple d

  • 7/26/2019 apprendre_python3_5

    80/472

  • 7/26/2019 apprendre_python3_5

    81/472

    4Honctions originales

    La programmation est l)art d)apprendre un ordinateur comment accomplir des t/ches qu)iln)tait pas capable de raliser auparavant. L)une des mthodes les plus intressantes pour arriver

    consiste a,outer de nouvelles instructions au langage de programmation que vous utiliseV! sous la#orme de #onctions originales.

    '!finir une fonction*es scripts !ue vous ave4 "crits 'us!u0pour !ue ceux-ci restent clairs%

    D /l existe aussi dans dautres langages des routines9par3ois appel"s sous-programmes et des procdures%/l nexiste pas de routinesen Python% uant au terme de #onction5 il d"signe la 3ois les 3onctions au sensstrict 9!ui 3ournissent une valeur en retour5 et les proc"dures 9!ui n en 3ournissent pas%

  • 7/26/2019 apprendre_python3_5

    82/472

    0G onctions originales

    !# nomR6onton(liste de param+tres)1 ...

    bloc d'

    instructions ...

    ;ous pouve4 choisir n>5 le double point5 etl

  • 7/26/2019 apprendre_python3_5

    83/472

    D#inir une #onction 0

    7 %4 2% 28 35 42 49 5 3 70

    Nous pouvons maintenant r"utiliser cette 3onction plusieurs reprises5 autant de 3ois !ue nous lesouhaitons% Nous pouvons "galement l

  • 7/26/2019 apprendre_python3_5

    84/472

    0M onctions originales

    Dans la d"3inition d>> !# t(s)1... n = %... ;h n %% 1... p'nt(n * s, n! =& &)... n = n +%

    *a 3onction table()telle !ue d"3inie ci-dessus utilise le paramtre basepour calculer les dix premierstermes de la table de multiplication correspondante%

    Pour tester cette nouvelle 3onction5 il nous su33it de l>> t(%3)%3 2 39 52 5 78 9% %04 %%7 %30

    >>> t(9)9 %8 27 3 45 54 3 72 8% 90

    Dans ces exemples5 la valeur !ue nous indi!uons entre parenthses lors de l

  • 7/26/2019 apprendre_python3_5

    85/472

    D#inir une #onction 0I

    +e nom dune /ariable 3ue nous passons comme argument na rien /oir a/ec le nom duparam0tre correspondant dans la fonction.

    (es noms peuvent 6tre identi!ues si vous le voule45 mais vous deve4 bien comprendre !u

  • 7/26/2019 apprendre_python3_5

    86/472

    00 onctions originales

    *ors de l p'nt(s)B'] (most 'nt st)1 "st!n>", n %, n mo!u>

    @m?''o'1 nm &s& s not !#n!

    *a machine nous signale clairement !ue le symbole baselui est inconnu5 alors !u

  • 7/26/2019 apprendre_python3_5

    87/472

    ariables locales! variables globales 0H

    Nous commen@ons par d"3inir une 3onction trs simple 9!ui n>> mont'()%7>>>

  • 7/26/2019 apprendre_python3_5

    88/472

    0 onctions originales

    &raies fonctions et proc!dures

    Pour les puristes5 les 3onctions !ue nous avons d"crites 'us!u>> !# u(;)1... 'tu'n ;*;*;...

    *> p'nt()729

    titre d

  • 7/26/2019 apprendre_python3_5

    89/472

    raies #onctions et procdures 0K

    9Iappel : le premier "l"ment d>> p'nt(t(9)O3P)

    >R 'tu'npeut "galement 6tre utilis" sans aucun argument5 l int"rieur dune 3onction5 pour provo!uer sa

    3ermeture imm"diate% *a valeur retourn"e dans ce cas est l ob'et @on9ob'et particulier5 correspondant , rien 2%

  • 7/26/2019 apprendre_python3_5

    90/472

    H1 onctions originales

    ou encore plus simplement encore :>>> u(9)%%%

    %tilisation des fonctions dans un scriptPour cette premire approche des 3onctions5 nous n

  • 7/26/2019 apprendre_python3_5

    91/472

    ?tilisation des #onctions dans un script H-

    !u

  • 7/26/2019 apprendre_python3_5

    92/472

    HG onctions originales

    les classes d

  • 7/26/2019 apprendre_python3_5

    93/472

    (odules de #onctions H

  • 7/26/2019 apprendre_python3_5

    94/472

    HM onctions originales

    Exercices

    W% D"3inisse4 une 3onction ligneCar(n+ ca)!ui renvoie une cha?ne de ncaractres ca%

    W%> D"3inisse4 une 3onction sur#Cercle(>)% (ette 3onction doit renvoyer la sur3ace 9l

  • 7/26/2019 apprendre_python3_5

    95/472

    (odules de #onctions HI

    W%G A'oute4 au module de l

  • 7/26/2019 apprendre_python3_5

    96/472

    H0 onctions originales

    *ypage des paramtres

    ;ous ave4 appris !ue le tpagedes variables sous Python est un tpage dnamique5 ce !ui signi3ie !ue letype d>> ##h'3#os(5)5 5 5

    >>> ##h'3#os('Mut')

    Mut Mut Mut

    >>> ##h'3#os(O5, 7P)O5, 7P O5, 7P O5, 7P

    >>> ##h'3#os(**2)3 3 3

    Dans cet exemple5 vous pouve4 constater !ue la m6me 3onction a##icher*#ois()accepte dans tous lescas l> !# potss(nom, !tt ='

  • 7/26/2019 apprendre_python3_5

    97/472

    aleurs par d#aut pour les param+tres HH

    Autre exemple :

    >>> !# uston(nnon, sss =4, ps ='Gu ou non, s..p.')1... ;h sss >01... 'pons = nput(nnon)... # 'pons n ('o', 'ou','G','Gu','GAF')1... 'tu'n %... # 'pons n ('n','non','@','@on','@G@')1... 'tu'n 0... p'nt(ps)... sss = sss-%...>>>

    (ette 3onction peut 6tre appel"e de di33"rentes 3a@ons5 telles par exemple :

    'p = uston('ZouM-ous 'mnt t'mn' $ ')

    ou bien :'p = uston('ut- ##' #h' $ ', 3)

    ou m6me encore :

    'p = uston('WM-ous omp's $ ', 2, 'Upon!M p' ou ou p' non ')

    Prene4 la peine d> !# osu(otg=%00, tt='um', ton='!ns' H')1... p'nt('I p''out n pou'' ps', ton)... p'nt('s ous 'nhM su'', otg, 'ots ')... p'nt("6'utu' ! st omptmnt", tt)...

    >>> osu(tt='g'', otg=250, ton='ous pp'ou'')I p''out n pou'' ps ous pp'ou's ous 'nhM su' 250 ots 6'utu' ! st omptmnt g'

    >>> osu()I p''out n pou'' ps !ns' Hs ous 'nhM su' %00 ots 6'utu' ! st omptmnt um

  • 7/26/2019 apprendre_python3_5

    98/472

    H onctions originales

    Exercices

    W%7 Qodi3ie4 la 3onction "ol?oite(1+2+*)!ue vous ave4 d"3inie dans un exercice pr"c"dent5 demanire ce !u>> ph's = 'I st un tout ptt ph's.'>>> p'nt(hngI'(ph's, '', '*'))I*st*un*tout*ptt*ph's.>>> p'nt(hngI'(ph's, '', '*', 8, %2))I st*un*tout ptt ph's.>>> p'nt(hngI'(ph's, '', '*', %2))I st un*tout*ptt*ph's.>>> p'nt(hngI'(ph's, '', '*', #n = %2))I*st*un*tout ptt ph's.

    W%W D"3inisse4 une 3onction ele

  • 7/26/2019 apprendre_python3_5

    99/472

    9?tilisation de #entres et de

    graphismes

    "usqu) prsent! nous avons utilis 5thon exclusivement 4 en mode texte 6. Eous avons procdainsi parce qu)il nous #allait absolument d)abord dgager un certain nombre de conceptslmentaires ainsi que la structure de base du langage! avant d)envisager des expriencesimpliquant des ob,ets in#ormatiques plus labors R#entres! images! sons! etc.S. Eous pouvonsmaintenant nous permettre une petite incursion dans le vaste domaine des inter#aces graphiques!mais ce ne sera qu)un premier amuse=gueule : il nous reste en e##et encore bien des choses#ondamentales apprendre! et pour nombre d)entre elles l)approche textuelle reste la plusabordable.

    3nterfaces graphi"ues F#%3G)i vous ne le savie4 pas encore5 apprene4 ds pr"sent !ue le domaine des inter3aces graphi!ues 9ou2?;! 2raphical ?ser ;nter#aces est extr6mement complexe% (ha!ue systme d

  • 7/26/2019 apprendre_python3_5

    100/472

    1 ?tilisation de #entres et de graphismes

    remiers pas avec tkinter

    Pour la suite des explications5 nous supposerons bien "videmment !ue le module t%interH a d"' "t"install" sur votre systme% Pour pouvoir en utiliser les 3onctionnalit"s dans un script Python5 il 3aut!ue l%05 le nom de ce module commen@ait par unema'uscule%>G , widget 6est le r"sultat de la contraction de lexpression , window gadget 6% Dans certains environnementsde programmation5 on appellera cela plutt un , contrle 2 ou un , composant graphi!ue 2% (e terme d"signeen 3ait toute entit" susceptible d6tre plac"e dans une 3en6tre dapplication5 comme par exemple un bouton5une case cocher5 une image5 etc%5 et par3ois aussi la 3en6tre elle-m6me%>F )i vous e33ectue4 cet exercice sous >indows5 nous vous conseillons dutiliser de pr"3"rence une version

    standard de Python dans une 3en6tre DJ) ou dans /D*E plutt !ue 5thon>in.;ous pourre4 mieux observerce !ui se passe aprs lentr"e de cha!ue commande%

  • 7/26/2019 apprendre_python3_5

    101/472

    5remiers pas avec t%inter -

    % la deuxime ligne de notre exemple : #n% = B]()5 nous utilisons l

  • 7/26/2019 apprendre_python3_5

    102/472

    G ?tilisation de #entres et de graphismes

    , ma?tre 2 : l

  • 7/26/2019 apprendre_python3_5

    103/472

    5remiers pas avec t%inter

    W% *a septime ligne : #n%.mnoop() est trs importante5 parce !ue c

  • 7/26/2019 apprendre_python3_5

    104/472

    M ?tilisation de #entres et de graphismes

    *ors!u

  • 7/26/2019 apprendre_python3_5

    105/472

    5rogrammes pilots par des vnements I

    termin" le sien77% *es systmes d

  • 7/26/2019 apprendre_python3_5

    106/472

    0 ?tilisation de #entres et de graphismes

    p=O'pu'p','yn','m'oon','g'n',''!','u','o'ng','yo;'P = 'n!'ng(8) # (' $n+re un nombre alatoire de @

    ou = pOP#------ Pro$ramme principal -------

    # les variables suivantes seront utilises de mani+re $lobale :%, y%, 2, y2 = %0, %90, %90, %0 # coordonnes de la li$neou = '!'] g'n' # couleur de la li$ne

    # *ration du Fid$et principal %matre& :#n% = B]()# cration des Fid$ets esclaves :n% = Ins(#n%,g='!'] g'y',hght=200,;!th=200)n%.p](s!=6?B)ou% = Yutton(#n%,tt='Qutt'',ommn!=#n%.ut)ou%.p](s!=YGBBG

  • 7/26/2019 apprendre_python3_5

    107/472

    5rogrammes pilots par des vnements H

    !u Agrandisse4 le canevas de manire lui donner une largeur de 800 unit"s et une hauteur deR80% Qodi3ie4 "galement la taille des lignes5 a3in !ue leurs extr"mit"s se con3ondent avec lesbords du canevas%

    G%7 A'oute4 une 3onction drawli ne2 !ui tracera deux lignes rouges en croix au centre ducanevas : l

  • 7/26/2019 apprendre_python3_5

    108/472

    ?tilisation de #entres et de graphismes

    m"thodes associ"es ces classes 9"galement avec leurs paramtres% *aisse4 de la place pourcompl"ter ult"rieurement%

    +xemple graphi"ue : deux dessins altern!s

    (et autre exemple vous montrera comment vous pouve4 exploiter les connaissances !ue vous ave4ac!uises pr"c"demment5 concernant les boucles5 les listes et les 3onctions5 a3in de r"aliser denombreux dessins avec seulement !uel!ues lignes de code% /l s

  • 7/26/2019 apprendre_python3_5

    109/472

    5rogrammes pilots par des vnements K

    O44, %%5, 20, ''!'P, # Goues O%5, %%5, 20, ''!'P,

    O%00, 95, %5, &pu'p'P, # ne1 O%00, %45, 30, 'pu'p'PP # bouche # on trace tous les cercles l,aide d,une boucle : =0 ;h n()1 # parcours de la liste = OP # chaque lment est lui-mIme une liste '(O0P, O%P, O2P, O3P) += %

    ##### Pro$ramme principal : #############n = B]()n = Ins(#n, ;!th =200, hght =200, g ='o'y')n.p](s! =BGS, p! =5, p!y =5)% = Yutton(#n, tt ='!ssn %', ommn! =#gu'[%)

    %.p](s! =6?B, p! =3, p!y =3)2 = Yutton(#n, tt ='!ssn 2', ommn! =#gu'[2)2.p](s! =UFT^B, p! =3, p!y =3)#n.mnoop()

    (ommen@ons par analyser le programme principal5 la 3in du script :

    Nous y cr"ons une 3en6tre5 par instanciation d

  • 7/26/2019 apprendre_python3_5

    110/472

    K1 ?tilisation de #entres et de graphismes

    sant% Note4 au passage l

  • 7/26/2019 apprendre_python3_5

    111/472

    5rogrammes pilots par des vnements K-

    # E.ercice utilisant la biblioth+que $raphique t

  • 7/26/2019 apprendre_python3_5

    112/472

    KG ?tilisation de #entres et de graphismes

    *e corps du programme principal contient la phase d

  • 7/26/2019 apprendre_python3_5

    113/472

    5rogrammes pilots par des vnements K

    le type d

  • 7/26/2019 apprendre_python3_5

    114/472

    KM ?tilisation de #entres et de graphismes

    de programmation importants, tels ceux de classe et dob9et. 5euillez donc consulter lalittrature /oir page17- si /ous sou"aitez da/antage de prcisions.

    /l existe 8 classes de base pour les &idgets t$inter :

    Widget Description

    *utton +n bouton classi,ue - utiliser pour provo,uer l.ex!cution d.une commande,uelcon,ue'

    /anvas +n espace pour disposer divers !l!ments graphi,ues' /e widget peut 0treutilis! pour dessiner cr!er des !diteurs graphi,ues et aussi pour impl!menterdes widgets personnalis!s'

    /heckbutton +ne case - cocher ,ui peut prendre deux !tats distincts la case est coch!e ounon2' +n clic sur ce widget provo,ue le changement d.!tat'

    (ntry +n champ d.entr!e dans le,uel l.utilisateur du programme pourra ins!rer un

    texte ,uelcon,ue - partir du clavier'Frame +ne surface rectangulaire dans la fen0tre o3 l.on peut disposer d.autres

    widgets' /ette surface peut 0tre color!e' (lle peut aussi 0tre d!cor!e d.unebordure'

    4abel +n texte ou libell!2 ,uelcon,ue !ventuellement une image2'

    4istbox +ne liste de choix propos!s - l.utilisateur g!n!ralement pr!sent!s dans unesorte de bo5te' 6n peut !galement configurer la 4istbox de telle mani7re,u.elle se comporte comme une s!rie de 8 boutons radio 9 ou de cases -cocher'

    :enu +n menu' /e peut 0tre un menu d!roulant attach! - la barre de titre ou bienun menu 8pop up9 apparaissant n.importe o3 - la suite d.un clic'

    :enubutton +n bouton;menu - utiliser pour impl!menter des menus d!roulants'

    :essage adiobutton >epr!sente par un point noir dans un petit cercle2 une des valeurs d.unevariable ,ui peut en poss!der plusieurs' /li,uer sur un bouton radio donne lavaleur correspondante - la variable et 8 vide 9 tous les autres boutons radioassoci!s - la m0me variable'

    ?cale Vous permet de faire varier de mani7re tr7s visuelle la valeur d.une variableen d!pla@ant un curseur le long d.une r7gle'

    ?crollbar Ascenseur ou barre de d!filement ,ue vous pouveB utiliser en association avecles autres widgets C /anvas (ntry 4istbox Text'

    Text Affichage de texte format!'

  • 7/26/2019 apprendre_python3_5

    115/472

    ?tilisation de la mthode grid pour contrOler la disposition des widgets KI

    %tilisation de la m!thode grid pour contr1ler la disposition des widgets

    Kus!u

  • 7/26/2019 apprendre_python3_5

    116/472

    K0 ?tilisation de #entres et de graphismes

    Dans ce script5 nous avons donc remplac" la m"thode pac:()par la m"thode grid()% (omme vouspouve4 le constater5 l colonnes : une premire avec les > cha?nes de caractres5 une seconde avecles > champs d

  • 7/26/2019 apprendre_python3_5

    117/472

    ?tilisation de la mthode grid pour contrOler la disposition des widgets KH

    tt% = 6(#n%, tt ='S'm' hmp 1')tt2 = 6(#n%, tt ='on! 1')

    tt3 = 6(#n%, tt ='B'osm 1')nt'% = ?nt'y(#n%)nt'2 = ?nt'y(#n%)nt'3 = ?nt'y(#n%)

    # cration d,un Fid$et ,*anvas, contenant une ima$e bitmap :n% = Ins(#n%, ;!th =%0, hght =%0, g =';ht')photo = ShotoFmg(# ='m'tn[p.g#')tm = n%.'t[mg(80, 80, mg =photo)

    # )ise en pa$e l,aide de la mthode ,$rid, :tt%.g'!('o; =%, st]y =?)tt2.g'!('o; =2, st]y =?)tt3.g'!('o; =3, st]y =?)nt'%.g'!('o; =%, oumn =2)

    nt'2.g'!('o; =2, oumn =2)nt'3.g'!('o; =3, oumn =2)n%.g'!('o; =%, oumn =3, 'o;spn =3, p! =%0, p!y =5)

    # dmarra$e :#n%.mnoop()

    Pour pouvoir 3aire 3onctionner ce script5 il vous 3audra probablement remplacer le nom du 3ichierimage 9martin\p.gi# par le nom d

  • 7/26/2019 apprendre_python3_5

    118/472

    K ?tilisation de #entres et de graphismes

    Jn pourrait tout aussi bien num"roter : 85 05 85 0%%% puis!ue t$inter ignore les lignes et lescolonnes vides% Num"roter partir de l augmente probablement la lisibilit" de notre code%

    7% *es arguments utilis"s avec grid()pour positionner le canevas :n%.g'!('o; =%, oumn =3, 'o;spn =3, p! =%0, p!y =5)

    *es deux premiers arguments indi!uent !ue le canevas sera plac" dans la premire ligne de latroisime colonne% *e troisime 9'o;spn =3 indi!ue !u

  • 7/26/2019 apprendre_python3_5

    119/472

    'omposition d)instructions pour crire un code plus compact KK

    n

  • 7/26/2019 apprendre_python3_5

    120/472

    -11 ?tilisation de #entres et de graphismes

    *e script ci-dessous intgre les simpli3ications !ue nous venons d

  • 7/26/2019 apprendre_python3_5

    121/472

    (odi#ication des proprits d)un ob,et P Animation -1-

    # *ration du Fid$et principal %matre& :#n% = B]()

    #n%.tt("?' !'nmton t]nt'")# cration des Fid$ets esclaves :n% = Ins(#n%,g='!'] g'y',hght=300,;!th=300)o% = n%.'t[o(%,y%,%+30,y%+30,;!th=2,#=''!')n%.p](s!=6?B)Yutton(#n%,tt='Qutt'',ommn!=#n%.ut).p](s!=YGBBG

  • 7/26/2019 apprendre_python3_5

    122/472

    -1G ?tilisation de #entres et de graphismes

    G%7 Extension du programme ci-dessus% 1aire appara?tre un troisime astre5 et a33icher enpermanence la 3orce r"sultante agissant sur chacun des trois 9en e33et : chacun subit enpermanence l

  • 7/26/2019 apprendre_python3_5

    123/472

    (odi#ication des proprits d)un ob,et P Animation -1

    Qarche#arr6tf pour cela% Des , "ti!uettes 2 doivent a33icher en permanence les tensions etintensit"s r"sultant des choix e33ectu"s par l

  • 7/26/2019 apprendre_python3_5

    124/472

    -1M ?tilisation de #entres et de graphismes

    ou3.p]()# dmarra$e du rceptionnaire d,vnements %boucle principale& :

    #n%.mnoop()

    *a seule nouveaut" mise en Yuvre dans ce script se trouve tout la 3in de la d"3inition de la 3onctionmo"e(): vous y notere4 l

  • 7/26/2019 apprendre_python3_5

    125/472

    Animation automatique P Jcursivit -1I

    G%R Qodi3ie4 le programme de manire obtenir d

  • 7/26/2019 apprendre_python3_5

    126/472

  • 7/26/2019 apprendre_python3_5

    127/472

    8K(anipuler des #ichiers

    "usqu) prsent! les programmes que nous avons raliss ne traitaient qu)un tr+s petit nombre dedonnes. Eous pouvions donc chaque #ois inclure ces donnes dans le corps du programme

    lui=mme Rpar exemple dans une listeS. 'ette #aQon de procder devient cependant tout #aitinadquate lorsque l)on souhaite traiter une quantit d)in#ormations plus importante.

    %tilit! des fichiers/maginons par exemple !ue nous voulions "crire un petit programme exerciseur !ui 3asse appara?tre l

  • 7/26/2019 apprendre_python3_5

    128/472

    -1 (anipuler des #ichiers

    st = O"Qu nu @poon N at'oo $", "Iommnt t'!ut-on n#o'mtu n ngs $",

    "Qu st #o'mu hmu !u mthn $", ... t ...P

    Jn peut en e33et extraire n

  • 7/26/2019 apprendre_python3_5

    129/472

  • 7/26/2019 apprendre_python3_5

    130/472

    --1 (anipuler des #ichiers

    Les deux formes dimportation

    *es lignes d>> 'p[ou' = os.gt;!()>>> p'nt 'p[ou'I1CSython22Csss

    *a premire ligne de cet exemple importe l

  • 7/26/2019 apprendre_python3_5

    131/472

    Les deux #ormes d)importation ---

    brer l oh' = opn('>> oh'.;'t('YonHou', #h' ')

    >>> oh'.;'t("Qu u tmps, uHou'!'hu ")>>> oh'.os()>>>

    $otes

    *a premire ligne cr"e l

  • 7/26/2019 apprendre_python3_5

    132/472

    --G (anipuler des #ichiers

    *a m"thode write()r"alise l>> p'nt(t)YonHou', #h' Qu u tmps, uHou'!'hu >>> o#.os()

    (omme on pouvait s o# = opn('>> o# = opn('>> p'nt(t)YonHou'>>> t = o#.'!(%5)>>> p'nt(t), #h' Qu

    )

  • 7/26/2019 apprendre_python3_5

    133/472

    Lecture squentielle d)un #ichier --

    >>> t = o#.'!(%000)>>> p'nt(t)

    u tmps, uHou'!'hu

    )i la 3in du 3ichier est d"' atteinte5 read()renvoie une cha?ne vide :>>> t = o#.'!()>>> p'nt(t)

    N>> o#.os()

    6ans tout ce 3ui prc0de, nous a/ons admis sans explication 3ue les c"a;nes decaract0res taient c"anges telles 3uelles entre linterprteur P(t"on et le fic"ier.

  • 7/26/2019 apprendre_python3_5

    134/472

    --M (anipuler des #ichiers

    luer par une simple constante5 et vous save4 "galement8R!ue l 1 '] --- nst'utons !'ss --- # on!ton 3>1 ']

    t.

    Dans notre 3onction copieDichier()5 il est 3acile de voir !ue l et 88% *esoctets de valeur in3"rieure > correspondent des codes de contrle des anciens t"l"types et ne peuventg"n"ralement pas 6tre repr"sent"s par des caractres%8G )uivant le systme dexploitation utilis"5 le codage correspondant au mar!ueur de 3in de ligne peut 6tredi33"rent% )ous Oindo&s5 par exemple5 il sagit dune s"!uence de deux octets 9retour chariot et saut deligne5 alors !ue dans les systmes de type .nix 9comme *inux il s agit dun seul saut de ligne5 Qac J) poursa part utilisant un seul retour chariot% En principe5 vous nave4 pas vous pr"occuper de ces di33"rences%*ors des op"rations d"criture5 Python utilise la convention en vigueur sur votre systme d exploitation% Pour

    la lecture5 Python interprte correctement chacune des trois conventions 9!ui sont donc consid"r"es comme"!uivalentes%

  • 7/26/2019 apprendre_python3_5

    135/472

    ichiers texte --I

    Note4 bien le mar!ueur de 3in de ligne Hnins"r" dans les cha?nes de caractres5 aux endroits oB l> # = opn('h'tt',''')>>> t = #.'!n()>>> p'nt(t)I st gn un>>> p'nt(#.'!n())Zo gn !u

    *a m"thode readlines()trans3re toutes les lignes restantes dans une liste de cha?nes :>>> t = #.'!ns()>>> p'nt(t)O'Zo gn t'osCn', 'Zo gn ut'Cn'P>>> #.os()

    ,emar"ues

    *a liste appara?t ci-dessus en 3ormat brut5 avec des apostrophes pour d"limiter les cha?nes5 et lescaractres sp"ciaux sous leur 3orme conventionnelle% ;ous pourre4 bien "videmment parcourircette liste 9 l

  • 7/26/2019 apprendre_python3_5

    136/472

    --0 (anipuler des #ichiers

    Pour appeler cette 3onction5 vous deve4 utiliser deux arguments : le nom du 3ichier original5 et le nomdu 3ichier destin" recevoir la copie 3iltr"e% Exemple :

    #t'('tst.tt', 'tst[#.tt')

    +nregistrement et restitution de variables diverses*G% Qais la !uestionn>> = 5>>> = 2.83>>> = 7>>> # = opn('>> #.;'t(st'())>>> #.;'t(st'())

    >>> #.;'t(st'())>>> #.os()>>> # = opn('>> , , = 27, %2.9, O5, 4.83, "Un"P>>> # =opn(&!onns[tst&, &;&)>>> p].!ump(, #)>>> p].!ump(, #)>>> p].!ump(, #)>>> #.os()>>> # = opn(&!onns[tst&, &'&)>>> H = p].o!(#)>>> ] = p].o!(#)>>> = p].o!(#)>>> p'nt(H, typ(H))

    8F En anglais5 le termepic%lesigni3ie , conserver 2% *e module a "t" nomm" ainsi parce !u il sert e33ectivement enregistrer des donn"es en conservant leur type%

  • 7/26/2019 apprendre_python3_5

    137/472

    $nregistrement et restitution de variables diverses --H

    27 ss &nt&>>>> p'nt(], typ(]))

    %2.9 ss ot&>>>> p'nt(, typ())O5, 4.83, &Un&P ss &st&>>>> #.os()

    (omme vous pouve4 le constater dans ce court exemple5 le module pic%lepermet d p'nt(55/0)b'oRson?''o'1 nt !son o' mo!uo y M'o

    6autres informations complmentaires sont affic"es, indi3uant notamment 3uelendroit du script lerreur a t dtecte, mais nous ne les reproduisons pas ici.

    *e message d

  • 7/26/2019 apprendre_python3_5

    138/472

    -- (anipuler des #ichiers

    .n m"canisme de ce type s

  • 7/26/2019 apprendre_python3_5

    139/472

    2estion des exceptions : les instructions tr P except P else --K

    F% (onsid"rons !ue vous ave4 votre disposition un 3ichier texte contenant des phrases dedi33"rentes longueurs% crive4 un script !ui recherche et a33iche la phrase la plus longue%

    F%> crive4 un script !ui g"nre automati!uement un 3ichier texte contenant les tables demultiplication de >0 9chacune d

  • 7/26/2019 apprendre_python3_5

    140/472

  • 7/26/2019 apprendre_python3_5

    141/472

    - "mon!"1p = "sut"

    s1p = "s on#on! "

    p'nt("6 mot", mot, p, " mot &mon!& !ns &o'!' phtu")

    (es comparaisons sont possibles5 parce !ue dans toutes les normes d5 les cha?nes de caractres 9donn"es de type string sont d"sormais des cha?nes.nicodeR5ce !ui signi3ie !ue les identi3iants num"ri!ues de leurs caractres sont uni!ues 9il ne peutexister !u

  • 7/26/2019 apprendre_python3_5

    148/472

    -G Appro#ondir les structures de donnes

    tres5 on put l

  • 7/26/2019 apprendre_python3_5

    149/472

    Le point sur les chaNnes de caract+res -GK

    Nous verrons un peu plus loin dans ce chapitre !u

  • 7/26/2019 apprendre_python3_5

    150/472

    -1 Appro#ondir les structures de donnes

    >>> hn = "Wm t ?ugnCn">>> o# =opn("tst.tt", ";")

    >>> o#.;'t(hn)%7>>> o#.os()

    Avec ces !uel!ues lignes5 nous avons enregistr" la cha?ne de caractres chainesous la 3orme d o# =opn("tst.tt", "'") # rb (' mode lecture %r& binaire %b&>>> otts =o#.'!()>>> o#.os()>>> typ(otts)ss &yts&>

    En proc"dant ainsi5 nous ne r"cup"rons donc pas notre cha?ne de caractres initiale5 mais bien satraduction concrte en octets5 dans une donn"e de type btes% Essayons d et W sont repr"sent"s par le caractrecorrespondant du code A)(//%

    (ertains octets de valeur num"ri!ue in3"rieure > sont repr"sent"s de manire conventionnelle5comme le caractre de 3in de ligne%

    *es autres octets sont repr"sent"s par leur valeur hexad"cimale5 pr"c"d"e de C%

    Dans notre exemple5 on voit !ue les caractres non accentu"s de la cha?ne utilis"e ont "t" encod"s

    chacun l

  • 7/26/2019 apprendre_python3_5

    151/472

    Le point sur les chaNnes de caract+res --

    (ette 3ois5 nous voyons trs clairement !u>> n(otts)%9

    *es op"rations d", n %, n mo!u>

    Byp?''o'1 must st', not yts

    Pour enregistrer une s"!uence d

  • 7/26/2019 apprendre_python3_5

    152/472

    -G Appro#ondir les structures de donnes

    *a norme d>> typ(h[')ss &st'&>

    R8 Dans une 3en6tre d

  • 7/26/2019 apprendre_python3_5

    153/472

    Le point sur les chaNnes de caract+res -

    *eparcoursde la cha?ne obtenue nous 3ournit bien des caractres5 cette 3ois :

    >>> #o' n h['1... p'nt(, n! =& &)...W m t ? u g n

    Conversion dune chaBne string en chaBne bytes

    Pour convertir une cha?ne de caractres en une s"!uence d

  • 7/26/2019 apprendre_python3_5

    154/472

    -M Appro#ondir les structures de donnes

    *a techni!ue est simple% /l su33it d>> o#.os()>>> p'nt(otts)&WmC9 t ?ugC8nCn&

    ^ etc%

    H /ous deffectuer di/ers contr8les et essais sur cette s3uence doctets, si /ous lesou"aitez.

    (

    "/us'//python3.%/o!s.py", n 300, n !o!('sut, onsum!) = s#.[u##'[!o!(!t, s#.''o's, #n)

    Ano!Ro!?''o'1 &ut#8& o! n&t !o! yts n poston 2-41n! !t

    *e message d> o# =opn("tst.tt", "'", no!ng ="6tn-%")>>> h[u =o#.'!()>>> o#.os()>>> h[u&Wm t ?ugnCn&

    Dans les scripts "labor"s5 il sera probablement tou'ours pr"3"rable de pr"ciser l

  • 7/26/2019 apprendre_python3_5

    155/472

    Le point sur les chaNnes de caract+res -I

    di33"rentes normes% A3in !ue Python puisse les interpr"ter correctement5 il vous est conseill" d

  • 7/26/2019 apprendre_python3_5

    156/472

    -0 Appro#ondir les structures de donnes

    Wpht g' (mnusu) 1 EFGHIJKLMNOPQRS TUVWXYZ[\

    Exercices0%7 crive4 un petit script !ui a33iche une table des codes A9';;% *e programme doit a33icher tous

    les caractres en regard des codes correspondants% partir de cette table5 "tablisse4 la relationnum"ri!ue simple reliant cha!ue caractre ma'uscule au caractre minuscule correspondant%

    0%8 Qodi3ie4 le script pr"c"dent pour explorer les codes situ"s entre G et 8R5 oB vousretrouvere4 nos caractres accentu"s 9parmi de nombreux autres% *a relation num"ri!uetrouv"e dans l

  • 7/26/2019 apprendre_python3_5

    157/472

    Le point sur les chaNnes de caract+res -H

    >>> 4.spt(",")O'It mp', " p'm !'ut's", 'put no' s'''P

    join(liste) : rassemble une liste de cha?nes en une seule 9cette m"thode e33ectue donc l> =O"Yt", "N", "mng'", "!u", "#on"P> >> p'nt(" ".Hon())Yt N mng' !u #on>>> p'nt("---".Hon())Yt---N---mng'---!u---#on

    #ind(sch) : cherche la position d>> h% = "Itt Lon ut n un #'omg, sns !out $"

    >>> h2 = "#'omg">>> p'nt(h%.#n!(h2))25

    count(sch) : compte le nombre de sous-cha?nes schdans la cha?ne :>>> h% = "6 h'on u ong mmnh !'un ong ou">>> h2 = 'ong'>>> p'nt(h%.ount(h2))2

    lower() : convertit une cha?ne en minuscules :>>> h = "I6F h ="'t 'n s 'onu">>> p'nt(h.tt())W't Un s Z'onu

    capitali;e() : variante de la pr"c"dente% (onvertit en ma'uscule seulement la premire lettre de lacha?ne :

    >>> 3 = "u u tmps, uHou'!hu ">>> p'nt(3.ptM())"Qu u tmps, uHou'!hu "

    swapcase() : convertit toutes les ma'uscules en minuscules5 et vice-versa :>>> h = "6 6' ?t 6 Bo'tu">>> p'nt(h.s;ps())? FiZU? B W tGUBA?

    strip() : enlve les espaces "ventuels au d"but et la 3in de la cha?ne :>>> h = "

  • 7/26/2019 apprendre_python3_5

    158/472

    - Appro#ondir les structures de donnes

    >>> h8 = " n'st to 'st !on ton #''">>> p'nt(h8.'p(" ","*"))

    **n'st*to*'st*!on*ton*#'' inde(car) : retrouve l>> h9 ="So'tM u ;hs]y u Hug on! u #um">>> p'nt(h9.n!(";"))%

    Dans la plupart de ces m"thodes5 il est possible de pr"ciser !uelle portion de la cha?ne doit 6tre trait"e5en a'outant des arguments suppl"mentaires% Exemples :

    >>> p'nt (h9.n!("")) # cherche partir du dbut de la chane4 # et trouve le premier ,e,>>> p'nt (h9.n!("",5)) # cherche seulement partir de l,indice 68 # et trouve le second ,e,>>> p'nt (h9.n!("",%5)) # cherche partir du caract+re nA 3629 # et trouve le quatri+me ,e,

    Etc%

    (omprene4 bien !u

  • 7/26/2019 apprendre_python3_5

    159/472

    Le point sur les chaNnes de caract+res -K

    cha?ne de caractres complexe partir d>> p =3.%4%>>> ' =4.7>>> h ="6' !un !su ! 'yon l st g N l.">>> p'nt(h.#o'mt(', p * '**2))

    6' !un !su ! 'yon 4.7 st g N 9.397944.

    *es balises peuvent contenir des num"ros d>> ph's ="6l0 hnl0 ol% t l0 htl0 mul%.">>> p'nt(ph's.#o'mt("", ""))6 hn o t ht mu.>>> p'nt(ph's.#o'mt("s", "nt"))6s hns ont t s hts munt.

    *es balises peuvent aussi contenir des indications de 3ormatage 9en con'onction ou non avec desnum"ros d> h ="6&' !&un !su ! 'yon l st g N l18.2#."

  • 7/26/2019 apprendre_python3_5

    160/472

    -M1 Appro#ondir les structures de donnes

    >>> p'nt(h.#o'mt(', p * '**2))6&' !&un !su ! 'yon 4.7 st g N 9.40.

    >>> h ="6&' !&un !su ! 'yon l0 st g N l%1.2.">>> p'nt(h.#o'mt(', p * '**2))6&' !&un !su ! 'yon 4.7 st g N .94+0%.

    Dans le premier essai5 le r"sultat est 3ormat" de manire comporter un total de G caractres5dont chi33res aprs le point d"cimal% Dans le second5 le r"sultat est pr"sent" en notationscienti3i!ue 9+0%signi3ie x 00% ;euille4 constater au passage !ue les arrondis "ventuels sonte33ectu"s correctement%

    *a description complte de toutes les possibilit"s de 3ormatage comporterait plusieurs pages5 et celasortirait largement du cadre de ce livre% )%0 utilisaient une techni!ue de 3ormatage l"grementdi33"rente et un peu moins "labor"e5 !ui reste encore utilisable% /l est cependant 3ortement conseill"

    d>> ou ="'t">>> tmp = %.347 + %5.9>>> p'nt ("6 ouu' st s t tmp'tu' ut s I" (ou, tmp))6 ouu' st 't t tmp'tu' ut %7.247 I

    *a balise s'oue le m6me rle !ue ldans la nouvelle techni!ue% Elle accepte n

  • 7/26/2019 apprendre_python3_5

    161/472

    Le point sur les chaNnes de caract+res -M-

    0% ;ariante de l

  • 7/26/2019 apprendre_python3_5

    162/472

    -MG Appro#ondir les structures de donnes

    >>> p'nt(nom'sO2P)%0

    >>> p'nt(nom'sO%13P)O38, %0P>>> p'nt(nom'sO213P)O%0P>>> p'nt(nom'sO21P)O%0, 25P>>> p'nt(nom'sO12P)O5, 38P>>> p'nt(nom'sO-%P)25>>> p'nt(nom'sO-2P)%0

    *es exemples ci-dessus devraient attirer votre attention sur le 3ait !u>> nom'sO%7, 38, %0, 25P

    Dans l stu##O3PO%P = "Fs">>> stu##O5000, 'Y'gtt', 3.%4%5999999999999, O'W't', 'Fs', %947PP

    (omme c

  • 7/26/2019 apprendre_python3_5

    163/472

    Le point sur les listes -M

    O%0, %7, 25, 38, 72, %2P

    >>> nom's.''s() # inverser l,ordre des lments>>> nom'sO%2, 72, 38, 25, %7, %0P

    >>> nom's.n!(%7) # retrouver l,inde. d,un lment4

    >>> nom's.'mo(38) # enlever %effacer& un lment>>> nom'sO%2, 72, 25, %7, %0P

    En plus de ces m"thodes5 vous dispose4 encore de l> ! nom'sO2P

    >>> nom'sO%2, 72, %7, %0P>>> ! nom'sO%13P>>> nom'sO%2, %0P

    Note4 bien la di33"rence entre la m"thode remo"e()et l5 85 W5 5 >5 W5 F 9ces nombres seront plac"s au d"part dans une listesous la 3orme d0 )oit la liste suivante : OVn-

  • 7/26/2019 apprendre_python3_5

    164/472

    -MM Appro#ondir les structures de donnes

    de la semaine5 une liste des noms des mois5 et une liste des nombres de 'ours !ue comportentchacun des mois 9ne pas tenir compte des ann"es bissextiles%Exemple de sortie :Hu! % Hn' n!'! 2 Hn' sm! 3 Hn' !mnh 4 Hn'

    %%% et ainsi de suite5 'us!u> mots = O'Hmon', '#'omg', 'on#tu'', 'hoot'P>>> motsO212P =O"m"P>>> motsO'Hmon', '#'omg', 'm', 'on#tu'', 'hoot'P

    >>> motsO515P =O'susson', ']thup'P>>> motsO'Hmon', '#'omg', 'm', 'on#tu'', 'hoot', 'susson', ']thup'P

    Pour utiliser cette techni!ue5 vous deve4 prendre en compte les particularit"s suivantes :

    )i vous utilise4 l

  • 7/26/2019 apprendre_python3_5

    165/472

    Le point sur les listes -MI

    >>> motsO%1P = O'myonns', 'pout', 'tomt'P

    >>> motsO'Hmon', 'myonns', 'pout', 'tomt'P

    la premire ligne de cet exemple5 nous rempla@ons la tranche j:8k par une liste vide5 ce !uicorrespond un e33acement%

    la !uatrime ligne5 nous rempla@ons une tranche par un seul "l"ment% Note4 encore une 3ois !uecet "l"ment doit lui-m6me 6tre , pr"sent" 2 comme une liste%

    la Weligne5 nous rempla@ons une tranche de deux "l"ments par une autre !ui en comporte >%

    Cr!ation dune liste de nombres ? laide de la fonction rangeFG

    )i vous deve4 manipuler des s"!uences de nombres5 vous pouve4 les cr"er trs ais"ment l>> st('ng(%0))O0, %, 2, 3, 4, 5, , 7, 8, 9P

    *a 3onction range()g"nre par d"3aut une s"!uence de nombres entiers de valeurs croissantes5 etdi33"rant d st('ng(5,%3))O5, , 7, 8, 9, %0, %%, %2P>>> st('ng(3,%,3))O3, , 9, %2, %5P

    )i vous ave4 du mal assimiler l>> st('ng(%0, -%0, -3))O%0, 7, 4, %, -2, -5, -8P

    arcours dune liste ? laide de for= rangeFG et lenFG

    *

  • 7/26/2019 apprendre_python3_5

    166/472

    -M0 Appro#ondir les structures de donnes

    >>> p'o = O'6',''son','!u','pus','#o't','st','touHou's','','mu''P>>> #o' mot n p'o1

    ... p'nt(mot, n! =& &)...6 'son !u pus #o't st touHou's mu'

    )i vous voule4 parcourir une gamme d> #o' n n 'ng(%0, %8, 3)1... p'nt(n, n**2, n**3)...%0 %00 %000%3 %9 2%97% 25 409

    /l est trs prati!ue de combiner les 3onctions range()et len()pour obtenir automati!uement tous lesindices d>> #o' tm n !'s1... p'nt(tm, typ(tm))...

    3 ss 'nt'>%7.25 ss '#ot'>O5, 'Vn'P ss 'st'>6nu s not an!oM ss 'st''>

    Dans l

  • 7/26/2019 apprendre_python3_5

    167/472

    Le point sur les listes -MH

    >>> #'uts + gumsO'o'ng', 't'on', 'po'u', 'ognon', 'tomt'P

    >>> #'uts * 3O'o'ng', 't'on', 'o'ng', 't'on', 'o'ng', 't'on'P

    *>> spt[M'os = O0P*7>>> spt[M'osO0, 0, 0, 0, 0, 0, 0P

    )upposons par exemple !ue vous voule4 cr"er une liste ?!ui contienne le m6me nombre d # n gums1... p'nt('Ge')...Ge

    Copie dune liste

    (onsid"rons !ue vous dispose4 d>> ph's = #

    En proc"dant ainsi5 sache4 !ue vous ne creV pas une vritable copie% la suite de cette instruction5 iln>> ph's = #>>> #O4P ='ss'>>> ph'sO'V', 'p', 'ms', 'n', 'ss', 'pont'P

    )i la variable phrasecontenait une v"ritable copie de la liste5 cette copie serait ind"pendante de l

  • 7/26/2019 apprendre_python3_5

    168/472

    -M Appro#ondir les structures de donnes

    Nous verrons plus tard lG Q6me !uestion5 mais autre suggestion : cr"e4 d

  • 7/26/2019 apprendre_python3_5

    169/472

    Le point sur les listes -MK

    0%70 ?n nombre premier est un nombre qui n)est divisible que par un et par lui=mme % crive4 unprogramme !ui "tablit la liste de tous les nombres premiers compris entre et 0005 enutilisant la m"thode du crible d)$ratosth+ne: (r"e4 une liste de 000 "l"ments5 chacun