Home
éléments de programmation - IED - Institut d`Enseignement à Distance
Contents
1. tai aida 11 0 6 pour commencer avec le 1 11 D donn es l mentaires mnt 13 1 0 pr liminaires culturels an one 14 programmer c est QUO Y 14 langages de programmation ones 14 langue naturelle langage formel n p000 0000 000000000 15 combien existe t il de langages de programmation 15 LN PYTON 16 valuation en mode interactif e 16 premiers pas ee 16 symboles et valuation nent 17 documentation d un programme nn 18 1 2 application TODIGHOfIS eee 21 types de AS 21 type des Variables reee 21 1 3 m canique de l valuation ttu 22 2 manipulation de s quences mn 25 2 1 cha nes de caract res et index 26 2 2 d finition de arti a ae aerate se 27 2 3 distinguer le vrai du TAUX 30 TN Se 32 it ration sur une s quence 33 g om trie it ratiVe MN EE 36 2 5 notion de m thode laser nn 37 SEQUENGes asas RR Nn e A Pr dicatS nou nee eR L 70 T6 S ON MN NRI NR aa A N EFANONS objets
2. 109 111 149 la ou 42 So 137 140 JOO 62 64 93 VE 59 61 64 72 oz Ml es en ace een 67 DODO 109 110 122 149 v a f ES aa en 109 110 149 FAMAT 146 read m HQ 66 88 93 95 138 140 66 qe m 136 137 140 cuc c A 110 149 cci 51 96 M 82 84 122 126 Pew RO a de ce te 47 60 ASS A MN 72 WIEC UP 66 93 module ENT 109 145 Se 77 84 OS nn 146 147 eve T 67 eo e 59 f Tale opo EP RT PT 122 146 mer 48 52 96 140 144 145 Tkinter 74 76 78 80 82 84 111 119 122 126 9 11 37 STA o 95 96 99 Mm cru 66 67 88 91 93 96 138 140 OVA e HOO 33 34 134 135 84 85 random TR 146 ee 64 137 140 D 66 119 WON ana
3. 7 on TK qui utilisent le module tkinter en minuscules notez la diff rence cod lui module en ANSI C scripts tk 4 tk Ce tkinter utilise le module de biblioth que itk galement compile partir de sources en ANSI C et en TCL et qui s appuient sur les ressources de tk compil partir de code ANSI C b c te Quant tk il exploite les ressources du module de biblioth que xlib lui aussi Jl ansi c cod en ANSI C un chapitre entier du cours 213 sera consacr cette technique pour interfacer diff rents langages de scripts et des modules i xo Jj ansie compil s de biblioth que Hemarquez que est un langage orient objet et que c est lui qui permet Tkinter d organiser notre syst me de wIDGETS raccourci pour WINDOW GADGETS de facon hi rarchique ce module Tkinter doit tre import avant de pouvoir tre exploit c est pourquoi la 1 ligne de nos scripts est toujours from Tkinter import partir de l une expression comme fen tre Tk cr e une instance de la classe Tk nomm e fen tre qui se r alise comme un conteneur une fen tre qui va servir contenir tous les autres widgets dont je pourrais avoir besoin pour construire mon interface Ensuite selon les besoins je cr erai des objets de type Frame eux aussi des conteneurs ou des instances de la classe Canvas qui est la seule connaitre des m thod
4. amp 0x62 nand A amp data Jere nand TA 117 1 0x00 load 0x407 toad tA data 1 1 xC0 lead A dataldatal Ji ly 0x48 store date AT bales store data datal Jl 2 0x49 in datal input val 2 2715 xcos Tug data datal I 7 3 Dx4dls out print 11 Tout TE print dataldacal Ji Oxi Fl Trn if 2 lt Dx PO IS pre GE not A PC La cl d acc s est le code d op ration et la valeur est une liste de 2 l ments le mn monique de l opcode et l instruction PYTHON proprement dite Pour le moment seule cette derni re nous int resse et elle pose deux probl mes 1 comment remplacer le symbole par quelque chose d valuable 2 comment ex cuter l instruction Prenons l exemple de l exercice 13 9 et supposons que le code machine soit charg en m moire donc que data 0x50 0x52 retourne la liste 49 70 c est dire les deux premiers octets de code e a cl 0x49 dans opcode table nous extrait in data _ input VAL dont nous ne garderons que le 2 l ment data input VAL invoquer la m thode replace _ 0x 0 retourne alors data 0x 0 input VAL e etexec data 0x 0 input VAL ex cute l instruction modifiant ainsi
5. en ee 83 5 7 1 dessiner urement a ee eee ne en een tat 00000 83 5 7 2 dessiner une courbe 83 architecture de programmes 87 GDS inima taie rictus cies 90 soie ol m c 93 loose siio p etr X pn E 94 6 4 SOS OT Am irren ouium theil 95 6 4 1 COTE a 95 604 2 COL CENT iesus A me ee tonnes 97 6 4 3 probl mes et solutions 97 6 5 TONI a tts gno s bC dde ean c 100 CD infrastructures logicielles 103 7 1 du conceptuel la mise en oeuvre 104 7 2 structures de dorii685 uiis asas min 105 7 3 structures de Contr le ennemies bao utn Givi 106 cR C RS 107 m canisme d h ritage 107 interfaces graphiques 110 7 5 strates logicielles 112 prototypage d applications 115 8 1 affichage par segments acct 117 Bal B ecu up uu LLL LE LL 117 faiSsabilt E ene anny IRR RETRO 118 scpt complet RR 119 CO SIDE nn 119 8 2 D ete 120 analyse du probl me pA EU anne 120 faisabilit yet ne de nue 121 Script complet ERN lette triiec i 122 remarques m T 122
6. E I sets etes arene 68 r flexions 71 5 interfaces fen tres et boutons 79 6 architecture de programmes 87 infrastructures logicielles sese osea net 103 brototypage d applications node eee 115 9 I ls Lr 143 Se 168 COS SAS ee 171 table des mati res wise unes deca were deed eed dada RC a E Deni dete weed deen wee Meee eee dx 178 58 FORMES ET TRANSFORMATIONS Techniquement un dictionnaire est un associative array arrangement d associations autrement dit une collection non ordonn e ou chaque l ment est double une cl associ e une valeur une telle collection est delimitee par les symboles et tels que denote un dictionnaire vide la cl et sa valeur sont s par es par le symbole et la valeur peut tre elle m me n importe quel type de donn e y compris un dictionnaire Par exemple boulangerie baguettes 3 croissants 6 Superette yaourts 2 autres trucs 4 Une fois d finie une telle structure on accede a ses elements en utilisant comme cl d index l expression qui precede le deux points gt gt gt superette autres trucs 4 gt gt gt boulangerie croissants 6 Bien entendu ca marche tout pareil avec des variables gt gt gt x boulangerie croissants x y 6 Ce type de donn e corre
7. ee RECEDUNT GRE aac 40 listes acc s NdEX 41 a c DIUEIO uuo occae mettent 45 3 2 programmation fonctionnelle 2000000 ernie 00000 00000 46 programme autonome een neue nes 47 SCOR ia ATARAR NR CN 50 SE e ee ey rud eer eee 50 d codage automatique 51 d codage MANUEL 52 en pratique quM EE 54 4 dictionnaires ACCES par cl mr 57 4 1 exploitation statique 2 60 4 2 exploitation dynamique 2eme 61 Ue 6 p NR a RENE Reon me meee are 61 4 3 1 fichiers open read write 65 4 3 2 fichiers donn es non textuelles 65 4 3 3 fichiers lt pickle a 67 4 3 4 fichiers encore plUS scaena 67 4 4 interpr tation en ns me 68 3115541610 lt ni cms nie cl d 5 interfaces fen tres et boutons s 73 504 M 5 E 74 5 2 DURON emer eer eee are Meme io SS ONUY Tcp do 76 9 9 CANVAS 5 5 1 create _oval ces unset indir franca 79 5 5 2 _ 5 80 5 6 animation de Sprites eee cece tiled 81 5 7 graphes de fonctiONS
8. A A E 168 elei E 171 table des mati res ta date aoa ric duc nec aa D GR a 178 88 FORMES ET TRANSFORMATIONS L indexation de textes joue un r le consid rable dans l industrie de la langue c est a technologie fondamentale des SPIDERS ces programmes qui parcourent la toile jour et nuit pour rep rer les pages WEB figure tel ou tel mot cl en indexant les pages r f renc es par leur URL ils construisent des bases de donn es qui permettront ensuite GOOGLE YAHOO OU GIGABLAST de cracher en quelques centi mes de seconde des milliers de r f rences sur un sujet donn Cette m me technologie est galement utilis e pour construire l index qu on trouve la plupart du temps la fin des ouvrages de r f rence bien videmment dans ce cas l index est local l ouvrage et les pages ne sont r f renc es que par leur num ro Par ailleurs la plupart des programmes de traitement de texte en particulier ceux qui sont orient s ligne diteurs pour programmeur mais aussi interpr tes et compilateurs mettent en uvre cette technologie pour retrouver rapidement quelle ligne une variable ou une fonction a t d finie C est pourquoi je voudrais vous proposer maintenant une r flexion sur la conception d un programme capable de donner la liste de tous les mots d un texte avec en r f rence t
9. La structure des donn es est contrainte par le parenthesage des crochets cette liste a ici 2 elements des listes qui ont chacun 3 l ments le commer ant et deux listes ayant chacune deux l ments un produit et la quantit acheter Maintenant si je veux savoir combien il me fallait de croissants d j il suffit de demander emplettes 0 2 1 6 lt l ment 1 de l l ment 2 de l l ment 0 Et pour les yaourts emplettes 1 1 1 2 lement 1 de l l ment 1 de l l ment 1 Techniquement de telles expressions sont parfaitement utilisables quand on sait d avance quelle position occupe l l ment qui nous int resse on verra plus tard une autre fa on de structurer l information de sorte qu on puisse acc der directement au nombre de croissants Les s quences sont dites it rables il est donc possible d it rer sur une liste de taille et de profondeur quelconque par exemple pour emplettes 2011 11 23 22 10 16 2007 2012 par J Feat 44 FORMES ET TRANSFORMATIONS for commerce in emplettes niveau 1 for com in commerce niveau 2 print com if type com is type niveau 3 for produit n com print produit Remarquez la pr caution de la 4 ligne ce niveau je peux rencontrer des s quences de caract res ou des nombres et seules les premi res en tant que s quences sont it rables le pr dicat v rifie donc qu il s agit bien d une liste avant de de
10. ou encore http UTF unicode transformation format cf lt http unicode org faq utf_bom html gt variable une abstraction un symbole d fini pour repr senter une valeur laquelle est susceptible de 76 JSCRIPT associative array LISP a list PYTHON dictionary 77 en C peut s approximer en utilisant l op rateur switch comme structure de contr le 78 d finie de facon intensionnelle 79 seul le langage machine est absolument non typ ce qui veut dire qu on peut faire ce qu on veut avec ce qu on veut mais C est pas facile 174 varier vecteur s quence de taille fixe de donn es de m me nature ou de m me type ou homog nes c est comme on veut voir cours ELI 113 introduction aux structures de donn es point de vue de la machine 80 les langages fonctionnels vrais manipulent les variables comme des r f rences ce qui permet une variable d avoir comme valeur une variable ventuellement elle m me 11 11 23 22 10 2007 2012 par J Feat GNU FREE DOCUMENTATION LICENSE GNU Free Documentation License Version 1 2 November 2002 2012 Free Software Foundation Inc 51 Franklin St 5 Floor Boston MA 02110 1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document but changing it is not allowed 0 PREAMBLE The purpose of this License is to make a manual textbook or other functional and useful document free in the sen
11. type str gt truc id Dey 854 M La valeur de ma variable truc est donc bien un texte et bien sur telle quelle cette chaine est inutilisable mais regardez type eval truc type dict gt eval truc ceci value la chaine pour en faire un dictionnaire d s 4 amp 4 Voil ce n est pas plus compliqu que ca Du moins tant qu on n crit et ne relit qu une seule valeur correspondant une seule variable Mais comment faire si on veut sauvegarder plusieurs valeurs Imaginons par exemple que je veuille enregistrer les donn es de mon dictionnaire FA et celles de mon dictionnaire AF dans un m me fichier la solution consiste s parer les valeurs l une de l autre en les crivant sur deux lignes distinctes fichier dictionnaires f open fichier w ouverture en mode write f write repr FA Mn notez l ajout du saut de ligne f write repr AF f close Bien videmment je suis le seul savoir ce que ces donn es repr sentent et dans quel ordre elles ont t enregistr es donc le seul pouvoir les relire intelligemment Et pour me faciliter les choses je vais utiliser une autre m thode de lecture elle s appelle readline et ne lit qu une ligne la fois y compris le saut de ligne qui va avec fichier dictionnaires f open fichier r ouverture en mode read FA f raadilinet ligne 1 AF f re amp dlinei ligne 2 f close
12. ea meme ao 91 92 96 gt E E re 136 137 140 e EET 48 96 140 144 145 je AVON e at te nc 11 37 eli 147 getdefaultencoding ERES ER LR RI EA DERE PU x RBS us 52 NEID M 23 146 EEE 128 136 138 140 langage DAS A E E E Tm 160 162 164 165 166 UO eta 166 ipe EE 160 161 e 11 37 147 m thode ADS es cs 42 91 96 109 149 DINGO is Se L E TD EE LEE Ee 77 78 80 122 126 do ad ee m 66 67 88 91 93 96 eel 77 122 COCO OS 81 82 COUNT NER TRENT 51 107 126 create_line 85 119 122 OVAN TEE 80 82 122 126 create polygon 126 create rectangle esses 83 122 create MENU non 85 ee 99 GSS ife V DT 122 dump Nr T 67 1 9 61010 le M 99 cei DRE RER 147 SR 51 96 97 61 63 77 UNO e 126 Nas KGW T 59 63 IOC ce 98 99 EP e
13. Ainsi une utilisation correcte du script plusieurs serait plusieurs clou 5 le nom argv est l abr g de argument vector conventionnellement utilis par les programmeurs C LISTES ACCES INDEXE 49 La liste sys argv contient alors deux elements et l expression len sys argv gt 1 evalue a vrai Comme l l ment 0 ne nous interesse pas nous ne prendrons de la sequence que le 2 element Attention en mode ex cutable un script se fait aussi discret que possible et ne montrera donc aucun r sultat d valuation normalement visibles en mode interactif seul sera visible a la console l effet des instructions print inserees dans le programme Notez que rien ne vous oblige a nommer votre script plusieurs il pourrait s appeler machin chose ou m me abracadabra magic c est comme on veut les linuxeurs pros pr f rent les noms opaques comme plsrs Dans le monde unix les executables n ont pas de suffixe particulier et l usage est de ne pas en mettre du tout que ce soit pour python ou zip aussi bien que plusieurs Un executable se reconnait a ses attributs de fichier cf man ls et on peut aussi utiliser la commande file file plusieurs plusieurs a python script text executable De cette facon on pourrait lister tous les ex cutables mais ca peut prendre du temps find type f exec file grep exec Du fait que la ligne de commande est int gralement recopi e dans la liste sys argv i
14. e La deuxi me commande cd truc ne peut tre ex cut e que si le dossier truc est directement visible depuis la position courante de la m me fa on dans une fen tre repr sentant les dossiers par des icOnes on ne peut double cliquer pour les ouvrir que les dossiers visibles Imaginons une structure arborescente comme ci contre ou chaque boite repr sente un dossier ou r pertoire ou directory On peut cr er une telle structure en utilisant la commande mkdir make directory suivie du nom du directory dossier qu on veut cr er Par exemple depuis le directory B les commandes mkdir e et mkdir f ont fabriqu les deux sous dossiers e et Note nous utiliserons d sormais indiff remment le terme technique directory ou son quivalent fran ais r pertoire ou son quivalent grand public non technique dossier sachant qu ils d signent exactement la m me chose Remarquez que le n ud l origine de l arborescence tout en haut sur le diagramme porte un nom un peu sp cial on le d signe par le symbole En fait il ne porte pas vraiment de nom ce symbole repr sente de fa on absolue le noeud racine de l arborescence et permet de sp cifier de facon non ambigu un chemin dans cette arborescence Un chemin absolu est la sp cification d une s quence de dossiers visiter partant de la racine pour parvenir en un autre point de l arbre par exemple A b indique une certaine route
15. A dataldatal 1 15 2 nand A amp data data JJ def simul new for seg in boot strap loader new segment table seg read hexcode seq 11 load image seg ran segment oIIset new def read nexcode segment new f open paper s hexcode segment file name text f read split if text 0 offset new offset eval Ox text 1 if text 2 code new code eval Ox x for x in text 3 return new def load image name segment name Offset segment offset code segment code fame for x in range len dataloffset x code x def run PC A 0 while True prince PCs S031 At 0343 PC A arg data PCIPC Z PC 2 acode opcode table es I9 xpress opcode Ltebleloplll replace SEr arg print s i t ts t 5 acode arg xpress step exec xpress def step k raw input command processing while k isdigit memory dump print ky Er data int Kk k raw input 7 der segment offser name return segment Ltablelnamell oPrsset def segment code Tame return segment table name l code from sys import argv if len argv is 1 exit manque else Simul argv 1 le nom du fichier muler PROTOTYPAGE D APPLICATIONS 141 EXTENSIBILIT Un probl me sournois se pose du fait qu on mule un processeur 8 bits avec un langage qui en interne repr sente les valeurs enti
16. On comprend qu on puisse cliquer sur un bouton pour d clencher une action k mais comment l interpr te sait il que c est l qu on a cliqu et pas ailleurs Dans un but exp rimental imaginez une application o la fen tre enti re serait une zone sensible aux clics de la souris chaque clic de souris dans cette zone constitue un v nement capable de d clencher l appel d une fonction qui recevra les coordonn es de cet v nement 56 68 e pour mettre ceci en vidence je vais mat rialiser par sa couleur un conteneur Frame cr dans le conteneur fen tre e et pour v rifier ou j ai clique j afficherai l abscisse et l ordonn e du clic juste en dessous dans un label B clicks lice def position click afficheur text s from Tkinter import top Tk zone Frame top width 200 height 150 bg bisque zone bind Button 1 position zone pack afficheur Label top afficheur pack top mainloop La fen tre top contient donc ici deux widgets e zone d limite la zone cliquable e afficheur n est l que pour afficher les coordonn es du clic Le widget zone dont les dimensions sont fix es par les param tres width et height d finit une association entre le bouton gauche de la souris et une fonction position qui de ce fait ne gere que les v nements provoqu s par le bouton gauche Remarquez que la fonction position doit d j exister au momen
17. ainsi s est maintenant associ 2 J ai rajout deux autres instructions pour clarifier le r sultat mais le fait est qu la fin du traitement le dictionnaire occurrences est la donn e de as By p r 2p Bs X Ms dJ px16 1 coder un programme similaire pour calculer le nombre d occurrences des caract res du mot anticonstitutionnellement px16 2 coder la m me chose mais sous la forme d une fonction un argument un mot qui retourne un nouveau dictionnaire garni des occurrences correspondant ce mot l essayer avec tout un tas d exemples comme d sesp r s salsifis du samedi chaussette trous pastaga ou m me saloperie de nom d un chien 4 3 TRADUCTION Revenons maintenant une application plus classique des dictionnaires un programme capable de traduire des phrases enti res d une langue en une autre Je me donne d abord une liste de paires de mots francais anglais 2011 11 23 22 10 16 2007 2012 par J Feat 62 FORMES ET TRANSFORMATIONS mots le the petit little chat cat boit drinks du some bon good lait milk split mots pour voir Partant d un dictionnaire FA comme fran ais anglais parfaitement vide FA je sais que pour ajouter un mot au dictionnaire la syntaxe est tr s simple dictionnaire mot d finition Tout ce qu il me reste a faire c est de scanner ma variable mois en prenant a chaque fois deux mots que je balance dans le dictionnaire FA j
18. lrwxrwXxrwx i FOOL FOOL 16 2009 11 04 05 33 rgb txt gt eto XII rogb txt se qum prism pim 1 root root 41481 2009 07 26 00 11 XEFrrorDB drwxr xr x 10 root root 4096 2009 10 28 21 55 xkb quaes quee root root 8982 2009 07 28 00 11 XKeysymDB PYN quede i root root 8305 2009 07 28 18 26 Kman help Chaque ligne correspond un fichier et chaque colonne repr sente une propri t 1 une s quence de caract res qui d crit ce qu on appelle le mode d acc s au fichier le nombre de iens sans int r t pour le moment le nom de l utilisateur auquel ce fichier appartient le nom du groupe qui aurait aussi un acc s privil gi ce fichier la taille du fichier en octets la date de derni re modification le nom du fichier T SW Ici trois remarques e un dossier est un fichier un fichier particulier qui peut r pertorier d autres fichiers e haut de la liste apparaissent deux dossiers tr s sp ciaux le premier d sign par un point est une 11 11 23 22 10 2007 2012 par J Feat DOCUMENTS ANNEXES 156 reference au dossier lui m me on en verra l int r t plus tard le deuxi me est une reference vers le dossier conteneur ce qui claire un peu ce qu on a vu plus haut propos de la commande cd remarquons que de la m me fa on cd serait aussi une commande valide encore que sans int r t aucun e root est le super utilisateur celui qui a tous les droits pour installer puis administr
19. memory dump print ky i data intik k raw input TE 7 Telle qu elle est cod e elle ne sait interagir qu avec l appui sur qui retourne imm diatement run ou l entr e d un nombre entier interpr t comme une adresse dont la valeur est alors affich e et gr ce au while on peut en faire plus d une d affil e Voici ce que ca donne pour le 13 9 jusqu l instruction out l offset 12610 c est dire Ox E le en fin de ligne est l invite affich e par step PC 080 A 000 in 117 dataliiz inmput val val 3 PC 082 A 000 load 112 A data 112 2 PC 084 A 003 store 113 data 113 A PC 086 A 003 store 114 data 114 A PC 088 A 003 load 94 A 94 PC 090 A 094 store 141 data 141 A 2 PC 092 A 094 jump 116 PC 116 PC 116 A 094 load 0 A 0 PC 118 A 000 store 115 data 115 A PC 120 A 000 load 113 A data 113 2 PC 122 A 003 brz 140 if not PC 140 PC 124 A 003 sub 1 1 P PC 126 A 002 out 112 print Ant 3 Il n en co terait pas grand chose de r aliser l affichage en hexad cimal en rempla ant les i par des x 47 il n y a pas d instruction stop mais le programme pourrait faire un jump l adresse O pour se mettre en attente 11 11 23 22 10 2007 2012 par J Feat 138 FORMES ET TRANSFORMATIONS dans les instructions print de la boucle du s quenceur et peut tre aussi str arg par str hex a
20. top mainloop Par contraste avec le programme pr c dent un clic sur le bouton d truit la fen tre arr tant du m me coup l application Le texte du bouton ne fait rien l affaire on aurait pu lui coller l tiquette bon arr te a suffit comme a du moment que son attribut command reste li la m thode destroy Et encore une fois peu importe le nom de mes variables dans la mesure o je reste coh rent le code ci dessous donnerait exactement le m me r sultat avec une seule variable f en fait message et bouton ne servaient qu permettre de d composer en deux instructions la d finition et l appel de la m thode mais c tait vrai dire tout fait inutile from Tkinter import f Tk Label f text 2 Coucou patron fg red pack Button f text La ferme command f destroy pack f mainloop px20 1 coder ce programme ligne par ligne en mode interactif experimenter en modifiant le texte du Label et celui du Button px20 2 changer la couleur du texte en par exemple dark blue intervertir l ordre des d finitions du Label et du Button l ordre change t il l apparence de la fen tre Remarque la liste des couleurs l gales se trouve quelque part sur votre disque chez moi c est rgb txt c est dire usr share X11 rgb txt vous devriez aussi pouvoir trouver cette liste sur le web par exemple http web njit edu kevin rgb txt html ou bie
21. 1 de pert qu Bam YC 75 GG 28 54 65 28 78 E 71 75 65 73 Z6 Z nut de p ques G5 73 28 CS AB GE GF C3 RB GC es vt now l Hahahaa GE GF EB BC nall Les formats utf 8 avec ou sans BOM gauche ne codent pas les caract res de la m me fa on que le latin 9 ou le windows latin 1 droite et pour tre en mesure d en effectuer correctement le d codage PYTHON doit savoir au moment de la lecture de quel codage il s agit On peut bien s r lui mentir mais le r sultat affich ne sera videmment pas celui qu on escomptait On peut dans le terminal utiliser la commande cat pour voir le contenu d un fichier affich par d faut en utf 8 Une autre commande sHELL int ressante c est hexdump qui en affiche les codes hexdump uf de p ques no l text 0000000 oc 3 75 60 ZU 04 65 20 70 c3 az 71 75 65 73 20 0000010 c3 a0 20 be bI c3 ab Ainsi donc si votre script contient des donn es non Ascii voil pourquoi il est imp ratif de le d clarer tout en haut pour que la repr sentation externe corresponde l interne Les choses sont plus simples si vous utilisez la technique du drag and drop pour alimenter la console la plupart des programmeurs ouvrent c te c te un diteur et un terminal on code direct dans l diteur mais en cas de doute on s lectionne l expression et on la tire dans le terminal o elle est valu e par PYTHON exactement comme si elle avait t
22. Maintenant il faut que je reste conscient du fait que la valeur de FA est une chaine dont le dernier caract re est un saut de ligne n et je devrais th oriquement m en d barrasser avant d utiliser eval pour en faire la conversion en dictionnaire mais l exp rience prouve que ce saut de ligne n emp che absolument pas eval de faire son boulot DICTIONNAIRES ACC S PAR CL 67 Attention ce truc n est pas document ce qui veut dire que a pourrait ne plus tre vrai dans une version ult rieure de PYTHON Dans ce cas il y aura lieu de se d barrasser de ce caract re en trop en n utilisant que FA 1 c est dire la chaine sans son dernier caract re En attendant je peux donc tranquillement faire mes conversions FA eval FA AF eval AF et v rifier que mes deux dictionnaires se retrouvent exactement dans l tat o ils taient au moment de leur sauvegarde 4 3 3 FICHIERS PICKLE Il existe une autre mani re de sauvegarder des donn es c est d utiliser le module pickle en anglais pickle d note une fa on de conserver les aliments Voici le code pour sauvegarder nos dictionnaires FA et AF import pickle module standard f open mes dictionnaires w w mode write pickle dump AF f et de un pickle dump FA f et de deux E Close Je reviens le lendemain et j value import pickle module standard f open mes dictionnaires r r mode read infol pickle load
23. N Do not retitle any existing section to be Entitled Endorsements or to conflict in title with any Invariant Section O Preserve any Warranty Disclaimers If the Modified Version includes new front matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document you may at your option designate some or all of these sections as invariant To do this add their titles to the list of Invariant Sections in the Modified Version s license notice These titles must be distinct from any other section titles You may add a section Entitled Endorsements provided it contains nothing but endorsements of your Modified Version by various parties for example statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard You may add a passage of up to five words as a Front Cover Text and a passage of up to 25 words as a Back Cover Text to the end of the list of Cover Texts in the Modified Version Only one passage of Front Cover Text and one of Back Cover Text may be added by or through arrangements made by any one entity If the Document already includes a cover text for the same cover previously added by you or by arrangement made by the same entity you are acting on behalf of you may not add another but you may replace the old one on explicit permission from the previous publisher that added the old one The author s and pu
24. Toujours est il que si comme pr conis on veut pouvoir manipuler du texte sous sa forme unicode il faut d abord imp rativement le convertir gt gt gt nouveau mot decode utf 8 nouveau byte string unicode string u xe9c u0153ur xeg o le u qui pr fixe la valeur de nouveau indique que sa repr sentation interne est maintenant unicode c est donc l aspect 3 ci dessus la s quence n a plus que 6 elements au lieu de 9 encore qu un print ne montrerait aspect 1 aucune diff rence entre la valeur de nouveau et celle de notre mot pr c dent gt gt gt print nouveau len nouveau type nouveau unicode string c ur 6 lt type unicode gt gt gt gt print mot len mot type mot byte string c ur 9 type str Mais techniquement il s agit d objets de deux types diff rents dans une cha ne unicode chaque l ment correspond un glyphe de la representation de surface ce n est donc qu partir de l qu on peut traiter les elements de la sequence de fa on transparente gt gt gt List novveat ce que voit une boucle for fu xeo g o u u0153 u u ore u ixev gt gt gt for x in nouveau print x ce que veulent voir les humains C ur Tout le probl me vient de ce que nous avons pris l habitude de confondre la notion de caract re donc de code avec celle de glyphe 1 pour nous autres programmeurs cette distinction est cruciale 2 sile text
25. autrement dit construire des expressions qui r alisent une extraction d information par filtrage ou recombinent des fragments pour construire une nouvelle information par composition e composition op ration fondamentale qui consiste assembler des bouts pour faire un tout les exercices de la s rie px01 ont tous une solution de ce type e filtrage autre op ration fondamentale introduite au chapitre 2 Autrement dit tout est forme et tout peut tre transform d o le titre donn ce cours 2 MANIPULATION DE S QUENCES Ce chapitre manipule essentiellement des s quences de caract res aussi appel es chaines Au passage la section 2 en profite pour pr senter la d finition de fonction C est galement un pr texte section 3 pour introduire notre 3 structure de controle l valuation conditionnelle les deux premieres la s quence d instructions et l appel de fonction ayant d j ete introduites de fa on totalement implicite Les sequences ne se laissent pas r duire aux chaines de caract res nous verrons plus tard que beaucoup d op rations applicables aux chaines peuvent aussi tre appliqu es aux listes aux tables d associations dictionnaires et aux ensembles En pratique du point de vue des techniques de programmation la d marche est la m me pour tout type de s quence La section 4 pr sentera sous la forme de travaux pratiques une application des techniques maitrisees en section 3 et
26. cependant s il l affiche c est bien qu il la tire de quelque part et ce quelque part c est justement de la classe Mammifere dont il h rite les propri t s par transitivit puisque la classe Chat dont il est une instance h rite elle m me de la classe Carnivore qui h rite elle directement de Mammifere Et c est videmment le m me m canisme pour les propri t s prop2 et props On voit donc que bien qu il n y ait aucun attribut d fini localement dans l objet Garfield il h rite tout de m me de toute la hi rarchie dont il est issu Mais le plus int ressant c est que si maintenant je d finis directement dans l objet Garfield un attribut de m me nom que l un de ceux dont il aurait normalement h rit la nouvelle d finition inhibe l h ritage Garfield propl je n ai pas de petits Garfield prop2 j adore les lasagnes print Garfield Garfield propl Garfield prop2 Garfield prop3 px30 1 entrez ces d finitions dans l interpr te PYTHON ajoutez y de nouveaux attributs et faites cracher vous m me ces objets ce qu ils ont dans le ventre On peut programmer de nouvelles m thodes dans les classes et r gler ainsi le comportement g n rique de chaque objet et d finir un attribut de m me nom dans une instance terminale masquera cette m thode Par exemple supposons que j ai besoin de manipuler de objets de type STACK c est dire pile de tels objets acceptent 3 op rations fondamentale
27. conomie de fichiers temporaires interm diaires il effectue une capture de la sortie d un programme et la reconduit en tant que donn es d entr e d un second programme un exemple banal serait ls alF less quand l affichage en mode long du programme s serait tellement volumineux qu il prendrait plus d un cran en le reconduisant en entr e du programme more ou less celui ci va automatiquement le segmenter en autant d crans que n cessaire attendant une intervention manuelle barre d espace curseur pour passer de l un l autre Pour plus ample documentation consulter le bash reference manual Les implications pratiques de ce comportement du sHELL seront tudi es plus en d tail quand il s agira d crire des programmes utilisables comme des commandes du sHELL typiquement des programmes en langage C cf cours l ments de syst mes d exploitation SCRIPTS Cependant il est possible d crire des programmes en d autres langages que ANSI c le SHELL est lui m me un interpr te de commandes donc un langage Si un programme est d fini comme une s quence de commandes alors ceci est un programme date H 3M S pwd Et si je mets ce texte dans un fichier appel zou je peux l ex cuter en disant que je veux l interpr ter par exemple avec le SHELL sh ou d ailleurs n importe quel autre sh zou Mieux encore si je marque ce fichier comme ex cutable avec la commande chmod vue plus hau
28. dre hr ER EET RR ERR EE ERR I ERE RECTEER RR TER EXE ER ee 148 93 Shall seek n dos GE AE id dc 152 94 programmation shell 2201220906000200 00004 sense 163 SM TI NT MP 168 glossaire eee ee eee 171 table des mati res besace Cuv x MED 178 144 FORMES ET TRANSFORMATIONS 9 1 MODULES Nous avions d j manipul le module turtle aux chapitres O et 2 puis le module sys au chapitre 3 le moment est venu de clarifier le concept c est pourquoi je vais vous proposer de cr er votre propre module PYTHON en PYTHON Il y a d autres mani re de cr er des modules mais c est quelque chose qu on apprendra plut t vers la fin du cours 213 avec le langage ANSI C En attendant cette section discute de ce qu il est utile de savoir pour manipuler ces extensions en toute s r nit Encore une fois il n y a rien a apprendre et on pourrait la rigueur se contenter de connaitre la syntaxe de l import d un module pour l utiliser imm diatement d ailleurs n est ce pas ce que nous avons fait jusqu pr sent 9 1 1 MODULES MAISON Ce que je vais proposer ici est un peu vaniteux comment faire de plusieurs un module C est s r que a n en vaut pas vraiment la peine vu son utilit mais apr s tout a ne change rien la technique alors celui l ou un autre Un module est un fichier contenant du code
29. entr e manuellement Dans un tel cas pas besoin de sp cifier l encodage puisque l diteur aussi bien que le terminal supportent par d faut le codage utf 8 La section 6 4 3 PROBL MES ET SOLUTIONS revisitera la question du d codage dans le contexte de la transmission d informations par INTERNET en particulier avec le protocole HTTP D CODAGE MANUEL Comme on l a vu plus haut les donn es repr sent es sous forme de BYTE STRING peuvent subir un certain nombre de manipulations de surface mais pas celles qui impliquent une interpr tation de la s quence d octets en termes des glyphes qu elle repr sente Pour ca il nous faudrait une seconde repr sentation interne o chaque l ment de la s quence correspondrait un glyphe Que le texte soit lu dans un fichier ou qu il soit directement donn au programme en tant que valeur d une variable ne fait aucune diff rence pour certaines manipulations la repr sentation interne en utf 8 pose un probl me parce que les glyphes qui apparaissent l affichage peuvent tre en interne repr sent s par 8 ou 16 bits On l a vu lors de la r alisation de l exercice pxo5 2 un mot comme caeur supporte mal qu on le d compose en octets puisque la moiti de ses caract res sont alors mutil s gt gt gt mot coeur mot xc3 xa9c xc5 x93ur xc3 xa9 Jv LOP x ain dot f print X lt O u z 7 codec codeur d codeur cf http d
30. ex cutable comme le sont d ailleurs les programmes compil s avec cette diff rence qu un script est par d faut dans ce cas interpr t par le SHELL actif le probl me c est qu il existe diff rents SHELLS qui pr sentent des diff rences de syntaxe ce qui fait qu il se peut qu un script particulier ne fonctionne pas comme pr vu si l environnement n est pas celui pour lequel il a t concu SP CIFIER L INTERPR TE Pour contourner ce probl me il est convenu que si la toute premi re ligne du script commence par les caracteres le SHELL actif appelle automatiquement l interpr te dont l adresse doit tre donn e sur cette m me ligne Par exemple voici un script qui ne tourne qu avec icsh parce que la syntaxe du if n est pas la m me qu en Dash 1 bhin tcsh gec Wall plic ep F1 if 5 0 exit echo executable S1 ok Maintenant le probleme est que icsh ne reside pas forcement dans bin sur tous les systemes certains le mettent dans usr local bin par exemple Pour contourner ce deuxieme probleme une commande speciale est installee en principe dans usr bin elle s appelle env et son boulot est de scanner la variable d environnement PATH pour trouver et invoquer l interpr te dont le nom figure sur la premi re ligne du script ligne r dig e comme suit 11 11 23 22 10 2007 2012 par J Feat DOCUMENTS ANNEXES 161 usr bin env tesh Mais ce serait trop simple car rien n oblig
31. la fin de la ligne 2 3 4 pas pareil que 2 3 4 Nous on comprend tres bien tout ce qui suit le mais pour l interpr te ce serait totalement inintelligible puisque les symboles pas pareil et que ne sont pas d finis en PYTHON Maintenant essayez ceci T y 2 division euclidienne Comprenez vous pourquoi le r sultat est 3 La division enti re ou euclidienne retourne une valeur enti re Autrement dit le r sultat est arrondi la valeur enti re imm diatement inf rieure au r sultat r el essayez 7 2 r sultat arrondi l entier inf rieur Ah Qui aurait pu pr dire que cette expression s valuerait 4 Si ce r sultat vous parait choquant tant mieux souvenez vous que les machines ne r fl chissent jamais elle se contentent d ex cuter du code Apprenez simplement les utiliser votre profit Essayez par exemple 7 7 Z r sultat r el ici le diviseur est un r el et non pas un entier La valeur retourn e maintenant 3 5 correspond mieux a notre intuition on aurait d ailleurs obtenu le m me r sultat avec l expression 2 parce qu il suffit que l un des op randes soit r el pour que l op rateur change de comportement une petite diff rence syntaxique en l occurrence un point provoque une diff rence s mantique majeure remarquons ici que ou 7 0 sont quivalents c est toujours la quantit consid r e comme un r el et non un entier Enfin es
32. laissez une ligne vide avant et bien sur une autre apres pour que la d finition saute aux yeux def pluriel mot return mot s J ai insere ici ma toute premiere definition qui ne vaut pas tripette mais je Suppose que vous aller lui substituer votre propre definition r alis e pour l exercice px11 1 Maintenant c est la partie magique ajoutez les lignes suivantes import sys if len sys argv gt L print pluriel isys argviil else exit argument manquant mot au singulier L importation du module sys nous donne acces de nouvelles fonctionnalit s et celle qui nous int resse ici c est de voir ce qui a t tape sur la ligne de commande dans la console le programme appel et ses arguments en effet tout ce qu il y avait sur la ligne de commande au moment ou le script a ete appel a t collect dans une liste appel e qu on utilise pr fix e du nom du module originel Cette liste contient donc les mots que vous avez entr s le premier mot est forc ment plusieurs puisqu il faut bien appeler le programme mais ici ce mot ne nous int resse pas Voil le pourquoi du pr dicat len sys argv gt 1 vous devez appeler ce programme en lui donnant au moins un mot mettre au pluriel sinon ce n tait pas la peine Comme il arrive qu on oublie comment utiliser un programme l instruction else rappelle aimablement le format des donn es attendues par le programme un mot au singulier
33. ne Lean et as 84 shell commande T M 160 161 PREND 62 63 158 161 CAC PP 98 159 ECNO eee es 160 161 165 48 140 144 159 161 164 165 o N E N 163 165 S 159 we E 147 155 159 165 165 166 H 163 166 PWO 159 ilm P IU 165 cl C 84 158 159 c MMC O A Ra M 159 gp 159 VASE ET 161 ri e 1 72 163 165 shell variable HOME 166 FATE T 161 166 SIMIO 139 140 SU a A 84 85 cep e a 77427 ae a an due 89 91 SVET 147 P iE 95 99 variable Eo Aero 145 Pire H 84 85 jp TE suds H 72 GLOSSAIRE 169 GLOSSAIRE La plupart de ces termes sont expliqu s en d tail quelque part sur des pages WEB peut tre m me avec trop de d tails c est pourquoi ce petit glossaire est volontairement limit une d finition sommaire des termes que vous pourriez rencontrer sur nos
34. par exemple gt gt gt help len len len object gt integer Return the number of items of a sequence or mapping Ceci nous dit pr cis ment Llasyntaxe de L utilisation de Len letype de La valeur retourn e INTEGER signifie entier e une br ve description de sow comportement quels types d objets ow peut L appliquer NB les types sequence et MAPPING seront tudi s dans Les prochains chapitres Une autre fa on de retrouver comment une fonction s utilise est de garder un marque page sur La documentation qui d crit toutes Les fonctions intrins ques en ordre alphab tique http docs python org library functions htm 2011 11 23 22 10 16 2007 2012 par J Feat 24 FORMES ET TRANSFORMATIONS R CAPITULATION Le th me implicite de ce chapitre est la notion de valeur notion centrale dans le traitement symbolique de l information l information est la valeur on peut la REPR SENTER par un symbole la variable on dit alors que ce symbole est une REFERENCE cette valeur une valeur peut aussi tre exprim e virtuellement comme le r sultat d un calcul o valeur d une expression symbolique 0 valeur d une fonction appliqu e des arguments Comme montr au chapitre 0 certaines expressions sont utilis es pour leur effet et n ont pas de valeur si l effet est externe comme pour l affichage la valeur n a d ailleurs gu re d importance s il est interne comme dans
35. plusieurs fois de suite adaptez le code pour emp cher que le m me mot sorte deux fois cons cutivement px32 3 tel qu il est d fini le bouton start a exactement le m me effet que le bouton stop modifier le script pour que ce bouton relance le jeu astuce la fonction execfile si on lui donne en argument le nom d un script cod en PYTHON ex cute ce script sans se poser de question px32 4 dans sa version actuelle ce script comptabilise comme une erreur une lettre non valide m me si elle a d j t essay e imaginer un moyen de tenir compte des lettres non valides d j propos es et modifier le code pour emp cher qu elles soient sanctionn es plus d une fois bien entendu le programme doit tre indif rent la casse Toutes ces extensions sont de pr f rence cumulatives chaque version devrait incoporer les modifications de la pr c dente mais si vous bloquez sur l une essayez quand m me les suivantes 11 11 23 22 10 2007 2012 par J Feat 124 FORMES ET TRANSFORMATIONS 8 3 MORPION Ce jeu se joue deux joueurs chaque joueur se voit attribuer l un des deux symboles O ou X et chacun joue tour tour le gagnant est le premier qui r alise une ligne de 3 symboles horizontalement verticalement ou xX O 3 diagonalement On ne cherche pas ici laborer un programme qui mulerait le comportement X X Q humain et vous permettrait de jouer contre la machine O gt
36. tred plot point T mainloop px26 1 coder et ex cuter ce programme exp rimenter en jouant avec les valeurs de X et Y et en changeant le pas de l angle 1 et 10 gardez celui qui vous plait le mieux et utiliser la m thode create text pour marquer les valeurs 1 et 1 sur l axe des y et remarquez que ce graphe est invers probl me de signe avec les y px26 2 adapter le px26 1 pour grapher la fonction tangente math tan pour fixer les id es faire une tude pr alable de la variation de y avec une petite boucle du genre for angle in range 90 90 print angle tan radians angle pour avoir l allure g n rale du graphe et une estimation grossi re des plages de valeurs repr senter Pour plus d information voir le module MATH http docs python org library math html cf 1LP 9 3 pour une d monstration plus pouss e en rapport avec l C 122 de MATH MATIQUES G N RALES R CAPITULATION ow avait d j fait connaissance avec Tkinter sur lequel est fond Le module turtle d finitions BINDING Voir LIAGE CALLBACK appel d un PLUG IN par extension Le PLUG IN lui m me V NEMENT Souris et clavier p riph riques g n rateurs d v nements EVENT HANDLER Une fonction appel e quand un v nement se produit EVENT MANAGER fonction mainloop charg e d activer Les CALLBACKS FRAMEWORK architecture PLUG INS uage association d un v nement et du HANDLER sp
37. 48 store data A store data data A 10 jump PC _ 11 brn if A lt PC _ due DE a if not PC _ Et de la m me fa on je pourrai donner une description formelle similaire pour les op rations arithm tiques l addition et la soustraction DATA INSTRUCTION MULATION 20 add _ 60 add A data EW auve WOU A data data _ 21 sub A _ 61 sub A data E sub A data data OP RATIONS D ENTR ES SORTIES Hestent deux types d op rations que nous n avons pas encore d cortiqu es celles qui ont voir avec les entr es sorties et les op rations logiques binaires BITWISE LOGICAL OPERATIONS Les entr es sorties seront simul es avec la fonction intrins que raw input et l instruction print le code machine sera donc interpr t par les expressions ci apr s DATA INSTRUCTION EMULATION dD 256 LE data _ input byte Dass M as data data _ input byte 41 Out print data hl sa o print data data 44 d j pr sent e la section 4 3 pour la fonction traduis 11 11 23 22 10 2007 2012 par J Feat 134 FORMES ET TRANSFORMATIONS OP RATIONS LOGIQUES BINAIRES Logique ici s oppose arithm tique ces op rations sont dites binaires parce qu elles manipulent directement la repr sentation interne e
38. Feat 106 FORMES ET TRANSFORMATIONS Le probl me n est pas si trivial que a dans la mesure o les donn es sont souvent des collections organis es en plusieurs niveaux hi rarchis s par exemple un agenda o chaque ann e comporte 12 mois eux m mes d composables en jours pour lesquels chaque heure pourrait correspondre un rendez vous diff rent Nous avons vu 3 types scalaires primitifs e le type int valeurs num riques enti res 3 789 15 e le type float valeurs num riques r elles 3 0 7 89 1 5 e le type bool bool en valeurs logiques True False Nous avons manipule 3 types primitifs de structures e le type str ou s quence de caract res 1 2 3 ou aujourd hui e le type list False 3 4 2 cr ve coeur 17 3 e le type dict ou dictionnaire 1 machin 2 truc 3 chose Nous avons galement manipule des r f rences en particulier e des objets de type file r f ren ant des fichiers sur disque ou en r seau e des fonctions et des methodes dont le nom symbolique refere a un bout de code defini dans l environnement de l interpr te e et de fa on transparente les variables et autres symboles en fait il n y a que des r f rences partout Cette recapitulation sommaire ne veut pas dire qu il n y ait pas d autres types mais pour le moment ceux l sont suffisants pour se d brouiller dans la plupart des cas Et notez que co
39. PYTHON File Edit View Terminal Help Le r sultat est absolument rassurant mais en m me temps il Pi TE LRU d note un fonctionnement qui n a voir avec l valuation help copyright credits or license for more information d une expression arithm tique et pourtant c est le m me ae op rateur tout se passe comme s il voyait ce qu il doit multiplier et d cidait d op rer diff remment selon la nature de l op rande on comprendra plus tard pourquoi et comment 2 cou O 2 UTILISER LES FONCTIONS D UN MODULE IMPORT Le langage PYTHON n est pas grand chose d autre qu un interpr te d instructions en fait toute sa puissance vient des modules qui s y ajoutent automatiquement charg s au d marrage ou que j y ajoute la main ici je vais charger le module turtle c est dire tortue qui permet d muler quelques fonctionnalit s d un autre langage LOGO originellement destin l enseignement de la programmation aux enfants des coles primaires En gros il s agit de manipuler un mobile l cran et lui faire dessiner des trucs Toute la subtilit d un tel apprentissage r side dans cette d couverte de l aspect proc dural de la programmation on parle aussi d approche imp rative qui met en vidence qu un programme est constitu d une s quence ordonn e d instructions autrement dit une proc dure la notion de s quence est fondamenta
40. Remarquons que de genre de redirection cree automatiquement un nouveau fichier c est dire que m me s il existait deja un fichier de ce nom la nouvelle information qu on y crit supplante ce qu il y avait avant 11 11 23 22 10 2007 2012 par J Feat DOCUMENTS ANNEXES 159 Mais il est possible de contourner ce comportement set gt variables eny gt gt variables parce que la redirection par gt gt ajoute les nouvelles donn es a la fin du fichier existant On peut aussi rediriger l entr e avec l op rateur lt ce qui force le programme a prendre ses donn es d entree dans un fichier Par exemple le programme date s attend a recevoir une specification de format telle que date Date d m y nHeure H M S Supposons que ce texte Date d m y o nHeure H M S soit justement le contenu d un fichier appel mon format La commande date mon format lira ce fichier et s ex cutera exactement comme si on avait tap tout sur la ligne de commande Autre exemple typique celui de l utilisation de la commande tr pour convertir des donn es textuelles la vol e tr d r lt ms windows txt gt unix texte qui supprime dans un texte en provenance d une machine M W tous les caract res de retour chariot superflus ne gardant que les sauts de lignes attendus dans un fichier au standard U L OP RATEUR DE RECONDUCTION Quant au pipeline ou op rateur de reconduction il permet de faire l
41. alors que B P en indique une autre Notez au passage que chaque nom est toujours s par du pr c dent par un symbole Mais pourquoi se d placer Parce que les commandes sont ex cut es l o on les commande si je veux manipuler les donn es qui se trouvent dans le directory truc il faut que je le fasse depuis le directory truc ou alors il faut une petite gymnastique qu on d crira plus tard cf copie de fichiers cp La commande cd s utilise en sp cifiant o on veut se d placer par exemple en partant de la racine je pourrais commander cd A ou cd B ou cd C il n y a pas d autre directory dans lequel je puisse descendre directement Arriv dans A je pourrais alors commander cd a ou cd b Toujours en partant de la racine on pourrait aussi sp cifier directement un chemin complexe en commandant cd C z ou cd B e La commande pwd vue plus haut aurait d s appeler vous tesici ou vei elle est l abr g de print working directory en francais affiche dossier de travail Ainsi tout instant pwd permet de savoir o on se situe dans la hi rarchie Une fois arriv dans le dossier e du dossier B la commande cd me ferait remonter au niveau sup rieur c est dire dans le dossier B Ou bien je pourrais commander directement cd f ce qui aura pour effet de 1 remonter d un cran puis 2 de descendre dans le dossier du B Et de la m me facon j aurais pu commander cd C h ce qui me fer
42. argument et retourne le texte entr interactivement par l utilisateur texte qui peut m me comporter plusieurs mots L avantage est double puisqu ainsi le nouveau mot e est simultan ment ajout au dictionnaire e prend naturellement sa place dans la traduction Note l argument de raw input est ici une expression articul e autour de l op rateur qui prend deux op randes e gauche une chaine dite de format contenant des l ments sp cifiant un format typique comme s sp cificateur pour le type str e droite un tuplet de valeurs ou de variables valuer possiblement une seule Une nouvelle chaine est alors form e en substituant dans l ordre chaque valeur chaque sp cificateur pour plus ample information cf http docs python org library stdtypes html string formatting px17 1 coder cette fonction et l essayer avec diverses phrases comme par exemple traduis FA le gros chien mange la bonne soupe ou n importe quoi d autre et penser afficher le dictionnaire FA pour voir si les nouveaux mots ont bien t ajout s Question maintenant que j ai un dictionnaire francais anglais est ce qu il est possible de retrouver le mot francais quand on connait le mot anglais R ponse oui mais ca risque d tre terriblement co teux parce qu il faut parcourir tout le dictionnaire et examiner non pas chaque cl mais chaque valeur jusqu trouver celle qui nous int resse et un dictionnair
43. cifique de cet v nement winger window gadget programmation d une interface graphique principes g n raux penser en termes de Look AND FEEL quelle gueule devrait avoir mon interface quels l ments doivent tre interactifs penser en termes de CONTENEURS l organisation des wingers est hi rarchique ex La Boute est un objet Au CANEVAS qui est un objet de La FEN TRE penser en termes de HANDLERS d cider comment l interface sera interactive distinguer command binding de event binding un liage par bind ne tratte qu un v nement La fois Le HANDLER doit accueillir l v nement d clencheur LL peut alors acc der ses propri t s widget d clencheur coordonn es un liage par l attribut commanr tratte d un coup plusieurs v nements ex button press button release le HANDLER w attewd alors pas d argument du tout penser en termes de fonctions ancillaires pour ce qui peut tre factoris ex avance pour ce qui n a rien voir avec l interface 2011 11 23 22 10 16 2007 2012 par J Feat 86 FORMES ET TRANSFORMATIONS et pour plus d information voir Tkinter FAQES http www fagts com knowledge base index phtml fid 264 Tkinter http wiki python org moin TkInter Tkinter reference http www pythonware com library tkinter introduction Tkinter reference a qui for python http infohost nmt edu tcc help pubs tkinter Tkinter Wiki http tkinter unpythonic net wiki thinking in Tkinter http www ferg org
44. cision en PYTHON il est en double pr cision flux stream le canal de communication avec un fichier foncteur terme obscur dont le sens le plus commun est fonction qui accepte parmi ses arguments un symbole de fonction appliquer aux autres arguments Dans les langages fonctionnels la famille map regroupe toute une population de foncteurs mais il y en a d autres comme apply reduce ou zip fonction une abstraction un objet f qu on peut appliquer une valeur x dont il se sert pour effectuer un calcul denote f x de l ext rieur de la fonction cette valeur x est appel e argument de l int rieur cette valeur est repr sent e par une variable qu on appelle param tre de la fonction Une fonction retourne g n ralement une valeur de sorte qu on puisse crire quelque chose comme y f x voir aussi proc dure Une fonction d finie sans aucun parametre n acceptera pas d argument dans ce cas le r sultat du calcul qu elle effectue d pend de son contexte local et du contexte global fonctionnel se dit d un langage de programmation o la structure de contr le la plus vidente est l application d une fonction au r sultat de l application de fonctions framework environnement logiciel extensible adaptable aux besoins d une application sp cifique voir plug in gestionnaire d v nements boucle programm e pour couter les interruptions en provenance d organes p riph rique
45. else y voir http docs python org reference expressions html boolean operations 2011 11 23 22 10 16 2007 2012 par J Feat 40 FORMES ET TRANSFORMATIONS R CAPITULATION S QUENCES On a compris les rudiments de la manipulation de s quences partir d exemples sur les s quences de caract res il existe un autre type de s quence tudi dans le prochain chapitre qui se manipule de la m me fa on par indexation Et de fa on totalement implicite on a aussi compris que la s quence d instructions est une forme de structure de contr le PR DICATS On sait maintenant qu un programme peut prendre des d cisions partir de pr dicats expressions dont la valeur est interpr t e dans le domaine VRAI FAUX celui de la logique binaire On peut inverser la valeur d un pr dicat en lui appliquant l op rateur not de n gation logique et on peut construire un pr dicat complexe en utilisant l op rateur and de conjonction et l op rateur or de disjonction D CISIONS Un pr dicat peut tre exploit dans une structure de contr le if pour d cider de la conduite tenir roule ou freine ou de la valeur donner une variable une fonction qui retourne vrai ou faux peut tout fait tre utilis e comme pr dicat En fait n importe quoi peut tre utilis comme pr dicat quand on sait que tout ce qui n est pas False 0 ou la s quence vide est forc ment vrai L op rateur in par exemple retournera vrai si son
46. la taille de l objet index est implicitement ajout e l index 62 et son quivalent magn tique l orientation d un cristal d oxyde ferrique 171 interprete au sens le plus courant programme capable d valuer du code source en le traduisant la vol e en une s rie d appels de fonctions ou proc dures de haut niveau interpr teur traduction malheureuse de l anglais interpreter kilo souvent abr g en K pour les informaticiens c est 279 c est dire 1024 et ce en d pit de la normalisation de 1998 pour les autres c est 10 langage au sens informatique un jargon cryptique avec une syntaxe g n ralement absconse sauf Lisp Lisp langage de programmation fonctionnel liste sequence de donn es h t rog nes qui peut prendre un nombre quelconque d l ments quelconques y compris d autres listes ventuellement elle m me et peut aussi tre totalement vide Les listes sont mutables en ce sens qu on peut en modifier un l ment en ins rer de nouveaux ou en enlever Cet aspect dynamique en fait un type de donn e tr s appr ci pour toutes sortes de repr sentations liste d associations en Lisp ou Scheme donn es structur es sous la forme d une liste de sous listes dont le premier l ment sert de cl pour acc der la valeur c est dire le reste de la sous liste le principe de son utilisation est le m me que celui des tables de hachage mais la mise en uvre est
47. par exemple 65 oppos a RISC 66 qui elles m mes g rent des connexions de constituants au niveau mat riel autrement dit des r glages de l unit arithm tique et logique comme tous les autres programmes le microcode peut contenir des bugs 67 la puce dite Bios de la carte m re g n ralement une EPROM donc flashable appari e au processeur est programm e pour corriger ces bugs au d marrage 68 pour les anglo saxons not comme un au dessus d une variable 69 d finie en fait comme un 0 172 num risation d un document reconnaissance des caract res imprim s codage des caract res ainsi reconnus objet au sens large a peut tre n importe quoi au sens strict dans les langages objets a d note une structure de donn es collection de propri t s sp cifiques tant comportementales que purement attributives si un objet est une classe il permet de g n rer de nouvelles instances qui h ritent automatiquement de ses propri t s qui deviennent du m me coup g n riques octet vecteur de 8 bits voir byte op rande valeur laquelle s applique un op rateur op rateur abstraction repr sentant une op ration dont l valuation effectuation retourne g n ralement une valeur les op rateurs peuvent tre hi rarchis s du point de vue de leur priorit ce qui peut influencer l valuation Les op rateurs peuvent tre selon les langages exprim s sous form
48. pour le rendre executable et lancez le depuis le shell et si votre message n est pas de l ASCII pur ne manquez pas d en sp cifier l encodage Notez que les classes sont traditionnellement nomm es avec une majuscule initiale alors que les instances sont en minuscules pure convention laquelle vous pouvez d roger au risque de rendre votre code plus difficile lire pour les autres programmeurs remarquez aussi que le nom de mes variables top et message ne font rien l affaire j aurais pu aussi bien les appeler machin et truc Autre convention dont la coh rence m chappe lorsqu on sp cifie des valeurs dans les arguments d une m thode typiquement x Label f text Coucou fg red on colle l op rateur ses op randes sans espace je ne sais pas pourquoi c est ridicule et ca ne rend certainement pas le code plus intelligible mais bon ce n est jamais qu une convention Techniquement les argument de la forme x y sont possibles quand x est un param tre muni par d finition d une valeur par d faut par exemple la d finition suivante so Orogne fois 2 mp s eruca GY T Ols e permet d appeler grogne comme si elle tait O aire 1 aire ou 2 aire et m me en inversant l ordre des arguments condition de nommer le param tre gt gt gt grogne gar gt gt gt grogne 4 WG c m L bo GRR gt gt gt grogne r R fois 5 GRRRRR Cette
49. px12 3 recoder les exercices px10 1 et px10 3 selon l approche fonctionnelle px12 4 recoder l exercice px10 4 selon l approche fonctionnelle La g n ration de donn es n est pas exclusivement r serv e aux applications num riques soit la liste ps des pronoms personnels sujets je tu il nous vous ils split et la liste ip1 des terminaisons des verbes du 1 groupe l indicatif present es e ons ez ent split La m canique appel e fort justement conjugaison consiste a combiner un pronom le radical d un verbe v et la terminaison appropri e par exemple ps 0 v 2 ip1 0 c est pr cis ment ce que je propose pour l exercice ci dessous alors que le suivant est mine de rien une sorte de produit cart sien qui ne dit pas son nom px13 1 soient ps ip1 d finis ci dessus et v tirer d finir conjugue qui prend une chaine telle que v et un nombre entre 1 et 6 la personne et qui g n re la forme conjugu e correspondante par exemple conjugue tirer 4 gt nous tirons px13 2 soient ps ip1 et v tels que d finis ci dessus coder la conjugaison optimis e de v g n rant la liste des 6 formes je tire tu tires il tire px13 3 adapter px13 2 pour qu il puisse traiter une liste V filer rigoler conjuguer split ou toute autre liste tant que les elements en sont des verbes du 1 groupe le r sultat du programme devant tre une liste de
50. rande gauche et un second droite Les fonctions de la forme f x sont aussi des op rateurs mais sous forme pr fix e dans ce cas leurs op randes sont appel s arguments de la fonction et leur nombre caract rise l arit de la fonction l arit d une fonction d pend de la facon dont elle a t cod e il n y a pas de limite th orique au nombre d arguments Ce m canisme d valuation similaire celui de LisP permet des facilit s impossibles pour d autres langages Par exemple taille len d finition d un synonyme taille azerty taille se comporte exactement comme len retournera la valeur 6 Ou encore x 1 24 3 A z x eval eval z produira la valeur 10 L utilite de cette fonctionnalite deviendra evident lorsque plus tard nous manipulerons les mots de la ligne de commande ou tout est du texte bien qu il n y ait de guillemets nulle part En tant que processeur de commandes le SHELL ne voit que du texte qu il passe au programme appel et c est ce programme qui est responsable de la conversion de la s quence 123 en la quantit 123 D ailleurs grace a la fonction int a ne devrait pr senter aucune difficult essayez gt gt gt z 11237 gt gt gt 3 int zx 369 DONN ES L MENTAIRES 23 NOTES Comme l annonce PYTHON aussit t qu il est activ on peut demander de L aide tout moment en valuant La fonction help
51. rience on est capable de pr dire la valeur d une expression ou l effet d une instruction et donc de coder d un seul tenant tout le programme D ailleurs pour fixer les id es le texte tout propre pourrait maintenant ressembler from turtle import forward 50 left 90 forward 50 left 90 forward 50 left 90 forward 50 left 90 sachant que j ai regroup en les s parant par un point virgule les paires d instructions qui mettent en vidence l aspect it ratif r p titif de ce programme quatre c t s Remarque ce fichier doit tre enregistr sur disque pour y tre m moris on lui donne le nom qu on veut mais par convention on y ajoute le suffixe py pour qu il soit vident au premier coup d il qu il s agit d un script PYTHON O 5 LE MODE IMP RATIF On peut se demander comme voqu plus haut pourquoi il y a des instructions qui affichent une valeur en retour et d autre pas c est parce ces derni res sont utilis es pour leur effet comme par exemple import en revanche une expression comme 2 2 n a pas d effet mais elle a une valeur et c est cette valeur que va afficher PYTHON en r ponse Pour clarifier import est un ORDRE imp ratif qui oblige PYTHON a faire un boulot mais ca ne produit pas de valeur alors que 2 2 serait plut t une QUESTION qui attend une r ponse POUR COMMENCER AVEC LE TERMINAL D apr s ce que nous venons de voir le terminal serait une
52. une brouette d exercices pour se faire la main px14 1 cr er un dictionnaire argot avec les associations pantalon gt falzar et chemise gt liquette y ajouter flic gt poulet et chaussure pompe changer la d finition de flic en mettant keuf la place de poulet ajouter voiture caisse changer la definition de chaussure en mettant godasse a la place de pompe remplacer caisse par tas de boue coder l expression qui retourne la liste des mots d finis px14 2 coder une fonction unaire trouve qui retourne la bonne definition si le mot qu on lui donne en argument en a une dans le dictionnaire et la chaine vide sinon trouve voiture par exemple retournerait tas de boue alors que trouve ministre retournerait None px14 3 quelle serait la facon la plus simple d inverser ce dictionnaire de sorte que les cl s soient en argot associ es des valeurs en francais 2011 11 23 22 10 16 2007 2042 par J Feat 60 FORMES ET TRANSFORMATIONS 4 1 EXPLOITATION STATIQUE L exemple precedent est en fait applicable a n importe quel probleme de conversion autrement dit quand il s agit de passer d une representation a une autre en particulier quand cette correspondance n est pas ais ment calculable Le dictionnaire est dans ce cas utilis comme une donn e statique une sorte d tat des lieux qui ne changera pas C est le concept de LOOK UP TABLE abr g LUT tres commode pour trouver par exemple
53. 1 print plusieurs pluriel sys argv 1 else exit argument manquant mot au singulier 48 cf chapitre 1 11 11 23 22 10 2007 2012 par J Feat 146 FORMES ET TRANSFORMATIONS Lorsque le script est compil en tant que module il se d barrasse du code qui ne sera jamais valu c est comme si ces lignes n existaient pas 9 1 2 MODULES D USINE Pour des raisons d conomie PYTHON ne charge en standard qu une tr s faible partie de ses ressources vous laissant le soin de charger les modules sp cialis s dont vous pourriez avoir besoin Par exemple essayez ceci help modules qui vous affiche une liste des 380 modules que vous pourriez charger MODULE RANDOM Par exemple la derni re ligne de la liste je vois le module random qui d finit des fonctions utilis es pour des calculs statistiques Essayez import random dir random qui vous retourne la liste de tout les objets import s depuis le module random Ainsi l expression random random retourne un nombre r el pseudo al atoire entre 0 0 et 1 0 Essayez random random random random random random et vous verrez ce que je veux dire Si vous avez besoin d un entier entre 5 et 8 essayez plut t ceci random randint i5 8 Et une expression comme random choice azertyuiop vous retournera un l ment pris au hasard dans la s quence donn e en argument Mais notez que ce mode d importation vous oblige pr fixe
54. 6 l ment j en d duis que la borne droite de l intervalle n est pas incluse dans l intervalle autrement dit qu il faut donc sp cifier le segment en ajoutant 1 au v ritable index de fin de segment ce n est pas une incoh rence mais c est pas facile expliquer PYTHON permet de ne sp cifier que l une des deux bornes de l intervalle dans ce cas la borne non sp cifi e prend comme valeur par d faut l index de d but ou de fin c est selon petit echat 5 segment du d but jusqu l index 5 non compris petit chat 6 segment depuis l index 6 jusqu la fin petit chat segment du d but jusqu la fin Encore plus fort PYTHON permet d utiliser des index n gatifs dans ce cas l index part de la fin de la s quence en fait l interpr te fait la somme index taille de la s quence MANIPULATION DE S QUENCES 27 petit chat 1 comme 10 1 le caract re t dernier l ment de la s quence petit chat 4 comme 10 4 l l ment c en 6e position partir de la fin petit chat 4 chat depuis l l ment c jusqu la fin petit chat 5 petit la s quence sans ses 5 derniers l ments Enfin on peut sp cifier une 3e valeur appel e stride fran ais enjamb e par d faut c est 1 mais on peut mettre n importe quelle valeur sans risque d erreur m me n gative gt gt gt petit 325 pe gt gt gt petit chat t 6 extraction
55. Cover Texts or Back Cover Texts in the notice that says that the Document is released under this License A Front Cover Text may be at most 5 words and a Back Cover Text may be at most 25 words A Transparent copy of the Document means a machine readable copy represented in a format whose specification is available to the general public that is suitable for revising the document straightforwardly with 175 generic text editors or for images composed of pixels generic paint programs or for drawings some widely available drawing editor and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters A copy made in an otherwise Transparent file format whose markup or absence of markup has been arranged to thwart or discourage subsequent modification by readers is not Transparent An image format is not Transparent if used for any substantial amount of text A copy that is not Transparent is called Opaque Examples of suitable formats for Transparent copies include plain ASCII without markup Texinfo input format LaTeX input format SGML or XML using a publicly available DID and standard conforming simple HTML PostScript or PDF designed for human modification Examples of transparent image formats include PNG XCF and JPG Opaque formats include proprietary formats that can be read and edited only by proprietary word processors SGML or XML for which the
56. L instance C de Canvas specifie ses dimensions a la creation ainsi que la couleur du fond bg anglais background c est dire arri re plan Elle est li e comme d hab au bouton gauche de la souris de sorte qu un clic appelle la fonction manager La nouveaut ici c est que manager ne fait rien d autre que recevoir l v nement et d l guer le v ritable travail des fonctions subalternes e l une affiche les coordonn es du clic c est d ailleurs tout a fait superflu mais rassurant e l autre dessine effectivement dans le widget d clencheur On savait qu un v nement tait un objet complexe et connaissait ses propres coordonn es mais il sait aussi quel est le widget d clencheur propri t essentielle puisque c est ce widget seul qui peut appeler la m thode de dessin Bien s r ew n est qu une r f rence et j aurais pu coder directement event widget create_oval mais a me paraissait moins intelligible Quant la m thode create oval je lui ai ajout un argument pour la couleur de remplissage anglais fill et un autre pour rendre le contour anglais outline transparent px23 1 variante de couleur fonction de la parit modifier le code ci dessus pour afficher un disque de couleur rouge si l abscisse du clic est paire et verte si elle est impaire Remarque PYTHON n a pas de pr dicat pour d tecter la parit d un nombre entier mais vous pouvez ais ment y suppl er si la valeur logiqu
57. RR RR 73 6 architecture de POJAM MOS es me ie Ne eee 87 D infrastructures logicielles P 103 prototypage d applications LPS 115 E Fa 143 Tale gt qe TM 168 glossaire TO 169 table des mati res xoa rasa wax acr ks ca EC RE RR CER RR RR ACC A su C cR Rc ca e 178 2011 11 23 22 10 16 2007 2042 par J Feat A N FORMES ET TRANSFORMATIONS vol d oiseau fondements interaction avec le syst me les rudiments pour se d brouiller avec le terminal et une vague notion de ce qu est une interface concepts d instruction d expression d valuation de valeur d effet et de contexte notion de programme interpr t et de script aper u de la programmation graphique et de la modification du code source au moyen d un diteur de texte d ou la notion de fichier en tant que m moire persistante donn es l mentaires approche th orique du traitement de l information notions de type valeur symbole et d op ration sur des valeurs principe de l valuation manipulation de s quences listes acc s index dictionnaires acc s par cl ces trols chapitres condensent tout ce qu il faut savoir pour une approche pratique du traitement de l information donn es structur es manipulation de s quences cha nes listes et de tables d associations notions de fonction de m tho
58. Toutes les cellules de M sont au d part initialis es la valeur False et d s qu un coup y est jou la cellule prend comme valeur le symbole correspondant au joueur qui a cliqu dessus 0 ou X l avantage est double 1 marquer une cellule de M c est d un point de vue logique basculer sa valeur vrai puisque dans une logique deux valeurs ce qui n est pas False est forc ment True cette propri t permettra de tester ais ment s il est encore possible de jouer dans une cellule donn e 2 marquer une cellule de M c est aussi laisser l empreinte sp cifique du joueur qui se l est ainsi appropri e et ceci permettra ais ment de calculer s il vient d aligner 3 empreintes semblables R CAPITULATION C t interface il me faut 15 objets e a constante enti re T d finit la taille de la grille de jeu disons 3 pour commencer e la constante enti re H d finit la dimension en pixels d une cellule cellule carr e e morpion le widget maitre e grille une instance de Frame pour contenir les instances de Canvas e neuf instances de Canvas auxquelles je n ai pas besoin de donner de noms e info une instance de Label pour faire plus convivial e stop le bouton d arr t une instance de Button videmment Cote traitement des donn es il me suffit de 2 variables e matrice M m morise l un des tats possibles pour chaque cellule c est une matrice carr e de dimensions T par T o T est une
59. a vraiment beaucoup de fichiers on fait des dossiers dans les dossiers Bien entendu ceci n est qu une representation abstraite de la structure des donnees sur le disque On pourrait visualiser cette structure comme plein de petites boites les dossiers dans une grande boite le disque Et comme dans n importe quel dossier on peut creer autant de sous dossiers qu on veut a finit par rassembler a des casiers a tiroirs Une telle structure peut aussi tre repr sent e sous la forme d un graphe branchant appel arborescence ou arbre dans le graphe ci contre le n ud Origine tout en haut est appelee racine ou root et les branches expriment la filiation d un noeud par rapport a un autre Remarquez que seules les boites color es ont des branches ce sont des dossiers ou directories alors que les bo tes claires aussi appel es feuilles de l arbre sont des fichiers contenant des donn es En fait un dossier est un fichier qui repertorie des fichiers LLL LOCO UL Dans cette repr sentation hi rarchis e tout l ment fichier ou dossier a un ascendant unique il n y a donc jamais partant du sommet qu un seul chemin qui m ne un l ment donn tout moment de l utilisation du terminal le programmeur se situe quelque part dans cette arborescence dans ce qu on appelle le dossier de travail WORKING DIRECTORY et c est exactement ce que r pond la commande pwd le chemin partant du sommet pour
60. accumuler ces petites exp riences vous construisez votre comp tence Et si un exercice d passe votre capacit ce n est pas grave la lumi re se fera peut tre plus loin dans le chapitre ou m me dans le chapitre suivant Autre approche lire le chapitre en entier avant d attaquer les exercices c est bien aussi de savoir o on vous conduit avant qu on ne vous y emm ne Vous allez ainsi prendre conscience que tout se tient que les fragments de connaissance s emboitent les uns dans les autres pour reconstituer progressivement un puzzle dont la coh rence globale ne vous apparaitra v ritablement qu apr s plusieurs ann es d exploration En fonction de votre progression des exercices compl mentaires pourront tre sugg r s par votre tuteur pour faciliter l assimilation d un point du cours ou largir l horizon vers d autres applications du m me principe L tudiant est invit discuter le cours son contenu ou sa progression p dagogique en s exprimant sur les forums Toutes les critiques sont bienvenues sauf celles qui sugg rent implicitement que soient privil gi s des outils commerciaux autrement dit on reux 0 FONDEMENTS INTERACTION AVEC LE SYST ME Tout commence par le terminal non ce n est pas un jeu de mot mais la prise de conscience qu il n y a qu une mani re de v ritablement contr ler sa machine c est de la commander partir du terminal aussi appel la console de commande Cette section est
61. aper oit qu on a oubli par exemple le mot return c est trop tard Sauf que si c est un one liner l utilisation de la touche curseur haut r affiche la d finition compl te et permet de la corriger Oh c est aussi bien s r possible avec une d finition lignes multiples mais a demande un peu plus d attention Un exemple similaire serait celui de la fonction triple de la section d finition de fonction ici aussi d finie sur deux lignes la 2 tant tabul e deftriple truc iB 2 im truc 3 8 Que pour indenter on mette des tabs ou espaces n a gu re d importance et c est comme on veut m me si les statistiques montrent que les programmeurs PYTHON pr f rent utiliser des espaces Mon conseil si possible faire des one liners comme ca pas de 1 liners py triple py question inutile Au passage remarquez que l alin a code 0x0A def impair N return N symbolis par LF c est justement ce qu on obtient en pressant def pair N return not impair En d autres termes ce qu il doit y avoir dans le fichier c est exactement ce qu on aurait tap sous l interpr te y compris les indentations et les i alin as D ailleurs comparez avec les d finitions interactives ci contre sachant que impair N return N 208 c est l interpr te qui met les gt gt gt et les notez l espace qu il ajoute EXSdef pair N return not impair N B plus et moi
62. au d but juste avant le if et regardez ce qui se passe lorsqu on demande taille zut gt gt gt taille zut appe Lat Me 3 NB la fonction repr retourne une repr sentation interne PYTHON de l objet pass en argument ce qui a ici pour effet d afficher les quotes qui d limitent la chaine on aurait pu s en passer mais je tenais ce que vous constatiez de vos yeux ce que voit r ellement la fonction quand elle est appel e la toute derniere fois l expression s 1 ne retourne plus rien une chaine vide donc not s value True et c est pr cis ment le cas o la fonction retourne la valeur 0 Or cette valeur tait attendue par une expression 1 taille s 1 dont l valuation avait t diff r e par la n cessit d valuer d abord la sous expression taille s 1 Maintenant qu elle a obtenu la valeur 0 elle peut enfin y ajouter 1 pour retourner cette valeur l appelant et ainsi de suite d ou la valeur finale 3 Certes il y a d autres mani res de calculer le nombre d l ments d une s quence mais aucune n exprime ce calcul d une mani re aussi simple et aussi concise D autant que cod e par un GEEK la fonction n est plus qu un tout petit ridicule bout de code un ONE LINER def taille s return s and 1 taille s 1 or 0 Car y regarder de pr s les if et les else ne sont jamais que des pr dicats logiques manipul s par une syntaxe plus facile pour l ceil def taille s retu
63. autres n en tant que des exemples d application amalgam s avec des principes d un autre ordre ceux de la conception de programmes de leur architecture et de l art de coder le minimum pour qu il fasse le maximum Au terme de ce cours l tudiant pourra aborder de facon autonome l apprentissage de n importe quel autre langage de programmation tant il est vrai que dans le principe ils se ressemblent tous Ce cours de programmation s appuie sur un langage particulier mais ne doit pas tre per u comme sp cifique de ce langage tous les concepts utilis s peuvent tre exprim s de facon similaire dans d autres langages encore que les mots et les r gles de syntaxe vont certainement varier l important c est d apprivoiser les notions qui fondent l approche programmatique et les concepts techniques apr s il n y aura pas grande difficult pour s adapter un autre environnement guide de lecture la diff rence d un cours en pr sentiel o tout est rab ch 2 fois un support de cours crit ne pr sente que tr s peu de redondance on la remplace autant que possible par des renvois d autres sections Il en suit que le texte est relativement dense au moment de sa r daction chaque mot a t pond r pour viter toute ambiguit et garantir qu il n y aurait pas de contresens possible Cons quence directe une seule lecture ne peut pas suffire Prenez la peine de relire plusieurs fois les passages qui vous pa
64. col2 qui permet d extraire de M tous les l ments d index 2 g n ralisez la fonction col pour n importe quelle colonne d une matrice de n lignes par m colonnes px10 3 codez la transposition lignes gt colonnes de la matrice M gt 1 4 2 5 3 6 g n ralisez pour n importe quelle matrice de n lignes par m colonnes px10 4 soit M codez partir de M la construction de la matrice ms d dede P 1 14 1 4 8 16 32 04 126 256 512 1024 27 81 243 729 2187 6561 19683 59049 64 256 1024 4096 16384 65536 262144 10485706 125 625 3125 15525 78125 390625 1953125 9765625 2 EE 14 16 5 25 J LISTES ACC S INDEXE 45 3 1 CALCUL DU PLURIEL Pour bien comprendre l int r t de structurer les donn es je voudrais vous proposer une nouvelle petite s ance de travaux pratiques sur les sequences chaines de caract res et listes Voici le probl me Presque tout le monde sait qu en fran ais le pluriel d un mot se forme en y ajoutant un s terminal quelques exceptions pr s Justement j aimerais que vous me fassiez une petite fonction qui prend comme argument le mot mettre au pluriel et retourne ce mot au pluriel je pourrai donc l utiliser ainsi pluriel clou et le r sultat serait clous Pas bien difficile n est ce pas def pluriel mot return mot s Fort bien mais que va t il se passer pour des mots comme souris OU
65. comme les double quotes les virgules et les points coll s Et a me permet de d finir proprement la fonction nettoie pour rogner ce qui d passe ponctuation e P M def nettoie mot LE MOt 1 in ponctuation mot mot r 1 ir ponctuation s mot mot 1 return mot Attention cela ne se produira pas avec ce texte ci mais il se pourrait que le mot n ait qu un caract re interdit une fois nettoy mot serait vide et mot 0 provoquerait une erreur voil donc d o viennent les bugs d un exc s de confiance Finalement voici ce que donnera le programme apr s nettoyage des mots par le nettoie qu on vient de red finir bien 1 5 bouts 4 Irustratiswe s foi garantit JA global 9 grosse 3 large 7 plaisir 1 pilus programme 1 2 7 progressivement 4 9 Lour 2 valeur 5 voulu z 8 vraiment 2 Remarquez que le qui a disparu il faisait pourtant bien partie la stoplist mais n tait pas d tect cause de sa virgule en trop Et puisqu on parle de la stoplist qui est ici bien mince verriez vous l int r t de la d finir dans un fichier de sorte qu on puisse la modifier de facon externe au programme Essayez donc ceci flux open flux write flux close SEDD IIiSL w 7 Join stoplist cris la liste comme une chaine Ouvrez le fichier stop list avec un diteur de texte et rajou
66. commodit est disponible dans beaucoup de langages modernes OBJECTIVE C C 5 2 BUTTON Nous allons en deux instructions rajouter un bouton a cette interface la syntaxe est Atk similaire celle de la cr ation d un Label Pr c E bouton Button top text La ferme 1 comuandetop destroy La ferme bouton pack o l appel de la m thode pack joue le m me r le que pr c demment calculer la taille du nouveau widget pour le compacter apr s le widget existant toujours au centre par d faut La diff rence int ressante c est qu un bouton je peux associer une commande qui sera appel e au moment o avec la souris je clique sur le bouton ici je me contenterais d une m thode existante pour faire simple mais nous verrons plus tard qu on peut associer un bouton n importe quelle fonction qu on veut bien d finir et m me diff rencier selon qu il s agit d un clic gauche centre ou droit et que le bouton a t rel ch ou non En fait j ai besoin de non pas 2 mais 3 instructions la troisi me est indispensable pour faire de mon 2011 11 23 22 10 16 2007 2012 par J Feat 76 FORMES ET TRANSFORMATIONS programme un v ritable PLUG IN et c est l appel la m thode mainloop from Tkinter import top Tk fen tre maitre message Label top text coucou a va fg red message pack bouton Button top text ferme la command top destroy bouton pack
67. controle utilise des donn es structur es interpr t es par un moteur d valuation digital num rique de l anglais digit chiffre emprunt au latin digit doigt directory litt ralement annuaire ou r pertoire quivalent folder et dossier double type scalaire utilis pour repr senter un nombre r el en double pr cision quivalent au type float en PYTHON entier type scalaire repr sentant une valeur enti re nombre entier sign ou non EPROM acronyme anglo saxon pour erasable programmable read only memory valuation m canisme qui calcule la valeur d une expression un litt ral est sa propre valeur une variable a la valeur avec laquelle on l a d fini et une expression non atomique est valu e selon les r gles syntaxiques en vigueur dans le langage event driven programming voir programmation dirig e par les v nements event manager voir gestionnaire d v nements fichier structure de donn e repr sentant un conteneur de donn es g n ralement sur disque et souvent statique par extension d note le conteneur lui m me ou son nom ou encore son contenu 56 les fichiers ou plut t flux unix standard stdin stdout et stderr sont dynamiques et repr sentent respectivement le clavier et l afficheur 170 flash memory voir m moire flash float type scalaire repr sentant un nombre r el en virgule flottante en C il est implicitement en simple pr
68. convenablement DATA INSTRUCTION EMULATION CO X load X data data X C8 X store X data data X A PROTOTYPAGE D APPLICATIONS 133 En pratique nous avons d j utilis ce mode d adressage dans nos programmes par exemple la section 4 3 O AF FA le utilisait comme cl d acc s dans AF la valeur extraite par FA le ou encore la section 4 4 ou op m a 0 se servait du 1 element de la liste extraite de la table m pour retrouver dans op l op rateur appliquer Notez que pour la premi re fois j ai t amen coder l instruction PYTHON en mettant un X pour repr senter l inconnu l o jusqu pr sent j avais vraiment une valeur donn e dans l exemple ce X me permet de formaliser l expression PYTHON autrement dit de d crire de fa on g n rique la forme de l expression qui deviendra effectivement interpr table lorsque j aurais substitu X la valeur sp cifi e dans le code machine que je suis sur le point d interpr ter REPR SENTATION FORMELLE Plut t que X je vais utiliser le symbole _ pour la lisibilit d une part mais aussi pour viter tout risque de conflit avec une vraie variable du programme ce qui fait que les instructions d j d cortiqu es plus haut vont maintenant prendre une forme totalement g n rique DATA INSTRUCTION EMULATION 00 load A _ 40 load A data CO load data data _
69. copy of this License Preserve the section Entitled History Preserve its Title and add to it an item stating at least the title year new authors and publisher of the Modified Version as given on the Title Page If there is no section Entitled History in the Document create one stating the title year authors and publisher of the Document as given on its Title Page then add an item describing the Modified Version as stated in the previous sentence J Preserve the network location if any given in the Document for public access to a Transparent copy of the Document and likewise the network locations given in the Document for previous versions it was based on These may be placed in the History section You may omit a network location for a work that was published at least four years before the Document itself or if the original publisher of the version it refers to gives permission K For any section entitled Acknowledgements or Dedications preserve the Title of the section and preserve in the section all the substance and tone of each of the contributor acknowledgements and or FORMES ET TRANSFORMATIONS dedications given therein L Preserve all the Invariant Sections of the Document unaltered in their text and in their titles Section numbers or the equivalent are not considered part of the section titles M Delete any section Entitled Endorsements Such a section may not be included in the Modified Version
70. d instances celui de la programmation dirig e par les v nements EVENT DRIVEN PROGRAMMING de sorte que des v nements ext rieurs au programme comme l enfoncement d une touche du clavier ou des mouvements de souris vont d clencher l activation de certaines fonctions express ment d sign es pour les g rer Tout se passe en fait comme si votre programme tait Un PLUG IN connect au FRAMEWORK Tkinter ce qui vous permet de sp cifier quels v nements vous int ressent ainsi que ce que vous voulez en faire Le concept de FRAMEWORK charpente est relativement r cent framework 1985 il s agit d un ensemble de ressources rassembl es dans programme qui fait par lui m me une sorte de MH P a lt biblioth que mais qui permet d autres programmes de se brancher PLUG sur son interface afin d en exploiter les v nements fonctionnalit s Dans une telle architecture ce n est pas votre PLUG IN qui contr le le d roulement global du programme c est le FRAMEWORK qui lui d l gue ponctuellement la gestion HANDLING de l v nement qu il a intercepte Le concept de framework est tellement commode qu il est maintenant employ pour un bon nombre d autres fonctionnalit s du syst me d exploitation par exemple tous les programmes frontal graphique se servent du m me framework pour l dition de texte l avantage du point de vue du programmeur c est qu i
71. de l interface proprement dite mise part la variable locale L qui repr sente le nombre d actions restantes pour 11 11 23 22 10 2007 2012 par J Feat 122 la pendaison e T label de tirets doit tre actualis en fonction de devine e P label de pendre d pend de L doit tre converti en texte par la fonction str e M label du mot n est affich qu en fin de pendaison SCRIPT COMPLET une petite liste de mots pour tester mots pendu xerox clepsydre naims mississippi wagon split from random import choice mot tai tro dev def def def choice mots 11 len mot u ine trou taille actualise event global devine if P and trou in devine nouveau valide event char mot devine if devine nouveau devine nouveau else eval P pop 0 affiche valide C original devine R for x in range taille if original x R original x else R devine x return R affiche L len P LT configure text devine LP configure text str L if not L LM text mot from Tkinter import top top top C C D title devine le mot bind Key actualise Canvas top bg light grey height 200 width 200 ack side LEFT la pendaison une liste de dessins P c create 185 140 185 widtn 20 Fill maroon c ctXeate Janei70 183 70 10 width 7 Pill mazoon c cre
72. de ce type d objet sont encapsul es avec C est le principe fondamental d otthogonalit s arranger pour minimiser les effets secondaires qui peuvent se produire lors de la mise au point Ici notre application n a qu une fen tre mais pour une r alisation plus complexe l approche INLINE CODING va vite devenir intenable La definition de la classe Salutations ci dessous correspond aux principes g n raux expos s au d but du 7 4 remarquez au passage que dans la d finition d une classe la d finition des m thodes de cette classe est indent e d un cran Les deux premi res m thodes dis_bonjour et dis_au_revoir sont telles que je les aurais cod es au TOP LEVEL ceci pr s que j ai d leur rajouter un param tre self c est ce qui permet au m canisme d h ritage de suppl er le bon objet m me si la m thode tait h rit e 17 niveaux plus bas La raison pour laquelle je les ai plac es en haut de la d finition c est qu elles doivent tre d finies avant que la troisi me n essaye de les lier leur bouton respectif La troisi me __init__ est le nom de la m thode invoqu e de fa on automatique lorsqu on va instancier cette classe cette m thode prend ici deux param tres e le 1 nomm conventionnellement self ne correspond pas un argument explicite il est implicitement pourvu et repr sente l instance qui invoque la m thode dans notre cas ici ce sera prog e le 2 appel ici W co
73. de d coder px18 2 codez ce programme et faites le tourner en appelant la fonction run celle ci prend un argument le nombre de tours a faire avant d arr ter le calcul Remarquez que ce nombre de tours va tre multipli par 4 pour tenir compte du fait que ce qui est repr sent comme une simple instruction en haut de la section 1 0 1 2 4 demande en r alit quatre instructions en BYTE CODE titre indicatif il faudrait 13 tours pour obtenir la racine de 10 Par ailleurs il y a quelque chose qui n est donn nulle part c est le nombre dont il faut extraire la racine carr e il doit absolument tre d fini dans m avec la cl d index 2000 Enfin notez que toutes les divisions devraient tre effectu es sur des nombres r els et non des entiers comme semble le sugg rer l original corriger les donn es sinon ca ne marchera pas comme il faut ni m me du tout px18 3 adapter ce m me simulateur pour interpr ter le programme de l exercice 1 6 page 14 du m me document px18 4 adapter ce m me simulateur pour interpr ter le programme de l exercice 1 7 page 15 16 du m me document De cette section il n y a rien d autre retenir que le principe un programme qui exploite un dictionnaire de fonctions pour interpr ter un programme repr sent par un dictionnaire 13 notez que apply en PYTHON a exactement le m me comportement qu en LisP essayez apply 2 3 pour le v rifier DIC
74. des langages de programmation ou la structure de contr le la plus vidente est la s quence d instructions imp ratives injonctives style recette de cuisine ce qui n emp che pas s ils disposent de fonctions de les utiliser dans le style fonctionnel index valeur enti re positive utilis e pour acc der dans une s quence l l ment de ce rang dans la plupart des langages les index commencent O ce qui permet d acc der l l ment de rang c est dire le premier l ment C est aussi un doigt qui montre ou se trouve la donn e indice voir index instance repr sentant d une classe ou d un type objet g n r par r ification r alisation instruction une expression valuable donc bien form e dans un langage imp ratif int dans de nombreux langages type scalaire d une valeur enti re integer signifie entier en latin et en anglais se prononce intadzaril interpr tation tout est interpr t en contexte y compris la tension lectrique d un bit le langage machine par exemple suppose l interpr te ad quat ou processeur faute de quoi rien n a de sens 59 peut on traduire ca par table de hachage 60 le langage machine ou langage du processeur est typiquement imp ratif et ne dispose pas de fonctions 61 certains langages permettent d utiliser des index n gatifs exprimant ainsi la possibilit d indexer une s quence en partant de la fin en fait
75. devenue consommatrice de petits programmes dont on a un besoin imm diat mais qu on jette apr s usage comme un mouchoir en papier L exemple typique est celui du secteur sPECIAL EFFECTS de l industrie cin matographique LUCAS FILMS recrute des programmeurs de post production capables de torcher en quelques minutes un bout de code qui simule une boite de dialogue ou une barre de progression qu on utilisera jamais plus ni pour cette r alisation ni ailleurs Certes ca ne veut pas dire qu il n y a plus de place pour les programmeurs de longue haleine pour des d veloppements sur plusieurs ann es mais la tendance et la pr f rence va la programmation prototypique celle qui peut tr s vite d montrer la faisabilit d un concept donc donner rapidement au MANAGER une id e du co t conomique de la solution faute de quoi il ne prendra pas le risque d y investir ses ressources humaines Les prototypes pr sent s ici exploitent chacun une facon particuli re de mod liser les donn es du probl me en vue d en faciliter le traitement donc d acc l rer le codage du programme MORPION Structures de donn es parall les de niveaux diff rents SEGMENTS d compose les donn es pour faciliter leur recomposition la vol e PENDU simulation de processus concurrents cooperatifs L ORDINATEUR EN PAPIER filtrage dynamique index par les donn es lls ont tous un point commun la partie CODE proprement dite est ridiculement r duit
76. distincts pour tester son bon fonctionnement et sans doute m me plus puisque vous avez d j pris la peine de r soudre les exercices 13 5 et 13 6 D ailleurs avant m me d arriver ce stade nous pourrions d j nous contenter de recopier manuellement les donn es du fichier PDF pour les coller dans l interpr te sous forme de texte par exemple pour le programme myst re 13 8 gt gt gt code 10 3A 00 31 40 32 60 33 48 32 49 33 40 33 22 FF 12 34 41 32 10 44 split gt gt gt code eval Ox x for x in code et hop une petite ligne pour tester que c est bien la m me chose que l original 41 sans parler des commentaires d ailleurs non d limit s formellement 42 h las non document e dans le but malicieux de servir de pi ge dans l exercice 13 4 PROTOTYPAGE D APPLICATIONS 131 gt gt gt TOY code print 020 G 10 3A 00 31 40 32 60 33 48 32 49 33 40 33 22 FF 12 34 41 32 10 44 sans oublier qu il faut m moriser quelque part l adresse origine de ce segment de programme et garder les deux ensemble par exemple dans une table d associations type dict segment table 1 segment rable l3 5 offset 0x30 code code ce qui permet d y mettre galement le tout premier segment celui du boot strap loader apr s l avoir normalis sachant que l adresse origine de ce segment est par d finition 0x00 gt gt gt code 149 20 49 22 40 20 48 21 CS Z1 40 22 21 01 12 iF
77. dont on pourrait avoir besoin dans plusieurs scripts diff rents dans cette optique il para t judicieux de le conserver dans un fichier part sachant qu il est ais de l importer dans un nouveau programme ou il se comporte alors comme s il avait t litt ralement inclus dans le programme les variables et les fonctions d finies dans le module sont directement disponibles CR ATION D UN MODULE Pour faire de plusieurs un module mettez la d finition de pluriel dans un fichier nomm plusieurs py et c est tout vous pouvez bien s r y mettre des commentaires sur comment a marche et quels bugs n ont pas encore t corrig s c est certainement tr s utile mais ce n est pas n cessaire pour faire un module Voil donc le contenu de plusieurs py def pluriel mot return mot s Maintenant il ne reste plus qu coder le script qui va utiliser ce module il doit contenir en pratique tout ce que contenait le script autonome du px11 3 hormis la d finition de la fonction modularis e ainsi que les d finitions de variables qui allaient avec s il y en avait Donc pour faire simple voici le contenu du script essaye usr bin env python Import plusieurs import sys if len sys argv gt 1 print plusieurs pluriel sys argv 1 else exit argument manquant mot au singulier Le simple fait de rencontrer une instruction import va obliger l interpr te a compiler le module ce qui va g n rer un fi
78. es dans l instance elles sont obligatoirement h rit es Peut tre que ca vous aiderait clarifier les choses de prendre votre diteur de texte et dans le code de remplacer e W par window e self par instance Mais ce ne sont que des symboles comprendre ce qu ils repr sentent est plus important 11 11 23 22 10 2007 2012 par J Feat 112 FORMES ET TRANSFORMATIONS px30 4 testez le code ci dessus notez que les m thodes bonjour et aurvoir utilisent print c est donc sur votre terminal que vous verrez s afficher leurs messages Et peu importe l ordre des d finitions de boutons leur placement correspond l ordre dans lequel leur m thode pack est appel e 7 5 STRATES LOGICIELLES L objectif de cette rapide pr sentation est de vous permettre de comprendre comment fonctionne le systeme graphique qui tourne derri re PYTHON et qui utilise la a travers des appels des modules cod s en TCL prononcer tickle et en ANSI C car pour ceux que ca peut int resser PYTHON est interfa able dans les 2 sens avec d autres langages de script ou pas Votre programme cod en PYTHON n est jamais que la 7 couche qui s ajoute J J b P MER x programme Python python par dessus le module Tkinter lui aussi entierement cod en PYTHON mais ef s appuyant sur Widget itk labeledwidget itk et scrolledwidget itk des scripts cod s en Tkinter boe Arc i T
79. et la touche D CONTR LE D est aussi parfois appel EOT end of transmission Si cette commande est inop rante il est encore possible de suspendre le processus avec la commande Z et dans tous les cas on devrait pouvoir SORTIR de l interpr te en tapant cette instruction qu on expliquera plus tard exit Ou encore de fermer la fen tre tout b tement PREMIERS PAS Lancez PYTHON comme ci dessus et utilisez l interpr te pour valuer en s quence les quatre expressions ci apr s 2 3 4 ra Tis 4 Wq oae atm a b Pour chaque expression verifiez la reponse de PYTHON est ce bien celle que vous attendiez Sinon quelle est votre erreur htp hopl murdoch edu au 4 cf LISP DONN ES L MENTAIRES 17 e La premi re r ponse n est peut tre pas pour des raisons syntaxiques celle que vous attendiez elle s explique par la priorit des op rateurs le produit tant valu avant la somme il est toujours possible de parenth ser une expression pour forcer l valuation voulue ainsi 2 3 4 devrait retourner 20 e La deuxi me r ponse met en vidence un aspect purement s mantique les op rateurs se comportent diff remment selon que leurs op randes sont des nombres ou des chaines de caract res c est dire des mots e La troisi me montre qu une s quence ou chaine de caract res peut tre aussi bien d limit e par des guillemets simples que par des doubles e
80. f info2 pickle load f f close J ai fait expr s de nommer mes variables diff remment pour qu il soit bien clair que seules les valeurs sont envoy es dans le fichier Ainsi info1 et info2 auront respectivement les valeurs de AF et FA lorsque j en ai fait le dump la veille la diff rence de la technique pr c dente pickle dump n crit pas du texte il se contente de transf rer dans le fichier la repr sentation interne de l objet celle qu a en m moire l interpr te pour l objet en question et pickle load recharge cette repr sentation directement reconstituant ainsi l tat de la m moire pour cet objet Il n y a donc plus besoin d valuer quoi que ce soit 4 3 4 FICHIERS ENCORE PLUS Il n est pas question ici de d tailler toutes les manipulations possibles sur les fichiers mais savoir lire et crire est le minimum qu on puisse demander un programmeur d ailleurs pour ce qui est des donn es purement textuelles tout peut tre r alis avec les fonctions et m thodes d crites en 4 3 1 le reste ce sont des commodit s pr programm es qui permettent d all ger le code et de gagner du temps S il vous en faut vraiment plus consultez la documentation e a section FICHIERS de la documentation liste toutes les op rations possibles sur ce type d objet e a section PERSISTANCE DES DONN ES explique entre autres comment acc der des bases de donn es en mulant le langage sat ainsi
81. fait pas de diff rence formelle entre valuer 123 et valuer 1 2 3 Notez bien qu on a ici affaire une double valuation e 1 est implicite il s agit de retrouver la valeur dez 1 2 3 e 2 me est due l application explicite de eval et retourne la valeur 6 1 3 M CANIQUE DE L VALUATION La raison en est que la fonction eval est implicitement utilis e par l interpr te chaque fois que vous entrez une expression autrement dit l valuation est un m canisme implicite il ob it quelques r gles simples e valuer un itt ral retourne ce litt ral comme valeur valuer une variable retourne la valeur par laquelle elle a t d finie e valuer une d finition de variable consiste valuer l expression qui la d finit et lier cette valeur la variable la variable elle m me n est pas valu e puisqu elle est sur le point d tre d finie cette op ration ne retourne pas de valeur e valuer une expression consiste valuer chaque constituant de gauche droite si c est une variable ou un litt ral le m canisme est d crit ci dessus Si c est un op rateur ses op randes sont valu s de gauche droite avant de leur appliquer l op ration que repr sente cet op rateur le moins unaire s applique imm diatement son op rande 10 Les op rateurs binaires se pr sentent la plupart du temps sous forme infix e c est dire qu ils attendent un premier op
82. fini mais une indication que l intervalle d adresses de 0x18 0 1 est initialis avec rien que des z ros Pour le 13 8 on nous donne l adresse ou charger le code lequel est ramen une s quence d octets ce qui est semble t il le format le plus simple qu on puisse manipuler Le 13 9 liste l adresse et le code machine correspondant plus simple que le 1 mais quand m me plus complexe que le 2 de surcroit ce format pose un autre probl me du fait que la pr sentation n en est pas uniforme le code source est le plus souvent list par blocs de deux octets mais de temps autre il n y en a plus qu un par ligne 6C 41 71 6E 10 6E 70 00 72 00 Il est vrai que dans ce cas particulier le nombre d octets isol s est toujours pair mais il ne va pas tre simple de lire les donn es d un tel fichier en gardant cette forme pour le code source PR PARATION DES DONN ES Nous allons donc commencer par normaliser tous les programmes au format 13 8 ce qui implique que la toute premi re valeur indiqu e dans le fichier soit l adresse de chargement du programme suivie des d octets cons cutifs charger partir de cette adresse il nous faudra donc manuellement conformer le programme du boot strap loader ainsi que celui de l exercice 13 9 Nous pourrons alors crire une fonction PYTHON capable de lire du code machine au format 13 8 et en interner les valeurs dans le vecteur data nous aurons au moins 3 programmes
83. g n par les contraintes de la repr sentation puisque les codes points peuvent pour des op rations superficielles tre manipul s comme des unit s l mentaires mil startswithi g True gt gt gt il de beuf count o 2 gt gt gt Tg an meilleurs veux and c in garcon l addition I True gt gt gt no l Find retourne l index o commence la sous chafne 2 D CODAGE AUTOMATIQUE Mais il n y a pas que les manipulations directes la console il y a aussi des contraintes sur les fichiers que l Interpr te peut tre amen lire que ce soit des scripts ou des fichiers de donn es textuelles ce deuxi me cas sera examin de plus pr s dans un autre chapitre On a dit plus haut que gedit enregistrait encodait ses fichiers en utf 8 par d faut mais a PYTHON n en sait rien il faut donc le lui dire en d clarant le codage sur la premi re ou la deuxi me ligne du script Coding WLI videmment cette d claration doit tre coh rente avec le v ritable codage du fichier si vous enregistrez ce fichier en iso 8859 1 remplacez ut 8 par latin 1 L important c est que PYTHON sache de quel codage il s agit pour pouvoir le d coder et l interner au format qui convient Ainsi pour toute version de PYTHON ant rieure 3 0 ne rien mettre du tout serait quivalent pote Going asc qui est l encodage par d faut de PYTHON Pour vous en convaincre essayez don
84. il servira de base pour comprendre plus tard les principes d un v ritable compilateur sommaire fondements interaction avec le syst me 7 D donn es l mentaires eene 13 2 manipulation de s quences ee Me 25 41 dictionnaires acc s par cl 57 interfaces fen tres et boutons 73 architecture de programmes eme 87 D infrastructures logicielles ssec etra aceto einer 103 protolypadge d applications 115 8 1 affichage par segments conso nave tota tee bonito ue Sb Sie nb Saa edet pes 117 022 DEMOU EUM 120 a fre 124 8 4 l ordinateur en Papel 2 55 32 ee 129 9 annexes 143 A TE 168 GIOSSAIG see sense espere de eee ste 171 table des mati res week eee he see bese eens eet bein Ex wea ex ue gea s 178 35 approximativement au tournant du mill naire cf http agilemanifesto org 36 JUST IN TIME COMPILER Cf http en wikipedia org wiki Just in time compilation 116 FORMES ET TRANSFORMATIONS Depuis les ann es 80 fleurissent de ci de l des methodologies dites de d veloppement rapide en effet RAD est devenu un BUZZ WORD tr s en vogue mais force est de constater que globale
85. index ou par tranches d index autrement dit par intervalles Par contre certaines m thodes typiques de chaines comme upper ou lower ne sont pas applicables aux listes qui ont elles leurs m thodes sp cifiques La section 2 est une breve incursion dans le monde de la programmation fonctionnelle monde qui fait l objet d un cours sp cifique c est pourquoi je n en retiens ici que l aspect technique le plus euh fonctionnel En section 3 nous verrons comment cr er un ex cutable autonome utilisable a la console le sch ma de principe est celui de tous les programmes unix qui prennent leurs arguments depuis la ligne de commande La section 4 traite du codage des textes II n est pas n cessaire de tout comprendre ni m me de tout lire il suffit de savoir que si PYTHON exhibe la repr sentation interne des donn es c est qu il ne peut pas faire autrement Le sujet aurait probablement ete mieux integre dans le chapitre 6 qui expose quelques techniques de traitement de donn es textuelles il est donc un peu premature mais ces explications visent a satisfaire imm diatement une demande assez generale sommaire fondements interaction avec le syst me 7 donn es l mentaires cem nnne 15 2 manipulation de s quences emHR HH 25 9 listes acc s index eere mnn nn nn aa 41 3 1 calcul du pluriel ss nee ce se 45 3 2 programmation fon
86. instructions un programme existant Cependant il est des cas ou la conception du programme s appuie au contraire sur le fait que les donn es manipuler proviennent de l interaction avec l utilisateur et ca c est ce qu on appelle EVENT DRIVEN PROGRAMMING Ou programmation pilot e par les v nements sommaire fondements interaction avec le syst me 7 1 donn es l mentaires ceeeee Henne 15 2 manipulation de s quences 25 9 listes acc s index auct precios Pa oa genera den ku et tns E UEBER COE ERE EE 41 Z dictionnaires acc s cois 57 b interfaces fen tres et boutons Re 73 e 74 OO UI 75 omens git ire re er ete ee ere ee Tee 76 ET MAME atone cate eee EI M LEE sees eet ERU UEM 78 5 5 CANVAS date E act cc a 79 5 6 animation de SPOE au 81 5 7 graphes de TONCUIONS cies pota vitis iier soma vibus vitse deit 83 architecture de programmes eH 87 CD anfrasiructures IodiciellOS 22 103 prototypage d applications a a 115 143 ee ce M cea 168 GIOSS Se en 171 table des mati res b c CC x i Wa C Rie e C C a CE o o d 178 74
87. int gre dans l interpr te un ensemble de fonctions pr d finies dans un fichier qu on appelle un module le module turtle est en principe distribu avec toutes les versions de PYTHON Sont d finies dans ce module la fonction forward qui trace un trait en alignant n points et qui effectue une rotation de m degr s Ce programme prouve que l analyse est bonne Maintenant il s agit d identifier ce qui peut tre factorise d un coup d il vous voyez qu apr s avoir trace un trait on effecture une rotation d un quart de tour pour preparer le trait suivant c est vrai qu on a n glig de le faire apres le dernier trait puisque ce n tait pas la peine mais si on l ajoutait on aurait quatre paires d instructions absolument identiques A partir d une sequence d actions nous avons caract ris le proc d nous en avons fait une abstraction pr te tre programm e for x in range 4 forward 100 left 90 Et ce stade on pourrait objecter que le programme reste quand m me tres particulier puisqu il ne sait faire que des carr s noirs de 100 points de c t D accord mais rien ne m emp che de d finir une variable taille 100 et de m en servir comme argument de forward de sorte que je puisse r gler la taille du carr comme je veux quant a la couleur il me suffit d appeler la fonction color en lui passant par exemple la valeur red ou green px06 1 d finissez taille appelez color b
88. introduira une quatri me structure de contr le l it ration En section 5 une br ve incursion dans le monde de la programmation objet permettra d apprivoiser la notion de m thode sp cifique d une classe d objets ce qui ne pr sente pas grande difficult pour quiconque a d j admis le principe qu un m me op rateur pouvait avoir un comportement diff rent selon le type de ses op randes sommaire fondements interaction avec le syst me 7 D donn es l mentaires esee 13 2 manipulation de s quences 25 2 1 cha nes de caract res et index 26 2 2 d finition de fonction coo ouo VER EUR ES ca bx Ute e Dew wk VE P e 27 2 9 distinguer le Vial du TAUX rirerire 30 rag cle renee DIES ee ee ee er eer OMM CDI rere 32 2 5 notion de m thode 2 sco rr sie sement in OPE P DEESGE 37 O listes acc s indexe 2 22 41 dictionnaires lt acc s es ei en 57 b interfaces fen tres et boutons 73 architecture de programmes 87 D intfrastr cl res 2 ae ue L See 103 protolypage d applications a 115 DEE 143 Tale gt m 1
89. is a licensee and is addressed as you You accept the license if you copy modify or distribute the work in a way requiring permission under copyright law A Modified Version of the Document means any work containing the Document or a portion of it either copied verbatim or with modifications and or translated into another language A Secondary Section is a named appendix or a front matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document s overall subject or to related matters and contains nothing that could fall directly within that overall subject Thus if the Document is in part a textbook of mathematics a Secondary Section may not explain any mathematics The relationship could be a matter of historical connection with the subject or with related matters or of legal commercial philosophical ethical or political position regarding them The Invariant Sections are certain Secondary Sections whose titles are designated as being those of Invariant Sections in the notice that says that the Document is released under this License If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant The Document may contain zero Invariant Sections If the Document does not identify any Invariant Sections then there are none The Cover Texts are certain short passages of text that are listed as Front
90. la liste d instructions qui se termine par le mot cl done m me s il n y a qu une instruction Le coeur de la moulinette est donc la commande mv qui prend 2 arguments e le fichier renommer dont le nom est la valeur de x c est dire x e le nouveau nom une chaine de caract res galement fabriqu a partir x Subtilit une cha ne n est pas comme en PYTHON la m me chose qu une chaine machin x machin x dans le 1 cas il s agit d une v ritable constante alors que dans le 2 il s agit d une forme dans laquelle x se verra substituer sa veritable valeur une autre mani re de faire serait de concatener implicitement la constante et la variable machin x sera quivalent machin x utiliser la constante machin x dans une telle boucle aura pour cons quence que chaque fichier sera renomm machin x et comme mv remplace le fichier s il existe d j il n y aura plus en d finitive qu un seul fichier nomm machin x L int r t du SHELL c est que chaque commande est en fait une instruction isol e donc que rien n emp che d en assembler plusieurs en sequence dans un script pour r aliser par programme ce qu on sait faire manuellement 1 renommer les fichiers comme il se doit 2 les ramasser en une archive Supposons que le script s appelle par exemple emballe il devrait commencer par la ligne magique usr bin env bash Ce n est pas strictement obligatoir
91. la mise au point permet de verifier la syntaxe du code aucune instruction n est effectivement valu e e l option x EXCHANGE affiche juste avant leur ex cution une trace des commandes l mentaires ainsi que la valeur de leurs arguments apr s les diverses expansions et valuations y compris la substitution de commandes par l op rateur ou son homologue donc devient une liste de fichiers 1 est remplac par sa valeur etc l est possible d utiliser la commande set pour figer temporairement ces options autrement dit jusqu au prochain exit ou logout pendant la phase de mise au point voir par exemple le site lt http www delorie com gnu docs bash bashref_58 htm gt 11 11 23 22 10 2007 2012 par J Feat 166 FORMES ET TRANSFORMATIONS 9 4 2 SCRIPT EXECUTABLE Compl ment au iLP 9 3 5 sp cifier l interpr te quel que soit le langage de script il y a trois r gles a respecter pour qu un script soit utilisable en tant que commande autonome de la m me fa on que le serait zip ou ls 1 le script doit commencer par les deux octets a signature interne d un script ex cutable la suite sur la m me ligne il faut qu il y ait au minimum le chemin d acces l interpr te de ce langage on peut y ajouter des options pour l ex cution 2 le script doit tre en mode d acc s executable pour l utilisateur ou son groupe le script doit se trouver quelque
92. le reste C est caract re pour caract re rigoureusement la P m me chose que dans le fichier 05 11 11 23 22 10 2007 2012 par J Feat DOCUMENTS ANNEXES 151 Il est ainsi tout fait possible de d velopper une application en mode interactif puis de recopier le texte de la session dans un diteur de programme on y fera alors une recherche globale suivie d une suppression de tout ce que l interpr te a lui m me affich pour ne garder que le texte r ellement entr Le script ainsi obtenu pourrait tre imm diatement r inject dans l interpr te et devrait alors produire exactement les m mes effets que pr c demment Apr s si vous vous permettez d ajouter des lignes vides gratuites des commentaires ou quoi que ce soit vous de savoir ce que vous faites mais les explications de ces quelques pages devraient vous suffire pour pr dire comment ces adjonctions seront interpr t es 11 11 23 22 10 2007 2012 par J Feat DOCUMENTS ANNEXES 152 9 3 SHELL Votre premier contact avec le syst me s est sans doute produit lorsque vous vous tes identifi pour y acc der et vous tes probablement pass par la fen tre je veux parler de la fen tre de ogin bien s r En effet la plupart des syst mes modernes sont munis d une interface graphique qui occulte derri re des m taphores confortables certains aspects techniques de l environnement et du syst me d exploitation L objectif de ce document
93. listes des 6 formes pour chaque verbe px13 4 X juste pour le fun recoder l exercice px13 3 selon l approche fonctionnelle 3 3 PROGRAMME AUTONOME Tout ce que nous avons fait jusque l etait d velopp interactivement sous l interpr te mais il vient un moment ou le programme est a peu pres fini et o on aimerait pouvoir s en servir directement a partir du SHELL C est le cas du programme du pluriel notre premier script qui puisse pr tendre au statut d utilitaire presque utile ll y a vous l avez d j compris deux mani res d valuer un script e ligne par ligne comme nous l avons fait jusque l e en tant que fichier condition qu il soit r dig dans un fichier Dans ce deuxi me cas il y a quatre fa ons de demander a PYTHON d valuer un script nomm par exemple 2011 11 23 22 10 16 2007 2012 par J Feat 48 FORMES ET TRANSFORMATIONS plusieurs e depuis PYTHON execfile plusieurs charge et interpr te le fichier exactement comme si on l avait tap ligne par ligne mais n affiche pas le r sultat des valuations depuis le SHELL python plusieurs dit a PYTHON de charger et interpr ter le fichier plusieurs e depuis le SHELL si le fichier plusieurs est en mode d acc s ex cutable cf chmod et a condition que la premiere ligne du script genre usr bin env python sp cifie l interpr te utiliser il suffit de l appeler par son nom plusieurs il invoque alors implicitement l
94. m canisme Les exercices suivants ne sont pas innocents l objectif est de comprendre qu une fonction peut tre utilis e comme pr dicat autrement dit qu elle peut remplacer une ou plusieurs expressions pr dicatives litt rales px04 2 coder une fonction unaire vert qui retourne vrai si son argument a comme valeur vert et faux sinon coder de m me la fonction rouge et la fonction orange px04 3 coder une fonction unaire roule avec un param tre x de sorte qu elle ne retourne vrai que si vert x retourne vrai ou que orange x retourne vrai px04 4 coder la fonction freine avec un param tre x de sorte qu elle ne retourne vrai que si vert x n est pas vrai px04 5 coder la fonction unaire change qui examine la valeur de son argument et retourne vert s il vaut rouge ou orange s il vaut vert mais rouge pour toute autre valeur testez cette fonction en valuant la ligne suivante plusieurs reprises feu change feu feu v rifiant que la couleur du feu passe bien par le cycle vert orange rouge vert NB feu doit tre initialis AVANT de pouvoir tre utilise comme argument 2011 11 23 22 10 16 2007 2012 par J Feat 32 FORMES ET TRANSFORMATIONS 2 4 FILTRAGE Je voudrais vous proposer une petite s ance de travaux pratiques maintenant que nous nous savons en quoi consiste le traitement de l information voici comment mettre en pratique sur un
95. mais en pratique a nuit l intelligibilit du code et c est donc consid r comme une mauvaise pratique en tout cas on ne peut pas ramener 2 blocs une seule ligne il ne peut jamais y avoir plus d une instruction complexe par ligne e quand en mode interactif l interpr te rencontre un dans la ligne il passe d lib r ment en mode continuation indiqu par un en colonne 1 ce stade on peut terminer le bloc avec un simple alin a mais si on veut vraiment r diger un bloc on doit indenter au moins 1 espace pour exprimer que cette ligne appartient la s quence du bloc et pareil pour les suivantes si besoin Attention bug ce mode de continuation sera invoqu m me s il y a d j une instruction apr s le et pourtant malgr les apparences ce bloc ne peut pas tre continu la ligne suivante doit revenir l un des niveaux pr c dents Et voil pourquoi il doit y avoir une ligne vide apr s chaque definition de classe dans l exercice px30 1 il faut revenir au top level colonne 1 niveau z ro apr s chaque d finition compl te class Mammifere propl j allaite mes petits class Carnivore Mammifere prop2 je me nourris de carne class Chien Carnivore prop3 j aboie class Chat Carnivore prop3 je miaule Et c est aussi pour a que toute d finition de fonction doit tre s par e du reste du code par une ligne vide Ce n est pas
96. moi r ouverture en mode lecture texte flux read lis tout flux close c est fini Maintenant la variable texte est une longue chaine de caracteres la totalite du contenu du fichier y compris les sauts de lignes dont le code ascii est 10 et la repr sentation en tant que caract re n comme new line Ce qui a pour cons quence qu une expression comme texte split n retourne comme valeur une liste dont chaque l ment est le contenu d une ligne ce qui entra ne que texte split n 0 nous retournera le texte de la premi re ligne Un programme qui tourne bien c est un plaisir mais un Et le reste l avenant Maintenant le probl me est d indexer les mots de chaque ligne en construisant pour chaque mot une liste des n de ligne ou il apparait Souvenez vous du Mississippi et pensez en termes de dictionnaire qu on appellera ici ndex pour des raisons pratiques 18 il faut tre d j d ment connect pour t l charger http foad iedparis8 net claroline courses E464 document python code indexe moi ARCHITECTURE DE PROGRAMMES 89 e sile mot n est pas encore dans l index je l ajoute en tant que cl et j y associe une liste d un seul l ment le n de la ligne en cours e si le mot est d j dans l index c est qu il a d j une liste de n de lignes laquelle il suffit d ajouter un nouvel element le n de la ligne en cours Pour v rifier que a peut fonctionner comm
97. ne au 2 aspect de la d marche TOP DOWN APPROCHE CONCEPTUELLE Concevoir un programme a demande un effort d abstraction de projection Le bon vieux principe diviser pour r gner est ici la cl de la r solution de probl mes Il faut s arranger pour ramener le probleme a des sous problemes plus faciles a resoudre et recursivement C est pour cette raison qu il m arrive de coder des fonctions idiotes qui retournent ce qu on leur a envoy faire comme si le probleme etait d j resolu permet de conserver l altitude Cette d structuration descendante c est la partie analyse de la t che de l ANALYSTE PROGRAMMEUR Et en principe l analyse guide le design du programme jusque dans ses moindres details en partant de la forme originale de l information de sa representation donc des objets que le programme va manipuler et des transformations qu il leur faudra subir pour aboutir a la forme finale le resu tat du programme Remarquons que c est une approche orient e objet qui ressemble beaucoup a celle du potier exp riment si je veux obtenir ceci il faut que je fasse a et quand j aurai obtenu telle forme il me sera plus facile de la decomposer pour en obtenir une autre et une autre encore jusqu ce je puisse recombiner uniquement celles qui m int ressent l anse et le pot Voil donc en definitive ce qu on appelle le traitement de l information tout est formes et l art de INFRASTRUCTURES LOGICIELLES 105 pr
98. offset d calage par rapport au d but de la m moire 11 11 23 22 10 2007 2012 par J Feat 132 FORMES ET TRANSFORMATIONS Prenons l exemple du load imm diat opcode 0x00 utilis dans le 13 9 l offset 0x66 traduite en PYTHON l instruction 00 6 deviendrait simplement A 0x6C un detail pr s l incr mentation automatique du registre PC est microcod e et PC doit tre incremente de 2 le nombre d octets consomm s par l instruction L mulateur devra donc effectuer OFFSET DATA INSTRUCTION EMULATION 66 00 6C load 6C 0x6C PC 2 En fait dans ce langage toutes les instructions consomment 2 octets il nous parait donc judicieux de d l guer au s quenceur i e la boucle d mulation le r le d incr menter le compteur ordinal PC nous ferons donc d sormais comme si c tait d j automatis Autre exemple celui de l instruction suivante qui code le transfert de la valeur de A vers la m moire que nous avons appel e pour le moment data OFFSET DATA INSTRUCTION EMULATION 68 48 8D store 8D data Ox8D A Et juste apres offset 0x6A nous tombons sur une instruction de branchement inconditionnel jump qui a pour effet de modifier explicitement la valeur du registre PC avec brn et biz ce sont les seules instructions dont l ex cution altere directement le registre PC il faudra y faire attention l mulation du sequenceur ne doit pas indirectemen
99. on aurait sp cifi dans un BROWSER pour atteindre une page wEB Cette fonction n est pas intrins que il faut aller la chercher dans un module from urllib import urlopen flux urlopen http www iedparis8 net ied Une fois le flux ouvert on utilisera les m mes m thodes de lecture que pour un fichier page flux read toute la page d un coup Ce qui signifie qu un programme cod en vue de manipuler du texte en provenance d un fichier fonctionnera indiff remment avec un fichier local ou distant c est dire en r seau Le script pr par pour px28 4 aura besoin d une petite modification puisque la r f rence indexer n est plus un n de ligne mais un URL en pratique a veut dire que le 3 argument de la fonction indexe n est plus un nombre mais une chaine ce qui ne fait d ailleurs aucune difference pour indexe donc ne requiert aucune modification du module dexlex Dans le script ci dessous j ai ajout le mot MODIF en commentaire pour chaque instruction modifi e ou ajoutee Ainsi donc avec deux lignes de plus il suffirait d un seul script pour deux usages tester le debut du nom du fichier avec la m thode stariswith permet de decider s il s agit d un URL ou d un fichier local ensuite d finir une variable url comme l URL ou rien c est dire None permettra l appel de indexe de passer cet URL la place d un n de ligne par simple valuation de l expression bool enne url or
100. op rande gauche est l une des valeurs de son op rande droit point de vue ensembliste alors qu utilis dans une expression for il donnera tour tour chacune des valeurs de la s quence donn e comme op rande droit IT RATIONS Le for introduisait le concept d it ration permettant de r p ter l ex cution d une s quence d instructions n cessit vidente pour ceux qui veulent programmer de mani re compacte OBJETS M THODES Enfin on sait d sormais qu part les symboles d op rateur tout symbole manipul par ce langage est un objet et que chaque type d objet dispose de m thodes sp cifiques qui n ont de sens que pour ce type Et comme la s quence est en soi un type a explique pourquoi tous les types de s quence ont en des m thodes en commun comme la fa on d adresser un l ment 3 LISTES ACCES INDEXE Une liste est une structure de donn es qui permet d agreger un ensemble de valeurs et de les manipuler en bloc ou en detail Elles servent a representer des donn es structurees elles sont extensibles a volonte et peuvent donc accommoder des representations dynamiques qui Se construisent au fur et a mesure du traitement de l information Les listes ne sont qu un cas particulier de sequence tout ce qui a t expos dans le chapitre pr c dent s applique donc galement a la manipulation de listes y compris les op rateurs fondamentaux comme in et mais aussi les techniques d acc s par
101. par segments c est qu un tel programme est minemment interactif e chaque fois qu une nouvelle lettre est propos e il faut afficher devine le mot le mot en laissant les trous des l ments manquants e le dessin du pendu doit tre progressif en fonction de la validit de la lettre propos e par le joueur Le dessin proprement dit ne pose pas vraiment de probl me si on utilise la technique qui repr sente le code du dessin sous la forme d une liste d expressions valuer La seule contrainte c est que le dessin doit tre compl t en exactement 10 tapes je vais donc pr parer un gibet une estrade une potence en 2 parties et une corde et il me restera 6 tapes pour la t te le corps et les 4 membres 9 Pour les mots je pourrais avoir pr par un fichier avec des centaines de mots mais dans le contexte d un prototype trois ou quatre mots suffisent d montrer la faisabilit je choisis de les rassembler sous la forme d une liste Je sais que je dispose d une m thode de choix al atoire et que tirer un mot au hasard sans une s quence n est pas vraiment un probl me Reste la question de l affichage des trous dans le mot e je d cide de les afficher comme des e ainsi au tout 1 tour le mot est pr sent comme une s quence de tirets sequence de m me longueur que le mot deviner e chaque fois qu une nouvelle lettre me sera propos e il
102. part dans l un des dossiers r pertori s par la variable d environnement PATH D roger aux r gles 1 et 2 provoquera forc ment une erreur assortie d un message plus ou moins loquent bad interpreter command not found access denied D roger la r gle 3 est possible condition de pr ciser le chemin d acc s au script qu on veut ex cuter par exemple s il se trouve dans le dossier courant essaye Mais si on a pas mal de scripts et qu on les utilise souvent la solution la moins encombrante consiste placer ces scripts dans un dossier qu il suffit alors d ajouter la valeur de PATH mkdir scripts cr e un dossier sp cial chez moi PATH SPATH S HOME scripts rajoute le aux chemins r pertori s mv essaye scripts et mets y ce script Probleme modifier ainsi la valeur de PATH ne vaut que pour la session en cours la prochaine fois qu on lancera le SHELL la variable PATH sera r initialis e d apr s la valeur sp cifi e dans le script bashrc ou son cousin bash_profile qui sont executes de maniere automatique Solution il suffit d y alt rer la valeur donn e a PATH pour que la modification persiste Cependant tout script m me non conforme a ces r gles est quand m me parfaitement executable a condition de sp cifier de l ext rieur l interpr te qui doit l ex cuter par exemple si dans le dossier de travail le fichier essaye marqu par d faut rw nw rw contient simp
103. parvenir en ce point e Dansune telle organisation hi rarchique chaque noeud ou point de ramification porte un nom Dans un syst me comme unix un nom peut tre fait de n importe quels caracteres chiffres lettres etc et les minuscules ne sont pas assimil es aux majuscules correspondantes le fichier f par exemple est distinct du fichier F e Chaque dossier peut r pertorier on dira volontiers contenir des fichiers et des dossiers mais un dossier ne peut r pertorier deux objets de m me nom En revanche rien ne s oppose ce que deux dossiers diff rents contiennent des dossiers ou fichiers de m me nom c est d ailleurs ce qui arriverait si on recopiait une branche enti re dans une autre 9 3 2 CHEMIN D ACC S UN FICHIER MKDIR CD On peut naviguer se d placer d un dossier un autre avec la commande cd abr g de change directory cd pour dire remonte au niveau sup rieur et cd truc pour descend dans le dossier truc e La premi re commande cd est forcement non ambigu puisque dans une organisation arborescente il n y a jamais qu un sup rieur hi rarchique Par convention le double point repr sente le dossier contenant le dossier de travail lui m me repr sent par le simple point dont en verra 11 11 23 22 10 2007 2012 par J Feat DOCUMENTS ANNEXES 154 l int r t plus tard cd est syntaxiquement possible mais n est pas vraiment d une grande utilit
104. probl me grandeur nature les connaissances acquises travers les exercices Ainsi on a vu comment extraire un caract re d une chaine mais comment savoir si ce caract re est une voyelle ou une consonne Avant de lire ce qui suit r fl chissez au moyen de d tecter si un caract re donne est une voyelle On pourrait par exemple imaginer de d finir une fonction comme def voyelle x if x is return True if x is e return True L X Xs w return True L x i5 Tu return True if x 15 35 return True l x is TO 5 return True return False Lorsque qu une d finition est sur plusieurs lignes toutes les lignes hormis la premi re doivent tre d cal e d un cran vers la droite parce que c est comme a que l interpr te comprend que ces lignes forment un bloc ou groupe d instructions Le m me principe doit amp tre observ avec les expressions conditionnelles il peut y avoir plusieurs instructions ex cuter si la condition logique se v rifie et l interpr te se fonde sur le d calage droite pour consid rer comme un bloc toutes les lignes qui sont d pendantes de cette condition Par ailleurs le d calage doit tre le m me pour toutes les lignes si on a commenc un bloc en d calant par exemple de deux espaces il faut que ce soit galement deux espaces pour foutes les lignes de ce bloc cf section 112 9 2 INDENTATION Que la forme d termine la structure n est pas unique ce langage m
105. pyc PYTHON compil ou PYTHON compil et optimis DU SIMPLE AU COMPLEXE On distinguera les instructions simples des instructions complexes compound statements les premi res sont obligatoirement contenues dans une seule ligne en principe termin e par un code d alin a 0x0A dans l environnement unix faute de quoi la ligne n est tout simplement pas envoy e on peut aussi en regrouper plusieurs sur une ligne en les s parant par un a 2 c a ls 2 a les secondes sont reconnaissables au fait qu elles contiennent obligatoirement un dans l instruction d origine et doivent tre suivies d au moins une instruction elles peuvent s panouir sur plusieurs lignes typiquement les d finitions de fonction ou de classe mais aussi les structures de contr le comme with for while if else try except dont il y a de nombreux exemples dans le support de cours def pair x return not x 2 S MANTIQUE FORMELLE PYTHON est l un des rares langages formels attribuer une s mantique la forme globale du programme cette forme est r gie par des r gles strictes d indentation l indentation permet de s affranchir des caract res d limiteurs auxquels les autres langages sont oblig s de recourir pour d limiter les blocs de code de fa on non ambig e Par exemple les en perl my Scount 1 while my line lt STDIN gt print Seount
106. qu on dit d claratifs les structures de donn es et les structures de contr le y existent tout pareil mais de mani re totalement implicite pour en dissimuler la complexit celle ci fera l objet d une section enti re de l C 3123 en L2 pour votre culture encore une fois Souvenez vous qu un ing nieur c est un technicien cultiv cette culture lui permet certes de choisir la solution la plus efficace parmi celle qu il conna t mais d veloppe aussi son esprit critique l amenant inventer de nouvelles solutions si aucune de celles qu il a sa disposition n est vraiment bien adapt e pour r soudre son probl me particulier34 De cette mani re de voir les choses d coulent les progr s spectaculaires de la recherche et de l industrie informatique depuis 60 ans et plus particuli rement depuis 1976 date laquelle l approche objet a commenc se g n raliser et les syst mes de fen trage se vulgariser m me si le tout premier celui de XEROX est pass peu pr s inaper u aupr s du grand public Aujourd hui l interface tactile tend remplacer la souris con ue par XEROX il y a d j 35 ans alors pour demain qu allez vous inventer 33 types de donn es abstraits conception et mise en uvre 34 ce propos lisez donc l pilogue la fin du chapitre 8 11 11 23 22 10 2007 2012 par J Feat PROTOTYPAGE D APPLICATIONS Ou comment r aliser de v ritables prototypes de projets avec le
107. que Retournez voir la section valuation en mode interactif sous section type des variables vous souvenez vous de l utilit de la fonction eval Elle va nous tre ici extr mement pr cieuse Suivez moi bien Supposons que j ai un dictionnaire comme celui qui repr sente les occurrences dans le mot Mississippi 2011 11 23 22 10 16 2007 2012 par J Feat 66 FORMES ET TRANSFORMATIONS mot Mississippi statistiques occurrences mot 11 4 2 s 4 1 Rappel cette fonction occurrences tait le sujet d un exercice pr c dent Je d cide d en enregistrer les r sultats dans un fichier appel Mississippi stat nom mot stat fichier open nom w ouvre le en mode write fichier write repr statistiques cris y la valeur de statistiques fichier close Si je regardais le contenu de ce fichier avec la commande sHELL cat par exemple voici ce que j y verrai fats B TOR 2y etr d DT Ce n est pas vraiment une surprise puisque c est la repr sentation sous forme de texte de mon dictionnaire autrement dit la valeur retourn e par repr statistiques Maintenant si je veux le relire ce fichier je code fichier open nom r ouvre le en mode read truc fichier read fichier close En th orie donc la variable truc a maintenant comme valeur un texte constitu de tout ce qu il y avait dans le fichier Mississippi stat V rifions type true
108. queue Le mot cl ici c est naturellement on code le comportement des objets pour qu il soit aussi intuitif que possible La programmation est ainsi simplifi e ce qui permet en contrepartie de concevoir moindre effort des programmes plus complexes comme manipuler l ic ne d un fichier pour le d placer effectivement chose inimaginable il y a seulement 25 ans La cl de ce comportement c est qu il y a derri re object tout ca un m canisme d h ritage qui se d brouille pour retrouver ce dont on a besoin qu il soit attribut None i h quence mapping statique propri t ou dynamique comportement CD ae mapping quel que soit le niveau o il est d fini dans la hi rarchie des classes souvenez vous de mue long float str list dict Garfield la redefinition locale d un attribut a pour J L EN effet de masquer l h ritage normal int complex Et voil pourquoi 123 456 ne produit pas le m me r sultat que 123 456 pas plus d ailleurs que les VERBES ne forment leur pluriel comme les NOMS str int VERBES et NOMS sont des types distincts et ont donc des comportements distincts et pas que pour la formation du pluriel INTERFACES GRAPHIQUES La mani re dont on avait jusqu pr sent structur les programmes graphiques du chapitre 5 est qualifi e de INLINE CODING et c est une d marche proc durale qui
109. qui n est pas une s quence de symboles mais une quantit arithm tique Par contre a marchera pour une s quence d un seul caract re encore que a n ait pas grand sens Notons qu une telle construction syntaxique est quivalente au programme suivant L for z in abcd L z upper Mais l conomie de cette approche se r v le avec x y for x in 2 3 for y in 5 6 qui g n re la liste plate 10 12 14 15 18 21 c est dire le produit cart sien de la 1 par la 2 liste la m me technique pouvant aussi servir pour un produit cart sien n aire comme disons X x Y x Z pour faire simple px12 1 convertir l expression ci dessus en une construction for standard g n rant exactement le m me r sultat Mais le plus fort c est que de telles expressions peuvent tre imbriqu es comme par exemple x y for x in 2 3 for y in 5 6 7 qui g n re la matrice 10 15 12 18 14 21 La concision n est pas le seul avantage de ce genre d expression il se trouve qu elles ont aussi une bien meilleure performance qu une construction for standard ce qui en fait l outil de choix pour les calculs num riques mais aussi pour les jeux base de damiers ou toute autre application qui n cessite des repr sentations matricielles typiquement le traitement d image px12 2 convertir l expression ci dessus en une construction for standard capable de g n rer exactement le m me r sultat
110. res sur 32 ou 64 bits j ai ainsi vu au cours de mes exp riences des valeurs en m moire d passer 255 voyez vous un moyen de contraindre le programme travailler exclusivement sur 8 bits Cet mulateur est largement perfectible pour le moment il est cod comme si on ne pouvait se tromper dans le nom du fichier code machine et comme s il n y avait jamais d erreurs dans le code muler px34 2 ins rer des try except pour d tourner les erreurs d ouverture de fichier et pour pi ger les opcodes non d finis erreur typique d un programme qui branche sur une donn e Le STEPPER existant est terriblement rudimentaire en utilisant le programme ne serait ce que pour sa mise au point on aimerait pouvoir afficher une plage de m moire en sp cifiant deux valeurs enti res au lieu d une ou encore toute la m moire sous la forme de 16 lignes de 16 bytes ou m me une commande a et une pc pour forcer la valeur des registres px34 3 d veloppez l id e du STEPPER en lui ajoutant la capacit de traiter d autres commandes que vous jugez utiles La capacit de l mulateur d sassembler le code machine est peine esquiss e on devrait pouvoir afficher le code machine de mani re symbolique de sorte que les codes d op ration soient remplac s par leur mn monique et les adresses par une tiquette symbolique comme store valeur ou jump encore par exemple pour le 13 8 30 10 3A Jump starrt 32 DD 3l loa
111. s quences 25 acc s a M HUM pe DUE ee ee 41 4 dictionnaires acc s par a ee ee ee eee te 57 interfaces fen tres et boutons eee III RI RR T3 6 architecture de Programmes P Rm 87 D infrastructures logicielles Torr 103 prototypage d applications 115 OFS ee a a 143 168 glossaire cee E TO EE ed ed C E 171 table des Mati res ei TOTO TTL 178 14 FORMES ET TRANSFORMATIONS Dans ce qui va suivre on suppose d j familier le concept d ordinateur num rique machine passablement complexe qui met en uvre des ressources mat rielles processeur m moire et logicielles micro code syst me d exploitation structur es sur plusieurs niveaux et interagissant aussi efficacement que le permet une technologie dont la mise au point a commenc il y a d j plus de 60 ans et qui semble loin d tre termin e Pour ceux qui veulent se documenter plus pr cis ment un cours compl mentaire introduction l architecture des ordinateurs propose de descendre dans les d tails mais ce n est pas absolument n cessaire pour comprendre ce qui va suivre 1 0 PR LIMINAIRES CULTURELS Si la vocation premi re d un ordinateur est la repr sentation et le traitement de l information programmer c est manipuler cette information pour la repr senter de
112. sait pas o raccrocher les wagons De l application de ces principes en mode interactif il vient que la r daction de scripts devrait th oriquement respecter les m mes r gles tout bloc commenc en colonne 1 doit tre termin par une ligne vide et en un sens cette ligne fait partie du bloc alors qu un bloc commenc avec une indentation autre que la 1 re colonne est implicitement termin lorsque la igne suivante revient ce m me niveau d indentation 11 11 23 22 10 2007 2012 par J Feat DOCUMENTS ANNEXES 150 SCRIPTS Tout programme qui satisfait ces regles formelles en mode interactif passera sans probleme en mode script L inverse n est pas vrai un programme peut violer les r gles en profitant du fait qu en mode script l interpr tation est plus intelligente qu en mode interactif il est ainsi possible de couper une definition avec des lignes vides donc ne contenant que 0x0A tandis qu en mode interactif chacune de ces lignes blanches devrait tre indent e strictement comme la pr c dente sous peine de casser imm diatement le bloc en cours de d finition Maintenant les programmeurs qui estiment pouvoir contourner l exp rience interactive doivent d une facon ou d une autre la reconstituer tout en r digeant leur programme c est bien ainsi que proc dent les v t rans mais ce n est pas gratuit ca suppose assez d exp rience pour imaginer et donc mentalement muler la r action de l interp
113. savoir faire que vous venez d acqu rir Le prototypage refl te une tendance relativement r cente dans l industrie qui se pr occupe de plus en plus de cr er des logiciels centr s sur les besoins r els des utilisateurs et capables d voluer rapidement L accent est mis sur le design du programme ou comment regarder le probl me pour y voir une solution facile et conomique La preuve en est que le code ne d passe jamais une page cran limite au del de laquelle je perds mon altitude en me perdant moi m me Qui a dit small is beautiful Je ne sais plus mais une chose est certaine quand il s agit de coder ou maintenir des programmes plus c est petit plus c est facile C est dans cette optique que nous ferons usage de la technique dite dirig e par les donn es non seulement parce qu elle d porte dans les donn es du code parfois encombrant mais aussi parce que moins de recourir au MULTITHREADING c est quelquefois la solution la plus l gante pour simuler l activation parall le de deux programmes distincts pas tout fait ind pendants mais concurrents Enfin y verra comment mettre en uvre les techniques fondamentales d un Jit travers l mulation d un processeur fictif autrement dit d une machine virtuelle manipulant du BYTE CODE concept cl des interpr tes modernes comme JAVA PYTHON et bien d autres M me si dans cette maquette le code du driver peut tre ramen trois instructions
114. sultante est une liste de m me longueur dont les l ments sont le r sultat de l application de la fonction pluriel aux elements de la liste originale p11 2 d finir la liste mots et lui appliquer votre fonction pluriel comme dans l exemple ci dessus De la m me fa on l expression 7 upper for z in abcd me retournerait FAT MOT a DTJ La syntaxe d une telle expression parle d elle m me pour peu qu on sache l analyser e les crochets chaque extr mit sont l indication du type de r sultat retourn une liste et ceci quel que soit le type de la donn e trait e par l expression e vient ensuite une premi re sous expression qui d crit le calcul l mentaire effectuer sur un l ment de la donn e ici c est l application de la m thode upper dont on sait qu elle convertit un caract re minuscule en majuscule e en dernier on exprime la donn e it rable traiter que ce soit une constante litt rale comme ici ou une variable e mon tout est la liste collectant les r sultats l mentaires Le 7 de z upper est le z construit par for z in il repr sente donc tour tour chaque l ment de la s quence LISTES ACCES INDEXE 47 en cours de scan en partant de la gauche L expression se comprend alors comme fais moi la liste des r sultats obtenus en convertissant abcd en majuscules J insiste sur le fait que la donn e doit tre it rable a ne peut pas marcher sur un nombre
115. supports de cours ou ils sont d ailleurs probablement mieux d finis qu ici agr gat structure de donn es h t rog nes s oppose scalaire et vecteur voir cours ELI 113 introduction aux structures de donn es point de vue de la machine a list voir liste d associations analogique continu s oppose discret mais aussi num rique donc digital API application programming interface d signe les donn es et fonctions qui constitue l interface entre deux programmes g n ralement sous la forme de code source cette interface fournit les points d entr e vers les service d un programme utilis de fa on ancillaire syst me d exploitation biblioth que de fonctions etc lt http en wikipedia org wiki Application_programming_interface gt argument d note l op rande d une fonction arit capacit d accueil unaire binaire ternaire En Prolog l arit caract rise le nombre d arguments d un pr dicat ascii standard de codage sur 7 ou 8 bits pour les caract res alpha num riques et la ponctuation atome l ment lexical th oriquement non fissible en Lisp et Scheme qui n ont que 2 types de donn es atome s oppose liste avec cette particularit que la liste vide est en fait l atome nil binaire qui peut prendre deux valeurs c est le cas de la logique bool enne bit litt ralement petit bout aussi abr viation de bifnary dig it au sens informatiqu
116. the good cat drinks some milk En fait ce que je viens de d tailler se coderait ais ment en une seule expression sans qu il y ait besoin de recourir des variables interm diaires superflues fot x in le bon chat boit du the good cat drinks some milk Ceci me permet de simplifier et donc d acc l rer la d finition de traduis tel point que ca en devient un ONE LINER compl tement cryptique pour les non initi s def traduis d p t return Jjoin d x for x in p split 1 Et en effet traduis FA le bon chat boit du lait the good cat drinks some milk Mais attention cette d finition de traduis n est valable que si tous les mots sont effectivement dans le dictionnaire Que se passe t il s il en manque un mot si par exemple je voulais traduire le chien boit du lait Au moment o le programme d couvre que chien n est pas une cl dans ce dictionnaire il d clenche une EXCEPTION terme technique d signer les circonstances qui obligent l interpr te abandonner l ex cution du programme De ce fait mon ONE LINER tout propre et bien concis ne vaut rien il me faut traiter la phrase mot par mot et si une exception se pr sente programmer une solution Ce retour la case d part est extr mement fr quent pratiquement in vitable m me pour un programmeur chevronn puisqu il faut avoir pr vu toutes les exceptions Je vais
117. thinking in tkinter index html python interface to Tel TR http docs python org library tkinter html python and Tkinter programming http www manning com grayson Voir aussi Le tutoriel de G Swinnen en particulier Le chapitre 8 http python developpez com cours TutoSwinnen page Chapitre8 L8 pour ceux qui veulent aller plus Loin extensions Tkinter PYTHON MEGAWIDGETS http pmw sf net TIX http tix sf net TKZINC extended TR canvas type http www tkzinc org EASY GUI http easygui sf net mpet http starship python net crew mike LL existe d autres interfaces graphiques plus tendance que TKINTER dont Le Look commence dater aucune application r cente n a cet aspect brut de d coffrage pour La simple raison que tout Le monde est maintenant pass au cran sup rieur Le Look 3P style oreng avec reliefs ombres transparences couleurs d grad es et autres friandises cosm tiques modules wWxWIPGETS WXPYTHON http wxpython org BOA CONSTRUCTOR http boa constructor sf net PYTHONCARD http pythoncard sf net WXGLADE http wxglade sf net mention sp ciale pour syst me graphique fonctionnellement similaire TKINTER utilisable de mani re Ldentique ew PYTHON aussi bien qu en c ce qui permet non seulement une transition ais e depuis TKINTER mais aussi La portabilit vers des langages industriels syst mes graphiques PYGTK http pygtk org GLADE http glade gnome
118. thode L exemple ci dessus manipulait la valeur d une variable de type str mais il est tout fait possible de citer une cha ne litt rale le r sultat sera le m me Agence France Presse split l Agence France Presse PM U CUL Remarquons que comme dans ce dernier cas des choses tranges peuvent se produire si le caract re de segmentation se trouve tout au d but ou tout la fin de la chaine pour P M U par exemple la m thode fabrique une liste avec les l ments qui se trouvent de part et d autre d un point mais comme il n y a rien droite du dernier point elle ajoute un quatri me element une chaine vide mat rialis e par 2 apostrophes avec rien entre les deux Essayez par exemple de segmenter barre Selitl s px07 1 sile caract re de segmentation n est pas dans la chaine split produit quand m me une liste mais que met il dedans Essayez D esplit UNI parri sp BELILA Ar 0 07 2 sile caract re de segmentation n est pas sp cifi split produit quand m me une liste mais que met il dedans Essayez azertyuiop gghjklm split px0 3 sila chaine originale contient des nombres est ce que split les garde sous forme de chaine ou bien les convertit il en objets num riques Essayez x 1 23 456 split x 0 x 1 le r sultat d pend du type des op randes 0 07 4 les m thodes upper et lower c
119. tout repr senter en utf 8 et par cons quent en unicode mais l inverse n est pas vrai les codages ant diluviens ont par definition des carences irremediables gt gt gt voyelles encode latin 1 UnicodeEncodeError latin 1 codec can t encode character u u0153 in position 6 ordinal not in range 256 Ah que voila donc une bonne raison de les eviter LISTES ACC S INDEXE NOTES LL n y a ja mais que 2 trucs savoir pour manipuler des Listes comment Les construire 10 111 comment en extraire L information 10 131101 une Liste peut tre Vide sa valeur bool ewwe est alors False une donn e Litt rale faite de constantes a allo maman bobo l b 1 2 2 sole assembl e partir de vartables c a b c b al 55 La valeur d une fonction ou d une m thode done d une construction programm e range 10 20 train de 1847 split ow ew extrait Les l ments avec des index e 11 21 des intervalles d index b o 21 al 1 on peut calculer Leur taille len a faire Le compte de certains l ments lt 0 4 0 4 1 0 1 O 01 couv 1 Les concat wer a b les r pliquer a b 2 La consid rer comme un ensemble et y tester La pr sence d un l ment soletl in b en changer un l ment alol b 2 1 5 ew modifier un segment alo 2 hello wow Les scanner for mot Ln a print a y appl
120. trois niveaux e le niveau lexical aussi appel lexique ou vocabulaire est celui des mots qui repr sentent des verbes ou des noms c est dire des actions ou des objets plus formellement ils jouent le r le d op randes et sont manipul s par des op rateurs e le niveau syntaxique est celui de l organisation des mots en phrases les programmeurs parleront plut t d expressions et l ordre des mots est videmment crucial puisque l eau ne peut pas cuire dans des p tes bouillantes e le niveau s mantique est celui du r sultat de l interpr tation de ces mots dans le contexte de la phrase il existe par exemple des langages o un m me mot peut aussi bien tre un verbe qu un nom en fonction de sa place dans la phrase ou encore un m me op rateur peut avoir diff rents effets selon le type d objet auquel il s applique Comme tout langage les langages de programmation manipulent des symboles et non les objets qu ils repr sentent r ellement le nom n est pas la chose la carte n est pas le territoire Par exemple l expression 3 4 contient deux symboles de constantes arithm tiques et un symbole d op rateur le symbole 3 repr sente la quantit iii qui ajout e la quantit repr sent e par 4 donnera une nouvelle quantit repr sent e cette fois par le symbole COMBIEN EXISTE T IL DE LANGAGES DE PROGRAMMATION 2011 11 23 22 10 16 2007 2042 par J Feat 16 FORMES ET TRANSFORMATIONS Plusieur
121. un nom de fichier et un nombre qui repr sente le mode d acc s pour ce fichier en bash les arguments sont invers s pour pouvoir sp cifier plusieurs fichiers en une seule commande DOCUMENTS ANNEXES 147 Ne vous laissez pas d semparer par les noms de fonction qui ne ressemblent pas ceux des commandes bash ces noms sont ceux de la biblioth que ans c standard et ce sont ceux que vous aurez manipuler si vous voulez faire ce genre de chose en ANSI C ce sont donc les noms des commandes bash qui se d marquent des originaux et non l inverse la raison en est que quand on veut aller vite pour faire des trucs la console on pr f re taper cd que chdir Voici pour l exemple un programme idiot qui marque sans discernement tous les fichiers py comme s ils taient v ritablement ex cutables ici getcwd fichiers listdir ici for f in fichiers scanne la liste if f endswith my 3 ceux qui finissent en py chmod f 0744 met les moi en ex cutable ehdir t remonte dans l arborescence print listdir getcwd listdir s applique la valeur de getcwd chdir iel retour la case d part Derni re remarque la navigation avec chdir n affecte que le point de vue de PYTHON le processus en cours mais ne peut modifier le point de vue qu avait le SHELL avant de lancer ce processus quand on arr te PYTHON On se retrouve l o on tait avant Ce m canisme est expliqu en d tails dans le co
122. une m moire vestigiale du forum m moire qu il aurait t dommage de perdre Apr s bien s r il faudrait faire l effort de pr senter tout a avec un souci de coh rence globale et de continuit pour mieux montrer comment s integre avec les connaissance dispens es par le cours et en d pit des apparences c est ce que j ai essay de faire ici m me si le r sultat de mon effort semble sauter du cog l ne 11 11 23 22 10 2007 2012 par J Feat 168 FORMES ET TRANSFORMATIONS INDEX Ce r pertoire est minimaliste il omet les op rateurs les plus fr quents comme in ou for de m me que les instructions du genre if ou pass ne sont pas index s non plus des m thodes comme split ou pack tellement utilis es qu il serait superflu de les r f rencer 6 7 E E EE N 70 seme cece tas eee es E ee eee 30 72 charset zc UN PE 51 1 6 8859 97 99 Ure ne ee ee Dee 48 51 97 99 140 AV 147 cites 147 CNOICE CREA 122 146 e 114 34 134 135 classe tS 75 76 82 111 122 126 Canvas m m 80 82 84 119 122 126 f 4 E 00 EE EES 2 RE 77 Fiame 78 126 B C PM 74 76 78 80 122 126 AN PH 146 en merate
123. votre patronyme et l archive elle m me doit tre nomm e d apr s votre nom et le num ro de la s rie 99 Cette derni re contrainte n est pas une difficult puisqu il suffit de bien nommer l archive zip machin DO px99 txt Notez les quotes qui permettent de contruire un nom comportant un blanc une autre maniere de faire serait de pr fixer l espace avec le caract re d chappement zip machin 99 px99 txt La premi re contrainte suppose qu on utilise la commande mv pour renommer chaque fichier la main ca donnerait quelque chose comme mv px99 1 txt machin px99 1 txt ou la variante avec mais m me pour 3 fichiers ca rique d tre un peu p nible donc risque d erreur mieux vaut le faire par programme voici un ONE LINER qu on taperait directement dans le terminal tor x in px99 Il 3 txt do mv Sx machin Sx 7 done 51 comme mentionn la section O 3 liste des fichiers 11 11 23 22 10 2007 2012 par J Feat 164 FORMES ET TRANSFORMATIONS Notez la syntaxe de cette moulinette que je reformule comme si c tait un script Cor x px let txt do inv Se machin Sx done Ici la variable x prendra chaque tour une valeur diff rente dans la liste expans e partir du mod le px99 1 3 txt autrement dit comme si j avais tape LOT An DX SRL ERE PRIS CAE Le mot cl do n est l que pour permettre a l interpr te BASH de rep rer o commence
124. vous d couvrirez ce r sultat ahurissant 1 0 0 1 0 0 1 0 0 Ceci s explique par le fait que l op rateur effectue des copies de son op rande et non pas des l ments de cet op rande il s en suit que l l ment 0 0 est en m me temps l l ment 1 0 et l l ment 2 0 Ce qui ne m arrange pas du tout parce que si je modifie une cellule de ma matrice M il ne faut surtout pas que d autres cellules plus exactement des cellules que je crois tre autres prennent simultan ment cette m me valeur Ce comportement de l interpr te n est pas une erreur c est du la facon dont fonctionne la m thode de r plication En fait et c est presque totalement invisible les objets repr sentant des listes sont des r f rences autrement dit des pointeurs concept abondamment d taill dans le cours de LisP 113 et celui de ANSI C 213 En Lisp tant donn setq z 0 0 0 une construction comme list z z z produirait la structure repr sent e sur le diagramme ci dessus et en PYTHON 3 3 0 produirait exactement la m me chose directement Par contre l expression que j ai utilis e g n re une nouvelle liste chaque tour donc aucune de ces listes ne peut avoir d l ment en commun Pour mettre ceci en vidence il suffit de regarder quels sont les objets impliqu s gr ce la fonction id qui retourne effectivement l adresse de la structure 39 cf l exercice px12 1 p
125. vrai pour une d finition de m thode voyez la d finition de la classe Stack juste avant l exercice px30 2 parce qu une telle d finition tant forc ment un bloc de niveau 2 dans une classe il suffit de revenir au niveau 2 pour d marrer un nouveau bloc de la m me fa on qu on indente de multiples blocs dans une d finition de fonction voyez la d finition de explose la section 2 4 it ration sur une s quence class Stack i der AMIE selr seli stack def push self val self stack append val def pop self return self stack pop def size self return len self stack NIVEAUX D INDENTATION Un bloc indente peut lui m me contenir d autres blocs indent s e un bloc se termine lorsque la ligne suivante est revenue a l indentation precedente e ainsi dans tous les cas de changement d indentation mis part celui d un nouveau bloc l interpr te s attend revenir l une des indentations pr c dentes sinon c est une erreur de syntaxe e la raison en est que le niveau d indentation est g r sous la forme d une pile ou plus pr cis ment d une liste d associations m morisant pour chaque niveau la s quence de caract res qui constitue l indentation ce n est qu en rencontrant un que l interpr te empile un nouveau niveau et si l indentation change c est forc ment un retour un niveau ant rieur l ndentation doit correspondre l un des niveaux pr c dents faute de quoi il ne
126. 1 1 gt 0 3 gt 5 lt 4 Pour compl ter ce panorama PYTHON dispose d instructions conditionnelles c est dire d instructions qui ne sont valu es que si un pr dicat une condition logique a t auparavant v rifi ce sont des instructions complexes qui peuvent ventuellement prendre plusieurs lignes autrement dit un bloc de code cf 112 9 2 indentation Exemple idiot if 5 gt 4 feu rouge toujours valu Ici tout ce qui est compris entre le mot cl if et le est consid r comme un pr dicat logique qui contraint l valuation de l instruction qui suit comme 5 est par definition plus grand que 4 l instruction suivante feu rouge sera forcement valu e MANIPULATION DE S QUENCES 31 L instruction if peut tre assortie de son compl mentaire else instruction qui ne sera valu e que dans le cas o le pr dicat du if n tait pas vrai if feu is vert passe True else passe False Notez que l expression du else doit venir imm diatement apr s celle du if dans la s quence Le pr dicat qui contr le l valuation peut tre aussi complexe que n cessaire et faire intervenir les op rateurs logiques vus plus haut if passe and feu is rouge passe not passe Cette instruction doit examiner la valeur de la variable passe et celle de la variable feu passe est ici utilis e comme une expression bool enne pour sa valeur de v rit et la condition ne sera
127. 1 if R k lt R k 1 N R k cas de ix else N R k cas de xi que j aurais pu aussi exprimer de fa on plus concise mais aussi plus cryptique for k in range len R 1 N R k if R k lt R k 1 else R k Ceci pos noublions pas que l ultime l ment de la liste n a pas t trait et comme il est droite de tous DICTIONNAIRES ACCES PAR CL 61 les autres il devra obligatoirement tre ajout au r sultat N R 1 autrement dit R k 1 px15 1 recoder tout ceci comme une fonction unaire RomDec qui accepte une chaine de chiffres romains et retourne le r sultat de la conversion en d cimal tester cette fonction avec des repr sentants de chaque configuration possible comme ii iv vii ix XIII xv MIX xvi xiv DIX xxxii XLII etc px15 2 coder un script autonome appel romdec ou rd pour coller au style unix qui sache lire deux nombres romains ou m me plus sur la ligne de commande et en afficher la somme la console en d cimal 4 2 EXPLOITATION DYNAMIQUE Une autre facon d exploiter un dictionnaire c est d utiliser la capacit de cr er dynamiquement de nouvelles entr es voici un tout petit programme provenant d un cours de L2 qui g n re une information statistique partir d un texte l histogramme de la fr quence des caract res Le probl me en simplifi je voudrais savoir combien il y a d occurrences de chaque lettre dans un mo
128. 16 2010 13 09 56 GCC 4 4 3 on linux2 document es ici lt http docs python org library turtle html module turtle gt Type help copyright credits or license for more information gt gt gt from turtle import mais on ira voir plus tard pour le moment je dis tout ce qu il y a gt forward se savoir La fonction forward fait avancer la tortue d un certain nombre de File Edit View Terminal pixels comment sait elle de combien de pixels avancer On lui Python 2 6 5 r265 79063 Apr 16 2016 13 09 56 passe le nombre entre parenth ses et c est ce qu on appelle oa Maint suerte Type help copyright credits or license for more information l argument de la fonction dans forward 50 ce 50 est l argument de 2 forward 2 cf lt http foad iedparis8 net claroline claroline document goto index php ubuntu 2C 20prise 20en 20main pdf cidReq ELIO00_ amp gidReset true gt 2011 11 23 22 10 16 2007 2042 par J Feat 10 FORMES ET TRANSFORMATIONS O 3 PROGRAMMATION EN PAS PAS Tant que je n ai pas envoy la ligne je peux encore reculer avec le curseur et changer le 50 en 65 ce n est qu au moment ou j envoie que l interpr te ex cute l instruction mais l encore rien ne me dit dans la fen tre du terminal que a a march Cependant turtle a ouvert une nouvelle fen tre et maintenant je vois l effet de la fonction partant du centre de la fen t
129. 42gues 13031240 no 30312531 En effet 305 en base 8 c est 197 en base 10 ou C5 en base 16 valuez donc les expressions 0 1 197 et hex 197 pour vous en convaincre Vous aurez l occasion de rencontrer d autres s quences d chappement les plus courantes tant n pour le new line ou saut de ligne et X pour la tabulation Qu une telle s quence ne repr sente qu un caract re mais occupe effectivement deux octets de donn es ne devrait plus vous surprendre Ici l expression len quoi retournera donc 24 bien qu on soit tent de dire qu il n y a jamais que 20 caract res dans cette chaine mais dont quatre sont unicod s En fait il y a 20 glyphes cod s en interne sur 24 La seule facon de retrouver ces 20 glyphes est de demander une sortie Pc PEI noi euf de p ques no l Mais notez que certaines expressions typiquement celles de donn es non l mentaires forcent print en r v ler de toute facon la repr sentation interne gt gt gt print quol spliti xC5 x93uf de p xC3 xA2ques xC3 xA0 1 alors que pour exactement les m mes donn es mais affich es l ment par l ment 225 TO X an quei Split PEINE X uf de p ques no l Ne vous laissez donc pas d monter par ces deux aspects la repr sentation externe c est ce qu on sert au client du restaurant l interne c est ce qu on manipule la cuisine Et d ailleurs le cuisinier ne devrait pas tre
130. 68 gl0SSAN ee n 171 table des mati res ere EY PR xe Ra a EC e rc RR Pop or or 178 26 FORMES ET TRANSFORMATIONS Une s quence est l organisation de donn es sous la forme d l ments distincts collect s en une seule structure laquelle on peut donner un nom symbolique cette organisation peut tre implicitement ordonn e ce qui se refl te alors dans sa repr sentation interne en anglais ARRAY auquel cas on peut y acc der s quentiellement un l ment apr s l autre c est le cas des chaines de caract res ou des listes pour d autres repr sentations l ordre n a aucune importance parce que l acc s aux donn es est ind pendant de leur position dans la structure comme c est le cas par exemple pour les dictionnaires ou les ensembles Quand il s agit de repr senter les donn es en vue de traiter l information beaucoup de langages favorisent la structuration en s quence pour trois raisons e une s quence peut tre vide fa on vidente de repr senter une information manquante e l ment de la s quence peut lui m me tre une s quence ce qui permet de structurer l information plusieurs niveaux de profondeur e un programme bien con u pour traiter un l ment de la s quence peut facilement tre g n ralis pour traiter tout l ment de cette s quence 2 1 CHA NES DE CARACT RES ET INDEX Une chaine de caract re est une s quence ce qui veut dire que chaque caract re occupe dans la chaine une po
131. 8 8 FORMES ET TRANSFORMATIONS L objectif de cette section est la prise en main du langage qui va nous servir tout au long de l ann e et jusqu la fin de la licence Au passage on y aborde quelques uns des concepts qui fondent l aspect m canique de la programmation en montrant comment on peut concevoir un programme comme un m canisme qui utilise d autres m canismes de niveau plus l mentaire O 1 UTILISER L INTERPR TE PYTHON Ici on entre par la fen tre ce n est pas une boutade c est une n cessit PYTHON est un interpr te qui traduit la vol e les instructions qu on lui donne et les transmet au processeur sous une forme qu il comprend autrement dit dans un autre langage Et PYTHON est un programme qu on ne peut lancer que dans une fen tre de terminal L o a parait se compliquer c est que le terminal est lui m me un programme et qu il faut le lancer pour lui faire ouvrir une fen tre o nous pourrons lancer un 2 niveau de programme PYTHON qui va nous permettre d ex cuter notre propre programme un 3 niveau Mais nous rediscuterons plus tard de cet aspect des choses Pour ouvrir un terminal acc der au menu APPLICATIONS gt ACCESSOIRES gt TERMINAL et rel cher le bouton de la souris ORS Places System Calculator La fen tre qui s ouvre ainsi est constitu e de 2 parties la barre d outils qui f Games Bi covo Creator mis part les 3 boutons standard de contr le n
132. DE Comme on l a mentionn plus haut PYTHON est un langage orient objet sans rentrer dans les d tails disons que chaque type d objet est muni de m thodes sp cifiques Par exemple on a vu que les nombres entiers et les nombres r els ont des m thodes diff rentes de division qui produisent des r sultats diff rents On a vu galement que la somme de deux chaines ou s quences de caract res utilise une m thode de concat nation mise en chaine alors que la somme de deux nombres utilise une m thode d aadition arithm tique Les chaines sont munies en standard d une trentaine de m thodes parmi lesquelles split en francais 2011 11 23 22 10 16 2007 2042 par J Feat 38 FORMES ET TRANSFORMATIONS s pare qui effectue la segmentation automatique de la s quence en fonction d un caract re donn par exemple l espace Essayez le programme suivant mots petit chat espace mots split espace petit chat Le r sultat est une s quence d un nouveau type appel e liste d limit e encadr e par un T au d but et un T la fin les listes seront tudi es dans la section suivante Cette liste comprend ici deux elements s par s par une virgule et chacun de ces l ments est une chaine remarquez que le caract re sp cifi comme s parateur a disparu de la s quence On voit ici que la m thode split s utilise en sp cifiant l objet ici la cha ne suivi d un point et du nom de la m
133. DTD and or processing tools are not generally available and the machine generated HTML PostScript or PDF produced by some word processors for output purposes only The Title Page means for a printed book the title page itself plus such following pages as are needed to hold legibly the material this License requires to appear in the title page For works in formats which do not have any title page as such Title Page means the text near the most prominent appearance of the work s title preceding the beginning of the body of the text A section Entitled XYZ means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language Here XYZ stands for a specific section name mentioned below such as Acknowledgements Dedications Endorsements or History To Preserve the Title of such a section when you modify the Document means that it remains a section Entitled XYZ according to this definition The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document These Warranty Disclaimers are considered to be included by reference in this License but only as regards disclaiming warranties any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License 2 VERBATIM COPYING You may copy and distribute the Document in any medi
134. E E 168 oe Spa eps de dut 171 table des mati res iux esa Us wa cai Gri dog am Ra la ca eec Re rin 178 104 FORMES ET TRANSFORMATIONS 7 1 DU CONCEPTUEL LA MISE EN UVRE Concevoir le traitement de l information implique une d structuration analytique en m me temps qu une projection synth tique l nonc d un probl me de traitement part le plus souvent d un tat des lieux les donn es disponibles et caract rise la forme que doit avoir la solution forme laquelle on devrait aboutir apr s une s rie de mutations contr l es par un programme qui manipule les donn es originales La difficult r side donc dans la conception de cette proc dure g n ralement d compos e en une s quence d op rations quand on adh re l approche imp rative ou proc durale de la programmation La projection synth tique est une d marche convergente si j avais ceci et cela je n aurais plus qu les afficher mais c est justement parce que je ne les ai pas que je me pose la question de comment les fabriquer a partir des donn es originales d o la n cessit de les analyser pour d tecter comment en extraire l aspect qui m int resse La r solution d un probleme en PROLOG ne se pose pas en terme de proc dure mais en terme de but atteindre donc des conditions qu il faut r unir pour y arriver en proc dant reculons ces conditions sont alors consid r es c
135. EXtensibilit eae a ee cn one 123 8 3 MOI PION RR ene eee 124 AS 124 faisabilit ee ce 125 Script Complet ER 126 EXxtensibilit ermene dario n cra enn ee acer enema 128 8 4 l ordinateur 129 Cil mee c 129 136 5 Roe ene Seems ena neon ewer EL ase ee 140 extensibiliter PR eon ene mica 141 ETE gt e e cae ne ere RR RR RR 143 RS RE RR ee ree ee E cee 144 9 1 1 modules TUBIS OF 22222222222 144 9 1 2 modules USA ne mtcr cct 146 9 2 ple g er oe Ore ERE 148 mode interactif mode SCr pt dns 148 du simple au Complexe suene tnnc 148 s mantique ONMBIIE RR 148 niveaux 149 COS 150 exemples gene eee en a een om ara te er Sree ee Pacer 150 9 3 She ll pereis Nene 152 9 3 RAS RR ERROR 152 9 3 2 chemin d acc s UN fichier mkdir 153 9 3 3 les commandes indispensables 155 9 3 4 les commandes rm 157 9 3 5 le shell et ses extensions 158 qae mc 162 9 4 pr
136. FORMES ET TRANSFORMATIONS Le document http www pythonware com library tkinter introduction est la r f rence sur laquelle je me suis appuy pour laborer les programmes qui suivent en principe elle s applique Tkinter 8 0 4 et Python 1 5 sous LINUX et le X WINDOW SYSTEM mais elle est toujours valable pour Python 2 6 Un autre document http infohost nmt edu tcc help pubs tkinter intro html pr sente la m me chose avec une approche diff rente c est toujours bien d avoir deux points de vue sur le m me sujet Tkinter est un module graphique dont l architecture s inspire du mod le CLIENT SERVEUR les ressources du SERVEUR Sont concentr es en un point et mises la disposition du CLIENT sur simple demande Ce module d finit un ensemble d objets sous forme de classes qu il n y a plus qu instancier pour cr er les l ments de l interface graphique Techniquement une fen tre est un widget raccourci pour WINDOW GADGET qui peut contenir d autres widgets par exemple des boutons de type Button des zones de texte de type Label des champs ditables de type Entry des images des menus etc 5 1 LABEL Commencons par un script tr s simple capable d afficher un message fix l avance par exemple coucou il me faut d abord creer un premier widget conteneur la fen tre qui contiendra un deuxi me widget le message Puisque PYTHON est un interprete il est possible d valuer ce programme ligne 6060 tk p
137. HASHING nous verrons plut t comment exploiter les propri t s de ce type d objet pour structurer l information afin d en simplifier le traitement En effet c est ici que nous allons prendre conscience d un principe fondamental du traitement automatique uniformiser la structure des donn es aboutit a g n raliser l algorithme qui exploite ces donn es simplifiant ainsi la conception du programme L objet de ce chapitre sera donc d illustrer par des exemples d applications l int r t d une telle structure pour toute manipulation impliquant conversion ou traduction operations qui fondent par exemple la conception d interpretes et de compilateurs On verra plus loin d autres exemples d objets de ce type notamment dans les chapitres 6 et 8 ou les dictionnaires sont utilis s pour mettre en uvre des tables de correspondances LOOK UP TABLES qui permettent une exploitation simple de donn es complexes sommaire fondements interaction avec le syst me 7 D donn es l mentaires cem mene 18 2 manipulation de s quences ee HH 25 9 listes acc s index ennemi 41 QD dictionnaires acc s par Cl denses 57 4 1 exploitation statique ee en 60 4 2 exploitation dynamique eee dna quien ate 61 4 3 traduction LES 61 4 4 Interpr tation nes
138. INSTRUCTION Un ordre donn l imp ratif INTERPR TATION traduction la vol e d un langage dans un autre LANGAGE un ensemble de mots et de r gles de syntaxe LEXIQUE ensemble de mots LOGO langage interpr t con u en 1966 pour l apprentissage de la programmation MODULE programme tout fait dont on peut utiliser les fonctionnalit s en l important OP RATEUR symbole ou code sous jacent utilis pour d clencher une op ration OP RANDE ce sur quoi on op re PIXEL un point de l cran PROCEDURE VOir PROGRAMME PROGRAMME une sequence ordonn e d instructions PYTHON langage interpr t con u en 1991 pour allier la puissance de C a la souplesse de LISP SHELL interface pour l interpr tation de commandes et le lancement de programmes SYNTAXE ordre des mots pour produire des expressions bien formees TERMINAL Un programme qui permet de lancer d autres programmes TURTLE module d mulation du langage LOGO VALEUR r sultat d une valuation Notons que toutes ces d finitions sont volontairement vagues voire m me parfois inexactes l objectif n est pas de vous faire apprendre quoi que ce soit et ce lexique se veut seulement une maniere de r capituler ce que nous venons d exp rimenter En m me temps cette exp rience est un AUTO TEST si cette introduction vous a d plu peut tre faut il reconsid rer votre orientation ou vos motivations Alors si vous avez des questions compl menta
139. IPULATION DE S QUENCES 29 R CAPITULATIF comme pour Les nombres LL n est pas possible de modifier un l ment d une cha ne mais on peut toujours ew fabriquer une autre en recopila nt uniquement l information qui nous Lnt resse acc s aux l ments d une s quence L op rateur T obligatoirement postfix permet l extraction d information il attend L expression d un index L possiblement n gatif s quence L index positif valide part de O et cro t Jusqu len s quence 1 index n gatif valide part de 1 et d cro t Jusqu len s quence l index peut tre complexe de La forme L X LL sp cifie alors un intervalle s quence d but fin Les bornes peuvent tre omises elles sont alors prises par d faut d but en O sequence fin fin en len s quence 1 s quence d but extrait Les 2 derniers l ments wxevbun 2 copie La s quence enti re wxcvbu on peut encore sp cifier une 3 valeur l enjamb e exemple qui copie La s quence de 2 en 2 wxevbn 2 exemple qui copte La s quence en partant de La fin wxevbnu 11 r f rence http docs python org reference expressions html id d finition de fonction l instruction def ne retourne rien elle est utilis e pour son effet comme L op rateur elle modifie des repr sentations internes l instruction def attend un sy mbole Le nom de La fonction une Liste de param tres encadr e de parenth ses posstblement vide
140. On va juste laborer une interface qui remplacerait le papier et voir les re eR probl mes que a peut poser en termes de faisabilit d un prototype d aspect assez avenant pour convaincre un ventuel client ANALYSE Comme on le voit sur l image cette interface comporte simplement e neuf cellules permettant chaque joueur de marquer son symbole e une instance de Label pour afficher des trucs e un bouton d arr t La cl d une telle interface c est de cr er autant d instances de Canvas qu il y a de cellules jouables en effet lorsque mainloop le gestionnaire d v nements appelle le HANDLER d di il lui passe en argument l v nement en question dont on sait d j que c est un objet muni de propri t s l une d elle tant le widget qui a d clench l v nement autrement dit l instance de Canvas sur laquelle on vient de cliquer DONN ES DU PROGRAMME En arri re plan de cette interface le programme doit maintenir en miroir sa propre matrice de cellules qu on appellera M pour faire simple La raison en est que le programme ne voit pas l interface ne voit pas les symboles figurant dans chaque case Il existe il est vrai des m thodes pour retrouver quels objets ont t dessin s dans une instance de Canvas en un point pr cis connaissant ses coordonn es mais ce sera toujours plus complexe plus indirect donc moins efficace moins rapide que de tester la valeur d un l ment de la matrice M
141. TIONNAIRES ACC S PAR CLE 71 R FLEXIONS simulation ou mulation un simulateur se contente de faire de L effet vu de l ext rieur il donne une authentique impression d avoir affaire l original parce qu il produit Les m mes effets dans Les m mes circonstances simuler une bonne grippe w est pas trop difficile un mulateur travaille un cran plus bas en simulant Les fonctions qui produisent L effet en introduisant des virus morts Le Vaccin contre La grippe d clenche Les m mes r actions immunitaires qu un virus vivant Les techniques d mulation peuvent descendre un niveau de r alisme tel que Le processus simul ne peut plus tre discern de l original Le programme VirtualBox de sun microsystems simule tellement bien une v ritable machine qu il est possible d y installer et d y falre tourner un autre syst me d exploitation c est l un des cr neaux actuellement Les plus porteurs de La technologie informatique virtualiser La r alit ouvre des horizons qui d bouchent sur La mod lisation autrement dit La conception de maquettes de mod les th oriques plus ou moins r ducteurs de m canismes ph ysiques promouvant ainsi L approche exp rimentale dans tous Les domaines robotique chirurgie m t o g n tique fin du monde interpr tes et compilateurs La technologie du traitement de L information volue tr s vite parce que c est justement un univers tout est possible condition de L inv
142. X 48 22 40 21 20 01 10 06 00 OO 00 OO 00 00 00 10 split gt gt gt code eval Ox x for x in code Tiens tiens tiens ca fait deux fois que j applique la m me transformation un texte source de programme ca vaudrait le co t d en faire une petite fonction moins de l int grer dans la proc dure de lecture du fichier En attendant gt gt gt Segment tablel boot strap loader i orrset i D code code Pendant qu on y est proc dons de m me pour interner le code du programme myste re 13 9 gt gt gt code 49 70 40 70 48 71 48 72 00 5E 48 8D 10 74 40 71 48 72 40 70 48 71 00 6C 48 8D 10 74 41 71 10 6E 00 00 00 00 00 00 48 73 40 71 12 8C 21 01 41 71 40 73 60 72 48 73 10 78 40 73 48 71 10 00 split gt gt gt code eval Ox x for x in code gt gt gt Segment 13 9 e oLLSer UxoD code code Mine de rien nous sommes en train de nous faire la main pour la d finition de la proc dure de lecture de fichiers nous venons de faire 3 fois la m me chose pour 3 programmes diff rents il est donc probable que notre facon de proc der soit une assez bonne g n ralisation de cette proc dure ce qui n est pas vraiment inattendu du fait de notre normalisation Nous avons maintenant des donn es dans une table nomm e segment table dont chaque l ment est une information double l adresse origine du segment et la s quence de valeurs qui repr sente le code inter
143. a projeter son objectif et D de se donner les moyens d y parvenir il suffit a la limite d avoir une conscience claire de l objectif pour tre capable de produire la transformation la main mot par mot Apres il s agit bien s r de la programmer mais il y a justement quelque chose de tout a fait remarquable ici c est que l organisation m me du programme est tous comptes faits implicite dans la structure des donn es de d part structure de donn es structure de traitement a texte pilote Nz y F ligne indexe V GEGEN mot ajoute N gt gt caract re bit Le diagramme ci dessus montre e les donn es qu il faut traiter et comment elles se laissent naturellement d structurer e a structure formelle du programme propos plus haut qui se pr sente sous la forme de quatre fonctions compte non tenu de prd d di e la pr sentation des r sultats Et il apparait alors evident que chaque niveau structurel de l information originale est trait par une fonction sp cifique et que la structure formelle du programme correspond exactement la structure des donn es une exception pr s la fonction nettoie acc de au niveau de la repr sentation binaire des caract res par l entremise de la m thode lower et il ne m a pas sembl utile de d composer le programme ce point l Bien entendu le flux du programme lui m me autrement dit la stru
144. a dit salut c est tout Les manipulations qu on peut faire en PYTHON construire une expression avec des op rateurs et Leurs op randes op rateurs sur Les cha nes op rateurs arithm tiques op randes des constantes Litt rales ou des variables valuer une telle expression pour calculer une nouvelle valeur d finir un sy mbole pour repr senter une valeur Litt rale ou calcul e Une expression produit une valeur quand elle est valu e Le simple fait d entrer une expression sous l interpr te suffit L valuer oh value oh 123 value 123 _ value Une instruction a un effet sur l environnement mais ne produit pas de valeur x Cet effet est invisible et c est ce qui fait La difficult de La programmation mais on peut toujours Le mettre en vidence en examinant imm diatement L environnement gt gt gt Xx 2 X X 3 Ow peut mettre plusieurs expressions ou instructions sur La m me ligne en Les s parant par des points virgule a n est pas toujours facile relire mats des fois c est plus commode manipuler gt gt gt x 2 x x 5 gt gt gt x 2 x x 7 Ow aurait pu dire La m me chose avec un op rateur d affectation cumulatif x 2 qui va chercher La valeur de x Lui ajoute 2 et remplace L ancienne valeur par La nouvelle DONN ES L MENTAIRES 21 1 2 APPLICATION DE FONCTIONS L interpr te permet l application d
145. acc s machin pour qu il soit ex cutable si ca a un sens le mode d acc s est la premi re information list e par Is en format long Notion de script ex cutable on peut mettre une commande ou une s quence de commandes dans un fichier et le consid rer comme une nouvelle commande il suffit d en changer le mode d acc s Par exemple si j ai mis dans le fichier machin la commande chmod a x 1 je peux le rendre ex cutable avec chmod x machin et l utiliser d sormais pour rendre ex cutable un script truc en tapant machin truc Remarquons que 1 repr sente le 2 mot de la ligne de commande on y reviendra Bien entendu vous pouvez utiliser man pour une documentation plus compl te sur ces commandes 11 11 23 22 10 2007 2012 par J Feat DOCUMENTS ANNEXES 158 9 3 5 LE SHELL ET SES EXTENSIONS Comme on l a vu plus haut le SHELL est un programme lanc automatiquement l ouverture de la fen tre de terminal ou de la console SHELL est ici un nom g n rique bash est le SHELL par d faut telles que sont configur es beaucoup de machines unix Et comme la plupart des programmes il contient des d finitions de variables et de fonctions e les variables constituent ce qu on appelle l environnement e les fonctions sont appel es commandes Les variables du SHELL servent contr ler certains aspects de son comportement par exemple la variable PS1 abr g de prompt string 1 d finit l invite de
146. ais tous les autres utilisent des caract res d limiteurs appair s comme les parenth ses en LisP pour exprimer formellement la structure ce qui est unique PYTHON c est que c est la pr sentation graphique qui d termine la structure de contr le rapprocher de la pr diction de Donald E Knuth l auteur de THE ART OF PROGRAMMING il y a d j plus de 30 ans We will perhaps eventually be writing only small modules which are identified by name as they are used to build larger ones so that devices like indentation rather than delimiters might become feasible for expressing local structure in the source language Donald E Knuth structured Programming with goto Statements Computing Surveys Vol 6 No 4 Dec 1974 Revenons la fonction voyelle remarquez que les 6 premiere lignes retournent imm diatement une valeur ce qui signifie que l valuation de la s quence est obligatoirement abandonn e en ce point et si le caract re pass en argument n est pas l une des six voyelles test es on aboutit forc ment la derni re instruction donc on peut avec certitude retourner la valeur faux Certitude d ailleurs toute relative puisque j ai cru bon de faire l conomie des voyelles accentu es J ai m me fait le sacrifice de quelque chose d encore plus important comme on va le voir tout l heure Et heureusement que je n ai pas choisi de tester les consonnes car il m aurait fallu alors plus de 20 lignes de code E
147. ait remonter de deux niveaux avant de redescendre dans le dossier h du dossier C Mais pourquoi fait il remonter d un cran Parce que par design tout dossier sait qui le contient sans qu il soit besoin de le nommer une sp cification telle que est toujours valide et d signe le contenant c est d la conception m me du syst me de fichiers et nous y reviendrons Je sais bien que tout ceci n a pas l air pas trop fun mais c est juste pour expliquer on verra plus tard que les sp cifications de fichiers peuvent servir bien d autres choses que la navigation L important ici c est de comprendre que n importe quel dossier ou fichier de l arborescence peut tre d sign de facon univoque que ce soit pour s y d placer ou pour le manipuler avec comme cons quence qu un fichier peut tre manipul distance de n importe quel point de l arborescence La raison d tre d un tel m canisme de commandes est que toutes les op rations sont programmables et que les applications munies d une interface graphique utilisent en fait ces commandes pour naviguer dans la hi rarchie et en manipuler les objets dossiers ou fichiers Pour r capituler e mkdir abc cr e un directory nomm abc l o la commande est ex cut e 11 11 23 22 10 2007 2012 par J Feat DOCUMENTS ANNEXES 155 e cd abc permet alors de descendre dans le directory abc e pwd affiche maintenant le chemin complet depuis la racine pour parvenir e
148. andes tap es au clavier et en affiche le r sultat De la m me fa on presser cliquer sur un bouton dans une fen tre d clenche une action pr programm e dont les r sultats vont peut tre s afficher dans la fen tre ou dans une autre tout d pend du programme ll faut garder l esprit que la fen tre et le bouton ne sont que l interface entre l utilisateur et le syst me et que pour certaines op rations aucune interface n a encore t programm e par cons quent il vous faudra taper vous m me les commandes requises dans ce qui remplace le terminal dans les environnements modernes multi fen tr s et qu on appelle traditionnellement la fen tre de terminal ou console selon les cultures 9 3 1 INTERFACES Le sch ma ci contre vous donne une id e sommaire de l organisation du syst me d exploitation et des autres fen tre de terminal composants Au plus profond le kernel ou noyau du syst me est essentiellement un programme qui tourne sur lui m me en coutant ce qui se passe dans le monde ext rieur en g rant des organes p riph riques d entr e et de sortie 4 gestionnaire de fen tres gestionnaire d entr es sorties Au dessus de lui le gestionnaire de fen tres en ouvre moins au demarrage du syst me la fen tre de login qui permet un utilisateur de s identifier pour pouvoir acc der ce syst me bien entendu pour des raisons de s curit si vous ne pouvez
149. ant que je suis s r que tout fonctionne correctement je peux d finir une fonction avec ce bout de code de sorte que je pourrais l essayer avec d autres mots sans avoir me taper de tout retaper chaque fois La fonction n a besoin que d un argument le mot je ne vais donc lui mettre qu un seul param tre def explose mot iy lt H attention chaine vide for x in mot if voyelle x else c return v c Y v x pareil que v V x x Remarque cette fonction retourne une valeur double repr sent e entre parentheses il s agit d un type de sequence un peu particulier cf tuple sur lequel nous aurons l occasion de revenir Pour l instant il nous suffit de l exploiter comme une sequence ordinaire valeur explose cheval valeur ea chvl valeur 0 l ment 0 valeur 1 l ment 1 chvl Hemarquez qu on aurait pu crire directement voyelles consonnes explose cheval ce qui a pour effet de distribuer la double valeur aux deux variables situ es en partie gauche de l expression Je ne l avais pas mentionn avant mais cette syntaxe vaut en fait pour tout type de s quence Ainsi X y 2 abc a pour effet de donner x la valeur a y la valeur b et z la valeur px05 2 essayez cette explosion avec d autre mots comme d sesp r ou cr ve c ur L it ration est un moyen de traiter l information l ment par l ment c est une appli
150. ar C D une part les contraintes de la mise au point nous imposent une approche un peu plus conviviale d autrepart ce serait sympathique de voir ce que fait le code machine o en sont les registres ou m me quel est l tat de la m moire Car en d finitive comment savoir si le code machine ne contient pas lui m me un bug Le fait que le code ne fait pas ce qu on attend d pend de la qualit de l mulation mais aussi de la qualit du code mul On va donc am nager le s quenceur pour qu il nous affiche l instruction en cours d ex cution ainsi que les valeurs des registres def run PC A 0 while True print PC 4031 A 8031 17 PC Op arg datalPCrrC rz PC 2 xpress opecde LabDleISplIl eplace SEE iarg print Ss 1 t s t acode arg xpress step exec xpress acode opcode table 0 Maintenant la toute premiere instruction de la boucle while affichera la valeur courante du compteur ordinal et de l accumulateur la variable acode repr sente le mnemonique qui serait utilis dans le langage d assemblage ASSEMBLY CODE et xpress a comme valeur le code PYTHON Sur le point d tre execute par la fonction exec de la derni re ligne Quant la fonction step ce n est pour le moment qu un embryon de ce que devrait tre un veritable STEPPER mais nous pourrons l augmenter a loisir def step k raw input command processing while k isdigit
151. ar exemple 11 11 23 22 10 2007 2012 par J Feat 128 FORMES ET TRANSFORMATIONS gt Later Tor inm 2 LE TO 497384 497384 497384 gt gt gt xdg x for x in 3 0 for z in range 3 11 497864 497904 497944 PROPOS DE L EXPLOSION EN MULTIPLES PETITES FONCTIONS Comme dans tous mes programmes vous observerez qu il y a g n ralement une fonction principale que je m efforce de laisser aussi maigre que possible pour en pr server l aspect tour de contr le laissant le soin a des fonctions subalternes de calculer des choses qui encombreraient la compr hension du traitement principal le HANDLER Nous ne sommes pas loin de la mentalit du programmeur LisP ou m me du programmeur ANSI C qui d veloppent de mani re incr mentale en ayant test chaque expression et mis au point chaque petite fonction Et comme chacune de ces petites fonctions a un nom ce nom s il est bien choisi est auto documentaire ce qui permet de s abstraire des d tails de comment elle est programm e pour ne plus m moriser que ce pourquoi elle est programm e La preuve en est que vous savez ce que ca va donner si vous valuez l expression morpion Tk alors que je suis absolument certain que vous ne savez pas de quoi Tk est fait Moi non plus d ailleurs Je sais bien que je l ai d j crit quelque part mais c est ce sont ces couches successives d abstractions qui permettent de construire avec aisance des programme
152. ar ligne dans la fen tre de terminal Appelons d abord l interpr te et importons le module graphique gt gt gt Trom Tkinter import Hien ne se passe et c est normal puisque nous n avons rien fait que charger un module mais d s qu on entre la deuxi me ligne on peut voir une fen tre vide dont la taille par d faut n a pas encore t ajust e gt gt gt top Tk fen tre maitre La ligne suivante n a aucun effet apparent l instance message de Label a bien t cr e A A Ak mais elle ne sera pas affich e tant qu on appellera pas sa m thode pack et en effet d s l entr e de la 4 ligne la fen tre top recalcule ses dimensions et s adapte la taille du texte de message gt gt gt message Label top text coucou fg pale violet gt gt gt message pack ce stade on peut fermer la fen tre graphique ou en faire une deuxi me en r p tant les m mes instructions ou encore arr ter PYTHON avec contr le D L important ici c est le principe que toute instance de Tk se r alise comme une nouvelle fen tre Voil donc nos 4 lignes de code from Tkinter import top Tk Instance de la classe Tk message Label top text coucou fg pale violet message pack et leur explication detaillee charge le module Tkinter qui permet la cr ation de widgets 2 cr e une instance de la classe Tk le widget top qui sera un conteneur p
153. arguments le nom des attributs changer et leur nouvelle valeur exactement comme quand on d finit une instance de Label Cette fonction valeur sera UN HANDLER li par bind et appel par le FRAMEWORK avec un argument l objet qui constitue l v nement qui a provoqu le CALLBACK d o le param tre event inutilise INTERFACES FEN TRES ET BOUTONS 77 def valeur event val configure text str eval express get Ensuite il nous faut importer le module math qui nous donnera effectivement acc s toutes les fonctions math matiques standard from math import La troisi me ligne du programme ne nous surprend pas vraiment from Tkinter import Et puis apr s d finition de top la fen tre maitre et express destin accueillir l expression la fonction valeur sera li e la touche RETURN en tant que HANDLER pour ce dernier widget top Tk express Entry top express bind lt Return gt valeur express pack val Label top Val pack top mainloop i Remarquer la nature des arguments de la m thode bind le premier est une chaine un nom d v nement tandis que le symbole valeur est utilis ici en tant que r f rence exactement comme quand on avait construit une table de fonctions pour l exercice px18 2 Cette fonction valeur sera invoqu e comme l tait la m thode destroy utilis e plus haut on l appelle un CALLBACK parce qu elle est appel e par mainloop le gest
154. ate line 6 10 129 10 width 7 fille maroon c create line 127 13 127 60 width 4 IfIill yellow c cre ate 110 20 129 49 width 1 TILLS plack y CoCreate Peccangle iin 60 135 100 c create line 120 50 100 100 width 4 rille bhlack C acre ate 30 146 100 widthe4 till black c create 100 120 150 width Fill black C CYeate 100 135 190 vidth 7 Ti ill black Button top text start command top quit pack side TOP Button top text stop command top quit pack side TOP LT Label top text devine fg red LT pack LM Label top text fg red LM pack LP Label top text str len P fg blue LP pack Lop mainloop top destroy REMARQUES FORMES ET TRANSFORMATIONS A propos de la taille des mots donc de la largeur de la fen tre pour les mots les plus longs si vous regardez le code de pr s vous constaterez qu au moment ou LT l instance de Label qui repr sente le mot a deviner appelle la m thode pack la variable devine a deja ete d finie et donc que la taille de la fen tre s y adaptera automatiquement quelque soit la longueur du mot PROTOTYPAGE D APPLICATIONS 123 propos de la fonction valide remarquez que je n ai pas vraiment besoin de passer des variables globales en argument a complique inutilement les choses cependant dans le contexte d un pro
155. ation des 21 codes d op rations de ce langage par conversion en 21 expressions PYTHON sp cifiques la seule condition de pouvoir substituer une valeur pertinente au symbole En fait c est la technique utilis e dans un Jrr just in time compiler qui fera l objet d un cours plus pouss en L3 Pour un un langage compil en BYTE CODE comme JAVA OU PYTHON le JIT c est le module qui effectue la traduction dynamique autrement dit qui convertit la vol e le BvTE CODE en instructions directement compr hensibles par le processeur Et nous sommes justement sur le point d en tudier la faisabilit 46 c est d ailleurs comme ca qu est cod e la m thode lower ce qui explique pourquoi elle ne vaut pas pour l utf 8 11 11 23 22 10 2007 2012 par J Feat 136 FORMES ET TRANSFORMATIONS FAISABILITE Pour effectuer cette conversion du code machine en PYTHON je vais me fabriquer une table d association qui met en correspondance les codes d op ration et leur equivalent PYTHON elle est directement construite a partir de nos tables pr c dentes et pr sent e dans le m me ordre qu la section 13 3 du document Original opcode table d apr s la table 13 3 0x20 add pem _ 1 0x60 A I Is DxEOs D adgd 7 A opem 11 0x21 sub Tj Dentr eub UA xkELS suo T A datalaacal 11 1 0x22 nand
156. ayez par exemple len petit chat calcul de la longueur d une s quence Rappel la fonction len prend une s quence en argument et en retourne le nombre d l ments Ainsi dans le cas ci dessus elle compte combien il y a de caract res dans la chaine pass e en argument et devrait donc retourner la valeur 10 On d finit une fonction en sp cifiant la variable qui repr sentera l argument puis en calculant une valeur partir de cette variable pour enfin retourner cette valeur grace au mot cl return def double truc return truc 2 Attention une d finition de fonction doit tre suivie d une igne vide qui fait comprendre l interpr te que la d finition est termin e en effet au premier alin a apres la d finition vous verrez apparaitre un de continuation pressez une seconde fois la touche cf section 9 2 Ici la variable truc repr sente l argument c est dire la valeur qui sera v ritablement utilis lors de l appel de la fonction double double 11 22 puisque truc vaut 11 double do dodo car truc vaut do La variable truc est appel e param tre formel de la fonction formel parce que ce n est qu une forme vide qui ne prendra de valeur que lorsque la fonction sera activ e en d autres termes le param tre c est l argument mais vu de l int rieur de la fonction alors que l argument c est la valeur que vaudra le param tre lorsque la fonction sera ac
157. bje ct object at 0x782ab0 gt gt Cet objet est muni de m thodes sp cifiques en particulier la m thode info qui retourne un objet nttplib HTTPMessage ou plus exactement une instance de ce type gt gt gt LIU sino httplib HTTPMessage instance at 0 11 7 8 gt a partir duquel on peut fabriquer un dictionnaire avec cette simple expression information dict flux info et information maintenant comme valeur connection content type text html charset iso 8859 1 date Sun 01 Feb 2009 20 13 34 GMT expires Sun 01 Feb 2009 21 05 31 GMT Lagt modified fun OI Feb 2009 19 05 31 GMT server Apache vary Cookie Accept Encoding PHP 4 3 10 ou charset est une donn e de content type Essayons d extraire le CHARSET d un URL quelconque gt gt gt u http createdigitalmusic com gt gt gt dict urlopen u anio l content type l 8plie 1 8plit 1 UTF 8 gt gt gt u http www iedparis8 net ied gt gt gt dict urlopen u info content type l l split 1 split 1 150 8859 41 Th oriquement pour tout URL l expression dict urlopen url info l content type split 1 split 1 aussi tordue qu elle paraisse devrait retourner la valeur attendue si tant est que charset est effectivement transmis avec le content type et pour des raisons de lisibilit mieux vaudrait l a
158. blisher s of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version 5 COMBINING DOCUMENTS You may combine the Document with other documents released under this License under the terms defined in section 4 above for modified versions provided that you include in the combination all of the Invariant Sections of all of the original documents unmodified and list them all as Invariant Sections of your combined work in its license notice and that you preserve all their Warranty Disclaimers The combined work need only contain one copy of this License and multiple identical Invariant Sections may be replaced with a single copy If there are multiple Invariant Sections with the same name but different contents make the title of each such section unique by adding at the end of it in parentheses the name of the original author or publisher of that section if known or else a unique number Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work In the combination you must combine any sections Entitled History in the various original documents forming one section Entitled History likewise combine any sections Entitled Acknowledgements and any sections Entitled Dedications You must delete all sections Entitled Endorsements 6 COLLECTIONS OF DOCUMENTS You may make a c
159. bstraire en une fonction ou le param tre f repr senterait un flux d j ouvert 23 malheureusement non document es ARCHITECTURE DE PROGRAMMES 99 der get charset f f return dict Z 1nfo content cype 4 6plit 1 6plit 1 et qu on utiliserait ainsi from urllib import urlopen flux urlopen http www iedparis8 net ied charset ger charseLt rlux En fait aucune technique n est infaillible l exemple de http fr wikipedia org wiki Distribution linux montre que certains serveurs ne donnent pas ce renseignement alors m me qu il figure dans la section HEAD de la page dans ce cas il faudra recourir notre toute premi re m thode Connaissant le CHARSET nous savons maintenant s il faut convertir l information pour avant de l indexer uniformiser son encodage gr ce aux m thodes decode et encode qui vont permettre de changer l encodage du mot avant son insertion dans l index cf la documentation sur les cha nes Supposons par exemple que nous ayons d j lu et index la page lt hitp wiki mandriva com fr gt qui est en ut 8 donc que nous avons donc d j constitu un index de n mots en uti 8 mais que nous voudrions augmenter cet index avec la page http www iedparis8 net ied qui est elle en iso 8859 1 Sur cette page la premi re ligne contenant des codes sur 8 bits sera lue ainsi L title institut d enseignement We distance universit xe9 paris 8 l
160. c ce petit programme 2011 11 23 22 10 16 2007 2012 par J Feat 52 FORMES ET TRANSFORMATIONS import sys cf annexe 9 1 2 sys getdefaultencoding qui vous dira quel est effectivement le copEc par d faut de l interpr te la version 3 par exemple est en utf 8 par d faut mais il est aussi possible de tripoter le fichier site py des versions ant rieures pour changer ce CODEC a condition de bien comprendre ce qu on fait Voici la m me donn e uf de p ques noel enregistr e dans quatre formats diff rents les codes que vous voyez dans les fichiers seront ceux de la repr sentation utf 8 encoded utf 8 no BOM text Data AA encoded latin 9 text Data Len aneneR18 Type Creator TXET hcR Sel faa Len 4 Tuype Creator TXET hcR Sel aaa CS 93 75 28 64 65 28 78 2 71 75 B5 73 28 iuf de prtques BD 75 66 28 64 65 28 78 EZ 71 75 65 73 26 EB 28 de p ques 1 C3 AG 28 BE BF C3 RB 6 t nos L 1 GE GF EB BC nall encoded utf 8 text Data encoded w latin 1 Data Len 808801B Tupe Creator TXET hcR Sel poappaapa Len 14 TypeACreator TXET hcR Sel jaa Ba BBBBBB EF EB BF CS 93 75 66 28 64 65 28 78 C3 R2 71 75
161. cat FA bon good Maintenant on va voir comment s en servir pour traduire une phrase telle que phrase le bon chat boit du lait D abord tout serait plus facile si cette phrase etait une liste de mots mots phrase split le bon chat boit du lait Puisque chaque mot figure dans le dictionnaire une expression comme FA x for x in mots va construire une liste ou chacun des mots de la phrase sera remplac par son quivalent anglais tir du dictionnaire trado FA x for x in mots the good cat drinks some milk Il ne me reste plus qu utiliser join m thode qui s applique une chaine repr sentant le s parateur ici l espace et concatene les elements d une liste le s parateur pour former une nouvelle chaine n 7 Join trado the good cat drinks some milk ce stade il me semble que ce que j ai d taill c est le principe m me du processus de traduction mais comme il implique plusieurs op rations de transformation la sagesse voudrait que j en fasse une fonction DICTIONNAIRES ACC S PAR CLE 63 regroupant toutes ces lignes en faisant bien s r abstraction des valeurs litt rales def traduis dic phrase mots phrase split trado dic x for x in mots ceci traduit la liste d un seul coup return 9301n trf53005 Reste l essayer sur mon exemple traduis FA le bon chat boit du lait
162. cation du principe diviser pour r gner d s lors que je peux d structurer la donn e la d composer en l ments semblables je peux concevoir le traitement qui convient pour un l ment et l appliquer alors tous les l ments l existe plusieurs formes d it rations Celle que nous venons de pratiquer est explicite mais a deja manipul des it rations implicites comme dans px04 1 t in azertyuiop Nous en verrons encore d autres formes et il en est une de remarquable pour son expression elle a recours elle m me pour se d finir Supposons que nous n ayons pas de fonction pour calculer la taille d une s quence on en a d j eu besoin 2011 11 23 22 10 16 2007 2012 par J Feat 36 FORMES ET TRANSFORMATIONS alors il aurait bien fallu la d finir La conception d une telle fonction est d une simplicit extraordinaire elle doit pouvoir traiter deux cas de figure si la s quence est vide la valeur retourner est O dans tous les autres cas la taille de la s quence c est 1 la taille du reste de la s quence ce qui s exprime ainsi def taille s L not 8 t return D return 1 taille s 1 En effet regardez comment est trait le 2 cas la s quence n est pas vide sinon la fonction aurait d j retourn 0 donc sa taille est au moins gale 1 plus la taille du reste de la s quence sans son 1 l ment ce qui s exprime par s 1 Par curiosit ins rez un print repr s
163. ce que a fait et je pourrais ramener cette fonction a une seule ligne de code encore un one liner def voyelle x return x in aeyuio px05 1 d finissez la fonction consonne de la fa on la plus conomique possible en supposant que son argument sera uniquement constitue de caracteres alphabetiques ITERATION SUR UNE SEQUENCE Maintenant j aimerais pouvoir traiter un mot entier et l exploser en 2 chaines distinctes une pour les voyelles qu il contient et une autre pour les consonnes Ne vous m prenez pas sur l apparente futilit des traitements propos s les cas d cole repr sentent en essence l application de principes g n raux et pr parent a la maitrise de l outil sachant qu il s agit la d un des outils les plus complexes jamais invent s la maitrise globale passe forc ment par la maitrise des l ments Ici le probleme pos est celui de la r p tition techniquement appel e it ration si je sais faire pour un et que ma solution est aussi generale que possible je dois pouvoir faire pour tous Toute la difficulte du traitement automatique est condense dans cette formule g n raliser les solutions En effet il est toujours possible de traiter chaque cas en particulier mais la vie est trop courte S il s agit d une sequence ce qui est souvent le cas des traitements automatiques il existe une instruction primitive d it ration qui prend schematiquement la forme suivante for x in
164. celle puis tester l instance d finir et tester une m thode size Sur le m me sch ma que la m thode pop red finir pop avec un try except pour que comme en LISP cette m thode retourne sans provoquer d erreur quand la pile est deja vide tester ce cas de figure C est bien d avoir un type de donn e qui se comporte comme une pile mais en y regardant de pr s a ne m avance pas terriblement par rapport au comportement natif d une liste mis part que le nom des m thodes de cette classe sont conformes l usage Mais l o a devient int ressant c est quand je veux d finir une queue la diff rence entre une pile et une queue c est que dans le premier type le dernier arriv est le premier servi alors que dans le deuxi me c est le premier arriv qui est le premier servi l exemple classique est celui de la queue d imprimante o les JoBs successifs sont trait s dans l ordre de leur soumission class Queue Stack def pop self return self stack pop 0 La syntaxe de cette definition sp cifie que e Queue est comme une pile y compris pour ce qui est de l initialisation e sauf que le depilement se fait a partir du premier empile pas du dernier De fait Queue est defini comme une sous classe de Stack et partage les m mes ressources sauf celles qui seraient red finies localement comme c est le cas ici de la m thode pop alors que les m thodes init et push ainsi que size si d finie s
165. chier de m me nom mais affuble du suffixe pyc PYTHON compile d sormais chaque fois qu on importera ce module c est la version compilee qui sera charg e directement Ceci veut dire que si le code du module n cessite des retouches et des mises au point il est n cessaire de d truire manuellement la version compil e pour forcer PYTHON a la recompiler Remarquons qu ce stade il n est pas obligatoire de faire de essaye un script autonome il est toujours possible de l utiliser en tant qu argument de la commande PYTHON python essaye le dernier mot banal De ces six mots entr s sur la ligne de commande PYTHON enl ve le tout premier python pour recr er les conditions dans lesquelles le script essaye serait lance de fa on autonome la variable sys argv ne contiendra donc que essaye le dernier mot banal ESPACES DE NOMMAGE On avait remarqu qu apr s le chargement d un module les noms qu il d finit sont accessibles a condition de les pr fixer du nom du module ici plusieurs pluriel ou sys argv La raison en est que pour chaque module DOCUMENTS ANNEXES 145 est cr un espace de nommage et que pour acc der un nom de cet espace il faut le pr fixer du nom de l espace les m me m canismes existent en CLISP Mais comme on l a vu avec module turtle il y a une autre syntaxe d importation qui importe directement les noms du module dans l espace courant il n y a donc plus besoi
166. ci on cr e top le master widget comme une instance de Tk Mais au lieu d un Frame nous allons cr er une instance de Canvas une classe qui connait des m thodes de dessin entre autres la m thode create oval Cette m thode dessine en fait une ellipse inclue dans un rectangle implicite et attend donc au moins 4 arguments les coordonn es du coin sup rieur gauche et celles du coin inf rieur droit du rectangle en question Ainsi pour dessiner un cercle de rayon r tant donn s x et y coordonn es du point de clic on d terminera les 4 arguments attendus en retranchant r x et y pour le coin sup rieur gauche et en ajoutant ce m me r x et y pour l autre coin du rectangle Dessiner un disque n est pas fondamentalement diff rent un disque n est qu un cercle plein dont la couleur est contr l e par l attribut fill et le contour par l attribut outline 2011 11 23 22 10 16 2007 2042 par J Feat 80 FORMES ET TRANSFORMATIONS def manager event position event dessine event def position click afficheur text ss 28 click x click y def dessine event y evelht X event V ew event widget r 20 lerayon ew create oval x r r x r r fill blue outline from Tkinter import top Tk C Canvas top width 400 height 400 bg light yellow Ca pack C bind lt Button 1 gt manager afficheur Label top afficheur pack top mainloop
167. commande qui appara t au d but de chaque nouvelle ligne de commande la variable PATH d finit une liste de dossiers dans lesquels bash cherche le programme dont on a tap le nom en tant que commande autrement dit comme premier mot de la ligne de commande Ces variables peuvent tre list es de deux mani res e commande set affiche le nom et la valeur de toutes les variables e a commande echo suivie du nom d une variable pr c d du symbole en affiche directement la valeur le est ici un op rateur d valuation echo PATH afficherait b tement le texte PATH alors que echo PATH affiche la valeur de la variable PATH Les commandes sont en fait de deux sortes e les commandes internes sont des fonctions d finies dans le SHELL proprement dit et ne dependent donc pas d une localisation par la variable PATH par exemple cd pwd set ou echo sont des commandes internes e les commandes externes sont des programmes executables autonomes r sidant g n ralement dans le dossier usr unix system resources on peut donc les reprogrammer ind pendamment ou en ajouter de nouvelles Le terme commande ne doit pas nous faire perdre de vue qu on est dans un contexte op rationnel donc que les commandes sont interpr t es comme des op rateurs autrement dit s appliquent des op randes et de ce fait constituent des expressions qui prennent alors une valeur dans ce contexte voil pourquoi echo PATH ne fait pas
168. constante e a variable logique J d finit le joueur tel que J vrai corresponde a xX et sinon l int r t de d finir PROTOTYPAGE D APPLICATIONS 125 le joueur d un point de vue logique c est qu on alternera tr s facilement en basculant J not J FAISABILIT HANDLER Comme on l a vu d s le d but chaque instance de Canvas est autonome mais a ne m emp che pas de leur affecter le m me HANDLER que j appellerai ici tout simplement joue Une telle fonction attend un et un seul argument l v nement qui a d clench le CALLBACK et que j appellerai event Et le premier truc que je ferai dans cette fonction c est de d cortiquer l v nement event pour savoir quel en est le widget autrement dit quelle est l instance de Canvas qui a d clench le callback widget que je l appellerai ici simplement w On savait d j que la nature et la forme des donn es conditionnait leur traitement et c est particuli rement vrai ici parce que je me suis arrang pour que chaque instance de Canvas se souvienne sa cr ation de sa position dans la grille en termes de rang e et de colonne en d finissant dans chaque objet les attributs appropri s Ainsi l acc s au widget w me permet de manipuler directement l l ment de la matrice M qui lui correspond toujours en termes de ligne et de colonne ce qui me donne imm diatement le moyen de savoir si cette cellule est d j occup e auquel cas un return term
169. corps qui ont d j un s au singulier Ah me direz vous il suffit d ajouter un petit test def pluriel mot JE imotl 1 is 8 return mot return mot s D accord mais j aimerais quand m me bien pouvoir utiliser cette fonction pour d autres mots courants comme final ou bijou et qu elle me renvoie un pluriel correct Oh bien s r vous pourriez me rajouter deux autres petits tests et puis aussi un pour cheval et un pour genou Mais alors que ferez vous de seau OU de riz Je vous laisse reflechir Nous abordons ici un point delicat celui du design d un programme Nous voyons bien qu il y a plusieurs probl mes pour une fonction unique mais ce qui n est pas clair c est quelle approche adopter e l approche brutale un test pour chaque exception Je ne sais pas combien il y en a mais a vue de nez j ai l impression que a va faire beaucoup e l approche explos e une fonction pour chaque type d exception car il y a des r gles sp cifiques pour des classes de mots travail est comme corail et ressemble d ailleurs beaucoup a journal qui pourtant ne se comporte pas comme chacal et ripou se termine comme mou mais leur pluriel diff re et n oublions pas les pneus qui sont bleus ni les beaux landaus et autres cadeaux sans parler des mots comme doux qui ont deja un x au singulier e o a se complique c est qu il a simultan ment des classe
170. ctionnelle ems 46 3 3 programme autonome cira ktn ta kR R OR KR EKA 47 3 4 UNICO A A scoot a de on 50 dictionnaires acc s par cl 57 5 interfaces fen tres et boutons Rene 73 architecture de programmes eH 87 D infrastr ct res IOGICICN dieta Udo ae 103 prototypage d applications xssceissesieseacixdedit uter dnt 115 143 PTT 168 ee ee 171 table des mati res donando ee en Rl e Beca os Rd 178 42 FORMES ET TRANSFORMATIONS Une liste est une s quence une collection ordonn e une s rie d objets arbitraires cons cutifs accessibles par index arbitraire ici signifie qu une liste peut contenir n importe quel type d objet et ces objets peuvent tre h t rog nes c est dire de types differents la diff rence des chaines et des nombres les listes sont mutables jargon technique pour dire qu on peut en modifier les l ments Les listes en tant que s quences exhibent un comportement similaire celui des chaines on peut les concat ner avec l op rateur les r pliquer avec l op rateur et on acc de leurs l ments exactement de la m me fa on evaluez ces expressions pour voir jurons saperlipopette mille
171. cture de contr le respecte strictement la structure des donn es puisque les fonctions indexe ajoute et nettoie sont en effet appel es dans cet ordre depuis la fonction qui pilote l ensemble du traitement ARCHITECTURE DE PROGRAMMES NOTES La fa on dont l information se Laisse naturellement d structurer peut servir de guide pour Le traitement repr senter L information c est choisir un type de structure de donn es pour La repr senter Liste table d associations agr gat composite des types ci dessus transformer L information pour La mettre sous cette nouvelle forme choisir une structure de donn es suppose Une INTUITION PR ALABLE du genre d op rations qu on voudra Leur appliquer de La commodit de l acc s aux donn es pour La structure choisie et ceci implique un minimum d exp rience en pratique LL Y A TROIS TYPES PRIMITIFS DE STRUCTURES acc s par INDEX c est Le cas des cha nes donc des fichiers et des Listes La recherche de l information est s quentielle Le temps pour retrouver l information d pend de La taille de La structure acc s par CL c est Le cas des dictionnaires mais aussi des variables scalatres La recherche de L information est directe Le temps pour retrouver l information est ind pendant de La taille de La structure acc s par ATTRIBUT propri t d objet m thodes propres un type d objet accessibles partir d une instance un objet d finit implicitement un espace de nommage LL pe
172. cule d une centaine de feuillets incluant quelques dizaines de lignes de code Le code en question est r dig dans un langage de programmation simple il est propos titre d exemple et sert de base aux exercices personnels le cours n est donc pas un manuel de r f rence du langage en question Cette introduction aux langages de programmation est propos e en parall le un autre cours de programmation mais dans un autre langage LisP Vous y d couvrirez deux nouveaux points de vue e celui de l approche dite fonctionnelle ou applicative de la programmation e celui de la repr sentation interne des donn es dont la repr sentation externe celle que l interpr te veut bien vous montrer devrait d j vous tre famili re La raison pour laquelle ces points de vue ne sont pas vraiment d velopp s dans ce cours ci tient une d cision d lib r e de privil gier pour l instant le DESIGN des programmes Une fois acquises les notions fondamentales vous acc derez sans difficult aux cours plus sp cialis s du semestre suivant sommaire O fondements interaction avec le syst me E E 7 CD donn es l mentaires III C mm memes 13 02 manipulation de s quences A E E A E I Ee T E E A E E 25 3 etes Acc s INdex 2042492220122m52001223022900 29200 41 4 dictionnaires acces par 57 5 interfaces fen tres et boutons eese
173. d 31 34 40 32 next load 32 36 GU 23 add data 38 48 32 store val 3A 49 33 start in data 3C 40 33 load data 22 FF FF AQ 12 34 brz next 42 41 32 out val 44 10 44 end jump end px34 4 ajouter au programme la capacit d afficher le code machine de mani re symbolique Hemarque aucune de ces extensions n exige un travail d mesur celui ci par exemple se r alise en moins de 20 lignes de code condition de rajouter les tiquettes symboliques dans la table du segment comme ceci segment table 13 8 offset 48 code 16 58 16 681 URSA t start 0x32 4 val 0x33 data 0x34 next 0x44 end La fonction d affichage n a plus qu v rifier avant le print d un op rande si cette adresse est d finie dans la table et la remplacer le cas ch ant par le nom correspondant videmment ce serait mieux de pouvoir conserver a dans le fichier source et voil pourquoi j ai pr vu un format mots cl ais ment augmentable OFFSET CODE LABELS Cf read_hexcode px34 5 exploiter les donn es existantes pour construire un assembleur symbolique capable de lire un texte source de programme ne contenant que des symboles mm moniques ou d adresses dont la sortie serait le code machine ex cutable par notre mulateur 11 11 23 22 10 2007 2012 par J Feat 142 FORMES ET TRANSFORMATIONS PILOGUE Ce qu on a appris ici est tout fait r
174. d une chaine charge pour le programmeur de mettre cette donn e sous la forme appropri e dans la variable qui lui convient e elle peut aussi prendre un nombre entier comme argument auquel cas elle se contente de lire le nombre sp cifi de BYTES i e octets et la prochaine utilisation de cette m thode lira le reste du fichier depuis le point ou on s tait arr t Pareil pour la m thode close elle ne peut tre utilis e que par un objet de type file et a pour effet de clore le fichier notez qu un programme qui s arr te en laissant en plan un fichier ouvert en criture emp che que le syst me le r pertorie comme il se doit dans le meilleur des cas le fichier apparaitra avec une taille z ro Cette m thode n a pas de valeur de retour Remarque une fois le fichier compl tement lu toute autre tentative de lecture retournera la chaine vide si on veut le relire il faut d abord le refermer puis le rouvrir la raison en est que l objet file cr par open sait exactement ou il en est dans le fichier et que moins de savoir comment manipuler cet index le plus simple est encore de tout recommencer 4 3 2 FICHIERS DONN ES NON TEXTUELLES La m thode read est certainement ideale pour lire un texte entier par exemple un po me une page HTML ou le texte source d un programme Mais un dictionnaire comme ceux qu on a fabriqu s plus haut sont des donn es structur es pas vraiment du texte moins
175. de de programmation fonctionnelle expressions bool ennes programme autonome op rations sur fichiers interfaces fen tres et boutons l ments de programmation graphique et de construction d interfaces widgets et m thodes contr le de la souris de l affichage et de la communication entre l utilisateur et le programme proprement dit partir de ce point vous savez tout ce qu il faut savoir sauf qu il peut para tre parfois difficile de mettre en pratique des connaissances th oriques abstraites le reste du cours a donc pour objet de vous immerger dans la r alisation de v ritables programmes avec une d marche un peu plus professionnelle exigeant plus de rigueur dans l analyse des probl mes pos s ainsi que pour la conception et l inception des solutions En m me temps cette partie d borde du cadre d une stricte initiation proposant une r flexion sur l approche des probl mes l ad quation des outils conceptuels d j votre disposition et sur la facon de les mettre en uvre pour programmer de fa on efficace 6 architectures de programmes m thodologie de la conception de programmes travers un exemple pratique infrastructures logicielles organisations du logiciel rudiments de l approche orient e objet mod le client serveur framework prototypage d applications principes de d veloppement rapide et de conception de programmes techniques de programmation dirig e par les donn es dirig e
176. de 6 en 6 en partant de la fin Mea px02 1 soit mot cheval exprimer le pluriel de ce mot en rempla ant le l final par ux px02 2 soit z abracadabra d finir a et c partir de z tel que a ait comme valeur abra et c ait comme valeur cad coder l expression qui permettrait de reconstituer la valeur de z en utilisant uniquement a et c sans a ni c construire cadabracad partir de 7 px02 3 en utilisant uniquement a et c coder l expression qui construit abracadabracadabracadabra px02 4 pareil mais sans a ni c uniquement partir de px02 5 soit pommedeterre coder en une seule expression l insertion des traits d union l ou ils sont n cessaires peut on effectuer l op ration p 7 Qu en conclure px02 6 soit x Agence France Presse coder l expression du sigle AFP partir de x red finir x avec comme valeur Pari Mutuel Urbain et modifier l expression pr c dente pour obtenir PMU comparez les deux expressions ne pourrait on pas obtenir ces deux r sultats avec une seule m me expression Quelle serait cette expression 2 2 D FINITION DE FONCTION On appelle fonction un symbole qui fait r f rence un calcul programm en fonction d un certain nombre de param tres ce nombre peut d ailleurs tre nul Une fonction s utilise en l appelant par son nom et en mettant entre parenth ses l argument ou les arguments qu elle attend ess
177. de se donner le temps de r capituler d organiser ce qu on vient de comprendre sous une forme structur e ces notes pourront alors servir de r f rence pour retrouver tr s vite une d finition ou un d tail particulier Notre productivit est ce prix Ces notes sont galement l occasion de prendre conscience de ce qu on a pas assez bien compris pour le reformuler simplement Le forum est alors l endroit id al pour poser une question les r ponses multiples y ont souvent des points de vue multiples et sont donc autant d clairages diff rents sur un point obscur Les objets qu on peut manipuler ew PYTHON valeurs litt rales des mots des phrases s quences de caract res des nombres suites de symboles num riques nombres entiers nombres r els variables une Variable est un symbole repr sentant une valeur La valeur peut tre un des types de donn es mentionn s ci dessus sy mboles d op ration cf ci dessous NB Les valeurs Litt rales sont aussi appel es constantes par opposition variable On appelle cha ne de caract res un litt ral constitu de caract res entre guillemets techniquement appel s quotes PYTHON admet aussi bien Les guillemets simples single quotes Les guillemets doubles double quotes et Les guillemets triples triple quotes ces derniers permettent par exemple d exprimer une cha ne de caract re contenant elle m me des guillemets simples apostrophes ou doubles elle m
178. def read hexcode seg dict un nom un dict vide f open paper seg hexcode bytes f read split if bytes 0 offset dict offset eval Ox bytes 1 if bytes 2 code dict code eval Ux x for x in bytes 3 return dict Et la valeur qu il retourne de type dict va servir augmenter la table segment table qui doit d j exister prenant ventuellement la place d un segment de m me nom dont une ancienne version pourrie aurait t charg e pr c demment seg 18 3 segment tableleeq read hexcode seq 11 Notez que je ne passe read hexcode que le nom du segment mais que chez moi le fichier s appelle v ritablement paper 18 3 hexcode nom reconstitu implicitement par la fonction Pensez modifier ce d tail si vous d cidez d adopter d autres conventions que les miennes L mulateur ne peut tre lanc avant de charger le code en m moire je vais donc devoir le copier octet par octet dans le vecteur data t che que je vais d l guer la fonction load image def load image seg name segment name offset segment offseti seg name code segment code seq name for x in range len code data orfset x code x Celle ci n cessite deux petites fonctions segment offset et segment code qui font l interface entre les donn es et le programme ce n est pas pour le plaisir de compliquer les choses c est pour garantir qu il n y ait qu une ma
179. der et ex cuter ce programme exp rimenter en changeant la taille pas forc ment carr e de l instance C de Canvas et sa couleur de fond bg px25 2 experimenter en changeant le diam tre de la boule sa couleur de remplissage fill et l paisseur width de son contour dont la couleur par d faut est black px25 3 experimenter en changeant les valeurs de d placement dans les HANDLERS px25 4 cr er un nouveau bouton qui replace la boule dans le coin en bas droite px25 5 ajouter une nouvelle fonctionnalit un clic dans le Canvas d place la boule en ce point 5 7 GRAPHES DE FONCTIONS Cette section montre comment exploiter les fonctionnalit s graphiques pour repr senter des fonctions la diff rence avec les applications pr c dentes c est qu il faut pouvoir accommoder des plages de valeurs tr s vari es la fonction sinus dont la valeur oscille entre 1 et 1 ou la courbe d un polyn me de degr n pour lequel il faut calculer les valeurs des coefficients avant de savoir quelle sera la forme et l amplitude du graphe Il y a donc l trois probl mes e et l ordonn e croissent vers la droite et vers le bas partir de l origine en haut gauche pour une repr sentation cart sienne il faut donc d caler les coordonn es de plus les y devront tre g r s avec une inversion de signe sinon le graphe sera invers e les coordonn es graphiques sont obligatoirement des enti
180. devait tre d finie avant la partie qui montre quelque chose autrement dit l interface Les HANDLERS bas haut droite et gauche servent de relais pour transmettre de nouvelles valeurs la fonction avance sachant que cette fonction attend des valeurs diff rentielles en abscisse ou en ordonn e chaque HANDLER incr mente ou d cr mente l un ou l autre des arguments Quant la fonction avance hormis la d claration de ses variables globales elle n a en fait que deux lignes utiles e calcul des nouvelles coordonn es de la boule partir des anciennes coordonn es et de la valeur des param tres delta X et delta Y e actualisation du dessin de la boule Et d ailleurs on aurait pu condenser ces deux lignes en une seule au prix il est vrai de leur lisibilite INTERFACES FEN TRES ET BOUTONS 83 Remarquez qu il est tout fait possible de pousser la boule hors du champ de vision du Canvas On aurait d ailleurs pu comme dans n importe quelle vraie fen tre rajouter des bandes de d filement ou SCROLL BARS pour d rouler le widget C dans les 4 directions de sorte que notre boule reste visible mais ce n tait pas le but de cette d monstration On peut bien s r cr er des SPRITES plus sophistiqu s en utilisant les m thodes appropri s par exemple create polygon ou m me en incorporant directement une image en provenance d un fichier graphique standard avec create image px25 1 co
181. diff rente voir hash table litt ral se dit d une valeur qu il faut prendre litt ralement sans valuation au pied de la lettre64 long long int type scalaire entier aussi large que le bus de donn es 64 bits matrice par atavisme math matique d note une table 2 dimensions par exemple le r sultat du produit d un vecteur par un vecteur transpos m ga souvent abr g en M pour les informaticiens c est 22 et ce en d pit de la normalisation de 1998 pour les autres c est 10 m moire dispositif capable de m moriser de l information plus ou moins long terme grossi rement on distinguera la m moire long terme relativement non volatile telle que mise en uvre par un disque magn tique ou optique ou par une PROM et la m moire court terme volatile mise en uvre par des composants lectroniques qui oublient tout d s qu on leur supprime leur source d nergie ceci comprend la 63 m me SCHEME 64 si tant est que les lettres ont des pieds 11 11 23 22 10 2007 2012 par J Feat GLOSSAIRE m moire vive mais aussi la m moire dite cache et les registres du processeur m moire flash type d EEPROM invent en 1984 utilis e dans des sticks de m moire non volatile lectriquement effa able et reprogrammable connue sous diff rents noms selon le fabricant et la technologie employee USB drive SmartMedia etc En 2007 la capacite maximum en etait limite
182. donc repartir d une d finition aussi l mentaire que possible def traduis dic phrase trado le r sultat est d abord une liste vide phrase phrase split explose la phrase for mot in phrase scanne la mot par mot trado dic mot ajoute la traduction au r sultat return join trado retourne le r sultat sous forme de texte Mais me direz vous ca ne change strictement rien l acc s dic mot va provoquer la m me exception Bon rassurez vous les objets de type dict comprennent l op rateur in et connaissent la m thode has key qui retourne vrai seulement si l objet pass en argument figure bien en tant que cl dans le dictionnaire je pourrais donc tester If mot Ji Cie 31 axa pareil que if dic has_key mot Et ainsi viter l accident Mais le traitement du mot Mississippi m a appris comment g rer les trous cette diff rence pr s que comme il ne s agit plus de compter peu importe quelle valeur je mets par d faut def traduis dic phrase trado le r sultat est d abord une liste vide for mot in phrase splitO scanne la phrase explos e mot par mot x dic get mot calcule une valeur trado x traduis return join trado et retourne du texte R sultat des courses il n y a plus d exception que des lt gt 2011 11 23 22 10 16 2007 2012 par J Feat 64 FORMES ET TRANSFORMATIONS gt gt gt traduis FA le gros chat boit du la
183. dre par programme 49 cf http docs python org 11 11 23 22 10 2007 2012 par J Feat DOCUMENTS ANNEXES 148 9 2 INDENTATION Nulle part on ne trouve de r gles explicites pour l indentation un peu comme si a allait de soi Ces r gles sont effectivement videntes pour le programmeur qui se frotte d abord l interpr te en direct avant de penser son code en tant que script et c est d ailleurs l approche que je pr conise tout au long du cours et pas seulement pour cette raison MODE INTERACTIF MODE SCRIPT Un script PYTHON peut tre valu en mode interactif ou conversationnel ligne par ligne directement sous l interpr te en tant que shell ou en mode script les deux modes doivent se soumettre aux m mes r gles de bonne formation des expressions la diff rence est que dans le premier cas l interpr te est oblig de prendre des d cisions imm diates la vol e toute faute de syntaxe emp che l valuation de l expression alors que dans le deuxi me cas la totalit du script est analys e avant valuation ce qui permet d assouplir certaines r gles en particulier celles de l indentation ll y aurait semble t il un troisi me cas celui ou un script est import en tant que module par un autre mais en fait ca nous ram ne implicitement au deuxi me cas avec cette diff rence qu apr s v rification le code source est compil et envoy dans un fichier de m me nom le suffixe
184. e a donnons nous un dictionnaire vide qu on appellerait justement index puis prenons la premi re ligne et explosons la sous la forme d une liste de mots index dictionnaire vide texte texte split n liste de lignes mots texte 0 split liste de mots Maintenant la variable mots vaut Un programme tourne blen c est un plaislr mais un Il s agit ici de tester qu il est possible d ajouter chacun de ces mots au dictionnaire avec une expression du genre for mot in mots index mot 0 on est en train de traiter la ligne O Et l index r sultant a d sormais comme valeur i buen i Dl mais Ol tourne O c est O plaisir s O Un s Gly un 0 programme 0 Et l je vois apparaitre un premier probl me c est que le m me mot un apparait 2 fois parce que le programme fait la diff rence entre minuscules et majuscules Mais voyons ce que la deuxi me ligne a dans le ventre mots texte 1 split liste de mots for mot in mots index mot 1 on est en train de traiter la ligne 1 Si maintenant je regarde la valeur de index je vois bien que les mots de la deuxieme ligne ont ete rajoutes Et la il me semble qu il y a deux problemes e d abord a fait bizarre que la ligne 1 soit num rot e O peut tre que je pourrais ajouter 1 a chaque n pour faire plus standard e ensuite
185. e c est l atome d information repr sent e en interne comme une tension lectrique interpr t e suivant l intensit comme un 1 ou un O comme un bit peut avoir 2 valeurs il en suit qu une s quence de n bits peut repr senter 2 valeurs byte vecteur ou mot de 8 bits litt ralement une bouch e C langage de programmation polyvalent cr en 1972 cache type de m moire acc s rapide de l ordre de la pico seconde servant d interm diaire entre les registres du processeur et la m moire vive corruption du fran ais cach e l anglais ignore les accents cahier des charges ensemble des sp cifications pour un projet de programme manant g n ralement du client donc pr sent de mani re informelle callback se dit du mode d invocation d un handler par un gestionnaire d v nement event manager par extension d note le handler lui m me car valeur de la fonction car en Lisp ou Scheme contents of address register cdr prononc l kaderl or l Koderl valeur de la fonction cdr en Lisp ou Scheme contents of decrement register caractere scalaire dont la repr sentation interne se compose d un ou de plusieurs octets selon le codage num rique dependant du standard utilise ASCII unicode etc chaine autre nom pour s quence en particulier sequence de caract res char se prononce Ikerl abr g pour character voir caract re classe objet virtuel muni de p
186. e la constitution d un dictionnaire pour affiner progressivement les besoins tout en gardant une vue d avion C est pour cette raison que j ai rel gu aux derniers raffinements le nettoyage des mots ou la pr sentation du r sultat Et il suffit d un coup d il au code source de ce programme pour voir que l id e centrale celle de ajoute s est d velopp e vers l aval mais qu elle n cessitait des pr paratifs en amont Ainsi on peut tr s bien programmer sans savoir comment fonctionne un processeur mais si on veut vraiment tout comprendre il faudra un jour savoir quel type de signal est pr sent sur les pattes de la puce dans telle ou telle condition Ou bien en ferons nous abstraction En pratique comme on l a montr dans les pages pr c dentes certaines transformations peuvent tre programm es directement partir des types de donn es primitifs manipul s par des op rations fournies intrins quement pas le langage C est pourquoi l apprentissage de la programmation passe g n ralement par la maitrise des structures de donn es et de contr le 7 2 STRUCTURES DE DONN ES Cela va sans dire il ne saurait tre question de traiter de l information si on ne pouvait la repr senter en machine Le mot NUM RISATION recouvre justement cet aspect de la conversion des donn es de notre monde analogique sous la forme de nombres e les caract res qui nous servent crire sont codes par des nombres entiers par exem
187. e m me si ca implique d laborer avec soin la structure de donn es la plus efficace aucun de ces prototypes ne d passe une page au total Les exercices propos s visent d montrer les points 1 3 ci dessus la r duction initiale n emp che pas les d veloppements ult rieurs eux aussi toujours r alisables moindres frais 37 cf http en wikipedia org wiki Rapid application development PROTOTYPAGE D APPLICATIONS 117 Comme on l avait annonc quelques pages plus haut les langages de scripts en g n ral et PYTHON en particulier pour ce qui nous concerne constituent l environnement id al non seulement pour le programmeur d butant mais aussi pour le programmeur qui d bute une application c est le prototypage Dans un contexte industriel la phase O d un projet c est son cahier des charges c est dire les sp cifications de l application telles que stipul es par le client e les donn es d entr e et de sortie e ce que doit faire l application avec ces donn es e comment elle doit les pr senter autrement dit l interface La phase 1 c est l tude de faisabilit PROOF OF CONCEPT Une valuation des besoins tant en ressources humaines et en comp tences qu en ressources logicielles num risation des donn es pr traitement conversions r daction du code tests de mise au point La phase 2 c est la r alisation proprement dite et le temps requis d pend de la qualit de la phase 1 auqu
188. e a 128 GB methode dans le contexte des langages a objets c est la fonction assortie au s lecteur du message sp cifique d une classe d objets en PYTHON le s lecteur est le nom de la m thode et s utilise en composant lt objet gt lt s lecteur gt microcode le tout premier niveau de programmation d un processeur CISC est fait en grande partie de micro instructions r sidentes en ROM PROM ou EPROM et charg es au d marrage MIME multipurpose internet mail extension ensemble de descripteurs caracterisant les donnees d un message lectronique MIME type caracterisation d un fichier en fonction de son contenu ou du suffixe appos a son nom en vue de transfert internet cf lt http www webmaster toolkit com mime types shtml nibble type scalaire d notant une s quence de 4 bits autrement dit la moiti d un byte Utilis sur les cartes graphiques travaillant sur 12 bits nil abr g du latin nihil c est dire rien quivalent au NULL de ANSI C null char caract re cod 0 repr sentant la chaine vide exprim en C par ou null d note l op rateur de n gation en logique booleenne NULL valeur interpr t e comme ind finie selon le contexte en ANSI C c est un pointeur qui ne pointe nulle part il est entre autres utilise comme nil pour terminer une s quence num risation se dit d un processus de conversion d analogique en num rique
189. e chang Mais ce qui m int resse ici c est de voir comment python r agit python quand je veux traiter de l information par exemple tant donn s Python 2 6 5 r265 79063 Apr 16 2019 13 09 56 GCC 4 4 3 on linux2 deux nombres en calculer le produit copyright credits or license for more information L aussi il ne se passe rien tant que je n envoie pas l instruction l interpr te ce qui me laisse toute latitude pour v rifier que ma syntaxe est correcte et que les mots sont compr hensibles Maintenant l appui sur la touche va provoquer l valuation de python Python 2 6 5 r265 79063 Apr 16 2010 13 09 56 mon expression arithm tique valuation qui retourne une valeur t cc 2 4 31 on use Type help copyright credits or license for more information laquelle valeur est automatiquement affich e par l interpr te en r ponse ma question INTERACTION AVEC LE SYST ME 9 A partir de l il faut conna tre ce langage pour savoir ce qu on peut dire ou demander et ce qu il saura interpr ter p PXS Python 2 6 5 r265 79063 Apr 16 2010 13 09 56 ou pas je peux par exemple calculer le double du mot ore MED oo He ees dare cou condition de le pr senter comme une chaine de radi e caract res c est dire en prenant soin de l ins rer entre gt gt 2 e l guillemets parce que ce n est pas un mot du langage
190. e contient que des menus Graphics gt Character Map ler d roulants et la ligne de commande qui d bute par une invite taper une gt IE gedit Text Editor commande cette invite en anglais PROMPT on peut la customiser et es moi je me suis arrang pour qu elle soit aussi discr te que possible on en _ Search for Files reparlera plus tard Take Screenshot jf jf ubuntu File Edit View Terminal Help Terminal Tomboy Notes Et puisque l invite m y invite je vais taper quelque chose le nom du programme lancer 2090 jf jf ubuntu File Edit View Terminal Help python A ce stade rien n est d finitif je pourrais enti rement gommer avec la SCOR touche lt ce que je viens de taper ou repositionner le curseur avec BEA 1 python et pour corriger une faute d orthographe la commande ne sera Python 2 6 5 r265 79063 Apr 16 2618 13 09 56 GCC 4 4 3 on linux2 prise en compte qu au moment o j appuierai sur la touche pour la 2 hela copyright credits or license for more information valider allons y Le message qui s affiche m indique quelle version de python a t trouv e d ailleurs il en profite pour me rappeler que je peux obtenir des renseignements suppl mentaires en entrant l une des quatre instructions propos es la suite de l invite qui a maintenant chang parce que le contexte a lui m m
191. e convertirait du texte en minuscule par simple application d un masque 0x20 c est dire 0b00100000 sur chacun de ses caract res gt gt gt Tor x an ONCE s Print cHr oxd x 0x20 3 Ces op rations sont extr mement utiles des lors qu on manipule des donn es implicitement binaires comme par exemple les droits d acc s a un fichier not s rwxr xr x si les r w et x apparaissent c est qu ils correspondent un 1 sinon c est que le bit sous jacent est 0 et c est justement a que manipule la commande chmod Pour revenir a notre mulateur voici donc l interpr tation des codes 0x22 0x62 et OxE2 DATA INSTRUCTION EMULATION 22 nand A A amp _ 62 amp data _ HORE os amp data data En fait dans le support original il est pr cis que amp repr sente le ET logique on s en serait dout mais il n est pas sp cifi s il s agit de logique binaire ou de logique bool enne vous de d cider et de mettre en ceuvre les op rateurs convenables Comme dans tous les cas d ambiguit du cahier des charges vous avez le choix entre deux options faire le malin ou faire l imb cile comme elles ont toutes deux des avantages aussi bien que des inconv nients je me garderai bien de vous influencer TRADUCTION DYNAMIQUE L ensemble de ces repr sentations formelles est donc la cl de l mul
192. e dans le cadre d un syst me BASH est le SHELL par d faut le script tant alors de toute facon pass BASH pour interpr tation mais le pr ciser dans le fichier permet de porter le script sur des syst mes sH est le SHELL par d faut car SH et BASH ne sont pas rigoureusement interchangeables Pour la portabilit du script d finissons le nom ajouter comme une variable notez que sa valeur comporte un blanc la fin auteur machin On peut maintenant proc der au renommage des fichiers ici on Suppose que le script est appel avec une sp cification de fichiers emballe 78 de sorte qu il sache qu il faut collecter tous les fichiers dont le nom est de la forme px 8 7 ixt ce 78 est un argument de la commande emballe et vu de l int rieur du script cet argument est repr sent par 1 en effet tout script a par d faut autant de param tres que de mots tap s sur la ligne de commande 0 tant le 1 mot c est a dire le nom du script 2 le 3 mot s il y en a un et ainsi de suite 52 ce serait l quivalent du r sultat de l op rateur PYTHON dans l expression machin s x 53 cf le support de cours de l EC 412 l ments de syst mes d exploitation GLOSSAIRE 165 La boucle for sera donc de la forme for x in px 1 txt suivi de do des instructions puis done lor x in pxl xE do echo renaming x as auteur x inutile mais rassurant mv x Sauteur x done A ce stade nou
193. e dans le cas ci dessus rien n emp che d avoir des cl s num riques en m me temps que des cl s alphab tiques En fait un dictionnaire peut accepter n importe quelles cl s la seule condition qu elles soient immuables par nature comme c est justement le cas pour les nombres ou les cha nes entre autres Les cl s 2997 3017 nous donnent donc un acc s direct aux instructions du programme et il ne manque qu une chose pour que ce programme soit v ritablement ex cutable que les codes d op ration effectuent l op ration en question Pour ce faire on va d finir une fonction pour chaque code d op ration pour chaque fonction il faut videmment autant de param tres que d op randes dans l instruction L criture d une valeur en m moire cod e 1 requiert une valeur crire et une adresse laquelle crire et a on sait faire def affecte valeur adresse m adresse valeur Ainsi l valuation de l expression affecte 1 1000 provoquera la cr ation d une nouvelle entr e du dictionnaire m pour la cl 1000 qui sera donc associ e la valeur 1 idem pour la 2 instruction qui cr era la cl 1020 associ e la valeur 2 Si tout fonctionne comme attendu apr s ex cution des deux premi res instructions notre m aura t dynamiquement augment de deux nouvelles cl s 1000 1 1020 2 La division cod e 2 demande 3 param tres la division du premier par le second g n rant une nouvelle vale
194. e de la classe Canvas la seule savoir dessiner le widget boule objet cr dans le Canvas C les 4 boutons de contr le chacun li son HANDLER sa fonction sp cifique le bouton stop qui arr te tout Aucun de ces boutons n aura jamais besoin d tre r f renc dans le programme je n ai donc pas besoin de d finir de variables il suffit que le bouton existe et qu il soit li une commande 3 Les HANDLERS bas haut droite et gauche sont les fonctions appel es par mainloop le m canisme qui g re les liens entre les boutons et la commande qu ils d clenchent mainloop est la boucle du gestionnaire d v nements OU EVENT MANAGER 2 La fonction avance est une fonction ancillaire c est dire qu elle est utilis e par toutes les autres pour 2011 11 23 22 10 16 O 2007 2042 par J Feat 82 FORMES ET TRANSFORMATIONS g rer les d tails de la r actualisation de l affichage 1 Les variables globales sont les valeurs accessibles en n importe quel point du programme et sont donc d finies en premier e le module Tkinter doit tre charg en tout premier lieu car il d finit des variables globales nomm es X Y et D qui doivent absolument tre red finies par notre programme e ici D est le diam tre de la boule et sert aussi bien lors de la cr ation du widget boule que lors de sa manipulation par la fonction avance e de m me X et Y repr sentent les coordonn es de la boule et doivent persi
195. e de n 2 est False c est que n est impair px23 2 modifier encore le code pour dessiner en 4 couleurs selon la conjonction des parit s de l abscisse et de l ordonn e du clic 5 5 2 CREATE RECTANGLE px24 1 tant donn e la m thode create rectangle disponible pour les objets de type Canvas modifier le programme pr c dent pour qu il dessine un carr de 21 pixels de c t centr sur le point de clic Comme pour l ellipse le rectangle a besoin qu on lui d termine sa diagonale si c est une instance de Canvas alors c create_rectangle 9 9 30 30 fill blue outline yellow dessine un carr bleu bords jaunes et mettre une chaine vide au lieu de yellow rendra le contour invisible px24 2 adapter la couleur du rectangle en fonction de la parit du rang du rectangle le 1 en rouge le 2 en vert le 3 en rouge le 4 en vert et ainsi de suite px24 3 modifier le programme pr c dent pour qu il prenne en compte deux clics successifs pour d terminer les coordonn es de la diagonale du rectangle INTERFACES FEN TRES ET BOUTONS 81 L astuce serait d utiliser une variable logique globale d finie comme False au d part appel e par exemple second Chaque fois que notre HANDLER manager est active il doit tester la valeur de second si second est False alors manager se contente de o m moriser les coordonn es du point de clic o les afficher pour bien montrer qu il a quand m me co
196. e est repr sent par un objet de type byte string il est manipulable par octets mais pour certains caract res a n a pas de sens 3 Seuls les objets de type unicode string offrent une correspondance terme terme entre les glyphes et leur repr sentation interne Donc notre stade l important c est de bien se rendre compte que les programmes doivent manipuler des trucs que l utilisateur ne voit pas et donc de bien faire la diff rence entre la repr sentation externe des 2011 11 23 22 10 16 2007 2012 par J Feat 54 FORMES ET TRANSFORMATIONS donn es et leurs multiples repr sentations internes interchangeables par simple transformation Et pour faciliter cette transformation les chaines de caract res PYTHON sont munies de deux m thodes de conversion decode et encode auxquelles on sp cifie le codage de d part ou d arriv e comme un CODEC un proc d de transcodage d un format l autre En utilisant le m me la transformation est donc r versible ainsi gt gt gt nouveau encode utf 8 mot compare deux objets de type byte string True EN PRATIQUE Pour revenir la figure pr c dente les boites tiquet es conversion sont remplacer respectivement par decode et encode ce qui signifie que pour r aliser correctement le px05 2 il y aura lieu de transformer le mot avant de le passer la moulinette il y a donc deux approches possibles 1 modifier explose en
197. e fonctions une fonction est un nom symbolique qui repr sente un fragment de code ind pendant suppos accomplir une fonction particuli re par exemple la fonction len appliqu e une s quence de caract res calcule le nombre d l ments de cette s quence len azertyuiop retourne la valeur 10 On appelle argument la valeur qu on passe une fonction autrement dit ce quoi on veut l appliquer ici la valeur azertyuiop est donn e litt ralement mais on aurait pu mettre la place une variable repr sentant cette m me valeur L argument de la fonction len ne peut pas tre un nombre simplement parce que a n a pas de sens la repr sentation interne d un nombre n est pas une s quence de symboles Mais la fonction str convertit un nombre en string donc en s quence de caract res ainsi essayez d valuer len sir 12345 et vous obtiendrez sans doute 5 Nous verrons encore plein d autres fonctions mais l objectif n est pas de faire un catalogue des ressources intrins ques de PYTHON il existe d j des manuels de r f rence tr s bien faits TYPES DE VALEURS D une mani re g n rale les langages de programmation d tectent le type des valeurs qu ils manipulent essayez ceci type 123 FA u 123 1 23 ompile F 1 type type type type type type Comme vous le constatez pour chacun de ces exemples la foncti
198. e grandeur nature ca fait quand m me plusieurs dizaines de milliers de mots Mais regardez bien ce que nous retournerait l expression FA keys lait 18 Chat pertzt de bon gros Qu Ceci est la liste des cl s c est dire des mots d finis jusqu pr sent dans le dictionnaire FA or si j value FA le j obtiens donc rien ne m emp cherait de construire l inverse autrement dit AF FA le le Je n ai donc qu scanner la liste des cl s et pour chaque cl x retrouver sa traduction par FA x pour construire progressivement AF le dictionnaire anglais francais bien entendu le dictionnaire AF doit au d part tre vide AF pourrait se dire AF dict for x in FA keys AF FA x x remplis le Donc bien videmment c est le dictionnaire entier que cette expression scanne en une ligne de code mais l inversion se fait en une seule passe px1 2 construire partir de FA le dictionnaire AF comme expliqu ci dessus puis l essayer avec DICTIONNAIRES ACC S PAR CL 65 diverses phrases comme par exemple traduis AF the big dog eats the good warm soup ou n importe quoi d autre et penser afficher le dictionnaire AF pour v rifier que les nouveaux mots ont effectivement t ajout s px17 3 sachant que FA keys est la liste des entr es et que FA values est celle des valeurs voyez vous comment les combiner avec zip
199. e l expression de la valeur a retourner s il y a lieu Essayons de d finir interactivement la fonction triple qui accepte un argument quelconque et retourne fois la valeur qu on lui passe n oubliez pas le mot cl return gt gt gt def triple x return x x x pareil que 3 x gt gt gt let tra triple double la tralalalalalala Comme le montre cet exemple les fonctions qu on se d finit sont utilisables dans les m mes conditions que les fonctions primitives deja disponibles en PYTHON e dans des expressions complexes comme eli str 112 ou encore f triple e peut en d finir un synonyme duo double e la valeur d une fonction peut tre l argument d une fonction comme pour len str 12345 px03 1 d finissez la fonction unaire cube qui permet d lever au cube un nombre pass en argument de telle sorte que cube 3 retourne 27 cube 4 retourne 64 et cube 100 retourne 1000000 utilisez la pour verifier le cube de 2 et le cube de 5 px03 2 d finir la fonction grogne d arit 0 qui retourne la chaine grrrrr px03 3 d finir la fonction unaire respire qui prend une cha ne en argument et retourne cette m me chaine apres avoir ajoute un espace avant et un espace apres px03 4 en utilisant la fonction double d finir la fonction unaire quadruple qui multiplie son argument par quatre la tester avec des nombres et des chaines MAN
200. e leur valuation essayez maintenant 2011 11 23 22 10 16 2007 2012 par J Feat 18 FORMES ET TRANSFORMATIONS b c ou c vaut d j 5 c atb qui attribue la nouvelle valeur a la variable c il faut comprendre ici que le symbole a repr sente un op rateur et qu il y a l aussi des r gles syntaxiques l expression situ e Put droite est valu e en premier ce qui permet d crire des choses comme ON gt gt gt 5 c DB bec gt gt gt QU de sorte que mon c vaut maintenant 14 c est dire la somme de a et b plus la valeur qu il 7 v gt gt gt C 0 b avait avant la modification d 14 Remarque 2 la d finition d une variable par l valuation d une expression telle que c a b ne retourne pas de valeur affichable dans le terminal mais comme illustr ci dessus il est toujours possible d valuer directement un objet pour lui faire cracher sa valeur courante DOCUMENTATION D UN PROGRAMME Comme on l a vu ci dessus m me un programme simplet peut tre difficile suivre pour un humain qui ne proc de pas de facon aussi syst matique et rigoureuse que la machine Pour cette raison tout langage de programmation permet de documenter du code en y ajoutant des commentaires qui ne seront jamais valu s Dans la plupart des langages de script bash et tcsh compris un commentaire commence par le symbole en dehors d une chaine videmment et se termine
201. e ne contient pas de sous liste quelle expression permettrait d aplatir erreurs i e d en faire une liste plate de 8 l ments Les listes plates de profondeur 1 sont utilis es en calcul num rique pour repr senter les vecteurs la dimension d un vecteur V est alors len V px09 1 soit V quelles instructions permettraient de remplir ce vecteur avec les seize premiers entiers positifs de O 15 px09 2 soit V quelles instructions permettraient de remplir ce vecteur avec les carr s des seize premiers entiers positifs de 1 16 px09 3 soit V quelles instructions permettraient de remplir ce vecteur avec les seize premi res puissances de 2 de 15 d croissantes de la gauche vers la droite px09 4 comme pour toute s quence on peut extraire d une liste les l ments d un intervalle donn quelle expression extrairait de V les 8 puissances les plus faibles px09 5 soit G un vecteur de gros mots quel est le programme le plus simple pour remplacer chaque insulte ou juron de ce vecteur par le double de cet l ment Pour repr senter une matrice de valeurs num riques on utilisera une liste de profondeur 2 les dimensions d une matrice M sont respectivement len M et len M 0 px10 1 soit Z codez partir de Z la construction de M la matrice 1 2 3 4 5 6 g n ralisez pour n importe quelle matrice de n lignes par m colonnes px10 2 codez une fonction
202. e personne a placer env dans usr bin la preuve en est que dans l environnement MANDRIVA par exemple c est dans bin que env est install mais pour le savoir il faut utiliser la commande which which env qui affichera bin du coup la premi re ligne du script ci dessus devrait donc tre bin env tosh Et puisqu on parle de syntaxe voici comment la m me chose se dirait avec le SHELL bash bin env bash poc Wall Glee o Gl 0 amp amp exit echo executable 51 ok Remarquez qu il faut imp rativement laisser un espace apres le 2 crochet ouvrant sous peine d erreur alors qu il n y en a pas besoin apr s la parenth se ouvrante en icsh Il y a quelque part un fichier qui rec le la liste des SHELLS install s dans votre syst me il s appelle SHELLS et se trouve dans le dossier de configuration nomm etc cat etc shells serait donc la commande pour afficher son contenu l cran NB ce probl me a fait l objet de tellement de discussions que nous avons r solu de d velopper une section d di e la 9 4 ci apr s maintenant il faudrait tout r crire pour consolider la r flexion Cependant un sHELL est un langage de programmation et en tant que tel il exigerait un cours de 200 pages lui tout seul on peut toujours t l charger ADVANCED BASH SCRIPTING GUIDE http www tldp org LDP abs abs guide pdf en gardant a l esprit que c est quand m me un volume de 758 pag
203. e pr fix e infix e ou postfix e op ration valuation d une expression pour produire une valeur ou un effet ou m me les deux la fois param tre symbole de variable repr sentant dans la d finition d une proc dure ou d une fonction la valeur pass e en argument pile s quence dont seul le dernier l ment empil autrement dit le seul l ment visible est accessible c est dire qu on ne peut acc der l l ment suivant qu en ayant d pil le pr c dent quivalent francais de l anglais stack c est la converse d une queue plug in programme constituant une extension d un framework pointeur valeur enti re positive typ e utilis e pour l adressage en m moire le type c est dire la mesure de l espace occup par la donn e est pris en compte pour les calculs arithm tiques usuels addition soustraction de sorte que le pointeur est utilisable comme un index pour ce type de donn e pr dicat par atavisme logico math matique d note une expression qui retourne une valeur logique vrai ou faux dans beaucoup de langages certaines expressions comme la valeur O ou la s quence vide peuvent tre consid r es d un point 70 neutralisable en parenth sant les expressions op rateurs multiples 71 LIFO last in first out 11 11 23 22 10 2007 2012 par J Feat GLOSSAIRE de vue logique et sont alors quivalentes faux ce qui entraine que toute autre expre
204. el il faut bien s r ajouter des d lais pour la finalisation et les modifications de derni re minute Et comme dans l industrie le rendement d une quipe de d veloppement influe directement sur les couts la tendance est de favoriser la phase 1 renomm e juste titre prototypage Pour l apprenti programmeur les probl mes se pr sentent de la m me fa on cette diff rence pr s que son inexp rience ajoute un certain flou la phase 1 il n est donc pas question de commencer directement par la phase 2 comme le font h las beaucoup de d butants Et si cette profession est appel e analyste programmeur ce n est pas par hasard l analyse du probl me pr c de obligatoirement sa r solution 8 1 AFFICHAGE PAR SEGMENTS Je dois r aliser un afficheur alpha num rique fa on LCD qui puisse afficher du texte dans une fen tre chaque caract re tant dessin par des segments Comment vais je m y prendre ANALYSE Dans sa version primitive la plus simple un afficheur LcD n a que 7 segments possibles comme sur la figure ci contre Pour les rep rer je num rote les segments horizontaux de 0 2 et les seg ments verticaux de 3 6 ceci est donc purement conventionnel d ailleurs je n ai pas vraiment de raison de commencer par les segments horizontaux mais bon partir de la je pourrai d crire n importe quel caract re alpha numerique en termes des segments qui le constituent Le A par exemple se
205. eler tr s bri vement les caract ristiques lexicales et syntaxiques voir l original pour plus de pr cision On se propose de r aliser un interpr te de ce langage autrement dit un mn monique opcode interpr tation programme qui lit le code d un autre programme puis simule ce que ce add 20 ACA V processeur fictif ferait pour executer ce code add 60 AcA add A lt A La m moire dans laquelle sont charg s programme et donn es est de 256 sub 21 A c A V bytes on la repr sentera sous la forme d un vecteur de 256 caract res sub 61 AcA donc index de 0 255 notez que les l ments d indice 0 31 repr sentent sub El A lt A de la m moire morte Rom dans laquelle r side demeure un boot strap nand 22 A c A amp V loader inamovible on ne peut donc crire que dans les elements indices de nand e 62 A c A amp Q 32 255 qui correspondent la RAM ou m moire vive nand E2 A lt load 00 AV Le code pourra tre repr sent de fa on symbolique c est dire avec des 40 Ac mn moniques comme dans l exemple du boot strap loader le programme load CO A lt devrait a terme pouvoir fonctionner comme un desassembleur aussi bien 48 lt qu un assembleur C8 lt in 49 lt Entr e Les instructions in et out seront simul es avec raw input et print in 9 Come O e out 41 Sortie Il n est pas n cessaire de
206. elle ne saurait tre appliqu e e une directive peut tre elle m me un programme C est justement la complexit d une t che qui la rend difficile programmer C est pourquoi l informatique ne permet de faire que des choses simples Mais du fait qu une directive peut tre un programme il devient possible de faire un programme simple constitu de directives complexes Autrement dit un programme constitu de programmes Quelques remarques e le nombre d l ments dans la s quence n est pas contraint mais on peut difficilement parler de programme s il y a instruction et la s quence peut ne comporter qu une seule directive c est quand m me un programme e on pourrait dire instruction au lieu de directive sans changer fondamentalement le sens de la d finition ci dessus les programmeurs parlent aussi de commandes d op rations ou de fonctions bien que ces termes puissent en contexte prendre un sens technique extr mement pr cis nous pouvons pour le moment les consid rer comme quivalents LANGAGES DE PROGRAMMATION Ainsi programmer ce serait d crire une s quence d op rations effectuer sur des objets et ordonner la machine d ex cuter cette s quence Le probl me c est qu une machine ne sait faire la base que DONN ES L MENTAIRES 15 quelques op rations fondamentales comme m moriser de l information et la manipuler de mani re rudimentaire en gros quelques op rations arithm tiques e
207. eme dimension table driven programming technique qui exploite une table associative pour savoir quoi valuer comme code selon les donn es tableau traduction malheureuse de l anglais array qui d note une s rie arrangement d objets de m me nature ce terme est utilis exclusivement par les universitaires francophones dans le sens large de table t ra souvent abr g en T pour les informaticiens 2 soit 1024 gigas et ce en d pit de la normalisation de 1998 les autres ne s en servent pas tuple tuplet s quence de donn es h t rog nes non mutable immuable de taille fixe s apparente la liste qui elle est mutable dans une d finition une fonction la liste de param tres est un tuple type caract risation ou nature d un objet en termes de sa repr sentation interne et externe ainsi que des op rations avec lesquelles il est compatible il est des langages qui ne typent que les valeurs alors que d autres typent aussi les variables ce qui peut tre vu comme un avantage conversion automatique ou comme un inconv nient inflexibilit Certains langages opposent type classe pour exprimer que le premier est primitif donc non re programmable unicode standard moderne de codage sur 8 16 24 ou 32 bits pour les id ogrammes les caract res alpha num riques et la ponctuation URL uniform resource locator adresse pr c d e d un protocole d acc s r seau comme
208. ement l usage dans les repr sentations orthonorm es l origine 0 0 se trouve en haut gauche et que l ordonn e y grandit vers le bas par contre l abscisse x grandit vers la droite comme d habitude notez bien que jamais l abscisse ni l ordonn e ne peuvent tre n gatives px22 1 coder ce programme ligne par ligne en mode interactif experimenter en changeant les dimensions de la zone et sa couleur et en liant lt Button 2 gt ou lt Button 3 gt plut t que lt Button 1 gt px22 2 ajouter un bouton pour stopper l application px22 3 d finir un second LIAGE pour zone avec lt Button 3 gt et un HANDLER l g rement diff rent qui afficherait les coordonn es en hexad cimal x et non s pour rigoler 5 5 CANVAS Les objets de type Canvas sont pourvus de m thodes pour dessiner il suffirait de creer une fen tre Ik d y inclure un Canvas et de lui demander create_oval pour tracer un cercle de couleur tk 4 Le code ci dessous est une extension du programme pr c dent puisqu on peut d tecter le point de clic on peut cet endroit pr cis dessiner quelque chose par exemple un disque bleu dont le centre serait au point de clic Ainsi le dernier disque dessin ici a pour centre comme indiqu le point de coordonn es 3 3 fen tre ce n est tout simplement pas visible Hemarquez d ailleurs que ce n est pas une erreur de dessiner en dehors de la 5 5 1 CREATE OVAL I
209. enance et enfin son extension en termes de fonctionnalit s Il n y aura donc pas ici de nouveaux concepts il s agit juste d illustrer quelques principes fondamentaux qui ne font l objet d aucune th orie ni d aucun manuel parce que ce sont en essence des principes trop abstraits pour que ca ait un sens de les formuler sans montrer en pratique comment les mettre en ceuvre Dans la r solution d un probl me l angle d attaque est probablement le point le plus d licat mais pour le choisir il n est pas de recette infaillible la question par quel bout le prendre la r ponse par le milieu peut paraitre une boutade mais nous allons voir qu il n en est rien sommaire fondements interaction avec le syst me 7 D donn es l mentaires sisi Hem nnne 13 2 manipulation de s quences esHHH HH 25 9 listes acc s index css 41 dictionnaires acc s par cl 57 interfaces fen tres et boutons e RR 73 architecture de programmes eH 87 a ne Ge a ue 90 93 53 Hbi 94 D POS SOIR mU 95 65 leXiONS TIT 100 infrastructures logicielles 103 brotolypage d applications cu 115 TO DT 143 Tale gt TR
210. enter La v ritable difficult vient de La capacit exprimer l invention et qui dit expression dit Langage voil donc pourquot on invente de nouveaux langages et des programmes pour Les interpr ter La section pr c dente tait en fait une introduction aux techniques de base de L interpr tation de programmes ce th me est suffisamment important pour fatre L objet d un chapitre entier en LAO architecture mais aussi Loi ew LLP 8 4 et avec l approche Lmp rative en 213 8 en 3 ann e c est un cours entler qui Lul sera consacr d ici L LL veste un peu de temps pour dig rer cette section LLP 4 4 pour le moment tout ce qu il faut retenir c est Le n cessaire compromis entre La complexit des structures de donn es La simplicit du programme proprement dit autrement dit donn es et programmes sont des vases communicants simplifier l un revient complexifier l autre et Vice versa l ultime simplification du programme aboutit des langages o il n y a plus que des donn es c est pour cette raison qu on dit qu ils sont d claratifs c est Le cas de PROLOG o Les donn es constituent Le programme C est aussi Le cas de Lisp qui permet de manipuler Les programmes comme si c tait des donn es d autres langages ont t invent s pour programmer de fa on radicalement diff rente par exemple ACTOR qui mod lise un micro univers o La programmation consiste Laisser interagi
211. eoline j 3 En PYTHON toute instruction simple ou complexe commence au niveau d indentation par d faut niveau O c est dire en colonne 1 ce serait une faute de commencer plus loin dans la ligne d ailleurs en mode interactif personne n aurait l id e de d caler une instruction de facon gratuite et il doit en tre de m me dans un script Une instruction complexe introduit implicitement un bloc de code plusieurs instructions valuer en s quence s quence assujettie cette instruction complexe 11 11 23 22 10 2007 2012 par J Feat DOCUMENTS ANNEXES 149 e dans ce cas le bloc doit tre indent c est dire que les lignes de la s quence qui constitue le bloc doivent tre toutes indent es d un cran vers la droite et toutes exactement de la m me mani re le cran en question est autod fini par le tout premier cran du bloc il peut tre constitu de tabulations ou d espaces mais la mixture des deux est deconseillee apr s tout s il suffit de l espace pour marquer un d calage pourquoi faire plus compliqu e toute contravention est une faute de syntaxe e lorsqu une instruction complexe n introduit qu une seule autre instruction il est possible de la mettre imm diatement la suite du sans passer la ligne donc sans indenter quoi que ce soit en principe il est possible de ramener un bloc une seule ligne en s parant par les instructions qui le constituent
212. er le syst me de toute vidence ce dossier a t cr en 2009 au moment de l installation du syst me et a t protege contre les manipulations intempestives d utilisateurs susceptibles de nuire au bon fonctionnement de l ensemble a propos du mode d acc s e le tout premier caract re est ici un d un I ou un le d d note un directory donc potentiellement un argument pour la commande cd de fa on redondante du fait de l option F toutes les lignes commen ant par un d se terminent aussi par un une mani re tres visuelle de rep rer rapidement les dossiers dans une telle liste le I caract rise un lien une r f rence a un fichier situ quelque part ailleurs quant au il denote un fichier normal ici un texte probablement que je n ai d ailleurs jamais lu e suivent imm diatement trois s quences de rwx sauf que certains w sont remplac s par un ce sont les permissions d acc s ou privileges de lecture READ criture WRITE et execution qui pour un dossier s interpr te comme le droit d aller voir dedans ces trois sequences rendent compte respectivement des droits d acc s du propri taire du fichier des autres membres de son groupe et enfin des autres utilisateurs non membres comme moi remarquons que moi je n ai pas le droit de modifier ni d ailleurs d ex cuter si a avait un sens les trois fichiers texte lien non compris ce qui signifie que ils ne sont pa
213. er m me s il n est pas vide Et pour les plus distraits man man vous rappelle bien s r comment utiliser man On peut aussi consulter la documentation en ligne sur le wEB lt http linux die net man gt 9 3 4 LES COMMANDES UTILES env set printenv dans tous les syst mes unix chaque processus a son propre jeu de variables d environnement lorsqu un processus est cr il h rite par d faut de l environnement du processus pere parmi lesquelles des informations comme le nom de l utilisateur ou le type de machine Un processus peut se servir de ces valeurs pour ajuster son comportement c est le cas notamment du compilateur gcc La commande set est la plus g n rale elle donne la liste de toutes les variables et de leur valeur alors que env n affiche que celles qui sont export es voir man env man printenv et man bash Exemples de variables e PATH liste des chemins d acc s aux commandes utilisables partir du SHELL d taill e plus loin e PS1 invite pour chaque ligne de commande par exemple on red finira PS1 W pour que le directory courant soit affich chaque nouvelle ligne de commande voir man bash Quelques commandes e echo pour afficher une valeur de l environnement par exemple echo PATH e alias pour d finir des synonymes par exemple alias l ls alF voir man bash e chmod red finit le mode d acc s un fichier ou une liste de par exemple chmod u x machin modifie l
214. ers une fonction variant continument entre 1 et 1 devra tre multipli e par 100 ou 200 pour qu on commence y voir quelque chose e l aspect du graphe d pend de l chelle de la repr sentation un v ritable grapheur permet de zoomer en avant ou en arri re et de contr ler l chelle de chaque axe ind pendamment pour que le rendu soit plus vident 5 7 1 DESSINER UN POINT Dans la panoplie de TKINTER il y a des fonctions pour cr er une ligne un rectangle un ovale mais pas pour cr er un point ne nous laissons pas d monter puisqu un point c est le plus petit rectangle ou le plus petit ovale ou m me la plus petite ligne ceci devrait le faire def pixel w x y c widget abs ord color W Create tfectangle X Ya X2 yg Till c DuUEIIine 0 Le premier param tre w repr sente le WIDGET dans lequel on veut dessiner La couleur c s applique ici aussi bien au contour qu au remplissage ce dernier tant probablement inutile 5 7 2 DESSINER UNE COURBE Supposons qu on veuille repr senter la fonction y sinus x cette fonction est disponible sous le nom de sin dans le module math on va donc charger ces deux modules Tkinter et math puis camper le d cor en definissant un objet de type Canvas qui nous permettra de dessiner le graphe de la fonction 16 un objet de type Photolmage cr par p Photolmage file xxx o xxx serait le chemin d acc s un fichier gif ou jpeg 17 cf ici 9 3 6 grap
215. es CHEMINS D ACC S La variable PATH dont vous pourriez voir la valeur en demandant echo SPATH est une liste d adresses de chemins absolus vers les r pertoires qui contiennent les programmes qu on veut pouvoir invoquer directement depuis le sHELL par exemple chez moi sa valeur est yusr local hins hinsrg usr bhonsy sbinszy uEkr sbroins usry loCsaBl hlNH Ici le symbole sert s parer les l ments de la liste ce qui signifie que pour trouver une commande le SHELL en fait le programme env cherchera successivement dans les six dossiers fusr local bin bin Jusr pin sbin Jusr sbin lust local bin jusqu ce qu il trouve le programme invoqu et s il ne le trouve pas il affichera l inf me message command not found L ordre des l ments de cette liste est intentionnel ne le modifiez que si vous tes s r de ce que vous faites Si vous tenez rajouter un nouveau chemin par exemple vers le directory courant rajoutez le la fin de la liste PATH SPATH F e yusr losslinin bin yuar binifsbin usr s58bint nasY lopcal bDins gJ Remarquez la forme du chemin que j ai rajout cette forme le point qui veut dire ici m me m aurait de toute facon permis d invoquer une commande strictement locale par exemple un script marqu ex cutable que je suis en train de tester 11 11 23 22 10 2007 2012 par J Feat DOCUMENTS ANNEXES 162 teste moi Encore que comme on l a vu p
216. es pas 27 par exemple un hypercube 4 dimensions 7 INFRASTRUCTURES LOGICIELLES Ce chapitre adopte un point de vue m thodologique et prend l altitude n cessaire pour faire le point sur la fa on dont nous avons jusqu present pratique l activit de programmation On d couvre alors que nous avons depuis le debut pense implicitement en termes d objets et nous verrons alors jusqu o on peut pousser cette approche conceptuelle Il y a d autres fa ons d aborder la programmation l approche fonctionnelle a deja ete tudi e a travers LISP l approche objet sera tudi e plus syst matiquement dans le cours de SQUEAK l approche procedurale dite imperative fera aussi l objet d un cours distinct l approche logique est declarative et pense en termes de relations elle sera tudi e dans un cours sp cifique avec un langage hautement sp cialis PROLOG Alors que la diff rence entre l approche purement DECLARATIVE et l approche PROCEDURALE est tr s nette puisque les deux sont mutuellement exclusives cette derni re est par contre tout fait compatible avec une attitude fonctionnelle ou une attitude objet la programmation en PYTHON se r vele ainsi une approche hybride avec laquelle comme nous le verrons plus tard il serait m me possible au prix d une petite acrobatie de programmer de facon d clarative L objectif de ces quelques pages est de caract riser la d marche du programmeur en ce qu elle d
217. es pour dessiner Et je pourrai entrer du texte dans des instances de la classe Entry ou en afficher dans des instances de la classe label Tout ca contr l au moyen d instances de la classe Button li es aux fonctions de l application elle m me voir encadr page suivante Tous ces objets disposent bien s r de m thodes g n riques ou sp cifiques et sont munis de propri t s un univers si riche qu il n est pas question ici de l inventorier pour ce que nous allons en faire il nous suffira d entr ouvrir quelques portes je veux dire fen tres Et c est ce que nous avons vu en d tail dans le chapitre 5 et que nous allons revisiter en traversant le chapitre 8 qui pr tend montrer comment programmer n importe quelle interface pour n importe quelle application Bien entendu ceci n est jamais qu une introduction la programmation et non une formation pour designer graphique Mais vous pourrez toujours approfondir la question en lisant des bouquins sp cialis s dans la mesure oU vous maitrisez le jargon incontournable de ce genre de litt rature c est pour cette raison que je donne autant que possible le terme technique et ventuellement l original anglo saxon dont il a t traduit et parfois m me trahi 31 demandez donc man Tk SetOptions pour en mesurer la complexit INFRASTRUCTURES LOGICIELLES 113 Avec l interface Tkinter un autre concept cle est l uvre derri re le syst me de classes et
218. espace nul mais demande un certain temps de calcul SL on pouvait repr senter tout l univers en machine Le temps de calcul de n importe quelle information serait th oriquement z ro Supposons qu on me donne un nombre xoviii j ai fait expres de le donner en minuscule pour mettre en evidence la n cessit d harmoniser la casse des donn es d entr e avec celles de la table de conversion gr ce la m thode upper ceci fait un moulin style fonctionnel va me le convertir en une liste de nombres en base 10 bien s r R conv x for x in R upper Notez que si en ce point la liste n avait qu un l ment c est qu il n y avait qu un seul chiffre dans le nombre convertir la conversion du nombre est termin e Par contre si la liste a plus d un l ment il me faut g rer la conversion d une s quence ordonn e ou l ordre des valeur peut s interpr ter de deux fa ons e Si R lt Riu retranche R du r sultat attention ce test n a pas de sens quand R est le dernier l ment de la liste puisqu il n y a alors pas de R e sinon ajoute R au r sultat L expression du pr dicat R lt Rin emp che de coder ce traitement avec un simple for x in R car alors il ne serait pas possibe d acc der au x suivant Le moulin qui calcule la valeur du r sultat N doit acc der aux valeurs par leur index donc ressemblera plut t quelque chose comme N 0 for k in range len R 1 sauf R
219. essibles qu en lecture seule et qu il n est pas possible de red finir ces symboles partir du script importateur du fait que le module est compile les liaisons sont fig es dans ce contexte Une fonction du module appel e par une autre fonction du m me module ne peut donc tre remplac e par une fonction du script importateur de m me les variables globales auront forc ment la derni re valeur attribu e dans le module En fait les fonctions du module peuvent toujours changer les valeurs des globales du module donc si c est n cessaire l importateur peut changer ces valeurs la seule condition de passer par une fonction d finie cet effet dans le module et de lui passer les nouvelles valeurs en arguments MISE AU POINT DU MODULE Pour faciliter la mise au point du module et du m me coup documenter son utilisation il est possible d y inclure un bout de code conditionnel qui ne sera valu e que si le module est utilis directement En effet PYTHON attribue le nom main au programme principal et ce nom est la valeur de la variable __name__ le pr dicat name main valu dans un script ne sera donc vrai que si c est le script maitre pas s il est ex cut en tant que module En pratique ca reviendrait prendre les 3 lignes rajout es pour faire du script un programme autonome mais les soumettre une valuation conditionnelle 17 _ name import sys if len sys argv gt
220. est de lever le voile sur l environnement fondamental et d expliquer en partie les concepts qui contribuent donner l environnement sa coh rence S il est vrai que la plupart des manipulations d objets informatiques peuvent se faire travers des fen tres il faut tout de m me savoir que derri re ces fen tres tourne un monde logiciel g r par des programmes qui ont demand des ann es d laboration et de r glages Nous n irons pas jusqu en faire l historique il suffit de savoir qu autrefois ex cuter un programme se faisait en chargeant d abord ce programme manuellement dans la m moire de la machine puis en r glant un registre du processeur sur l adresse en m moire o commen ait le programme avant d appuyer sur le bouton RUN qui lan ait effectivement l ex cution et encore je simplifie Cette interface rudimentaire a tr s vite t remplac e par un programme capable de charger d autres programmes et dont l ex cution tait contr l e au moyen d un T L TYPE sorte de machine crire envoyant des commandes au syst me d exploitation Et c est rest l interface de base un programme qui attend qu on lui dise ce qu on veut faire et qui le fait si on lui en donne l ordre d une mani re compr hensible m me si l antique TELETYPE a finalement t remplac par le concept plus moderne de TERMINAL video aussi appel CONSOLE ou Konsole pour certains syst mes qui fait l cho sur un cran des comm
221. et suppression de cl s ainsi que la modification de valeurs sont des operations cruciales elles font des dictionnaires des structures de donn es dynamiques autrement dit adaptables a la volee par les programmes qui les manipulent Or un dictionnaire a ceci de particulier qu il repr sente d une certaine mani re un agregat de variables et leur definition c est un peu comme si cette structure de donn es permettait de d finir dynamiquement de nouvelles variables au fur et a mesure des besoins On verra bient t l application pratique de ce principe notons que puisque toute variable participe au contexte d ex cution d un programme ce qu on appelle pompeusement a gorithme n est jamais qu une procedure de transformation des donn es il n y a pas d algorithme sans donn es et la simplicit de DICTIONNAIRES ACC S PAR CL 59 l algorithme donc son efficacit d pend troitement de la fa on dont les donn es sont arrang es ou structur es Un exemple tout simple qui n a rien voir avec Les dictionnaires est Le choix du codage des chiffres dans Le code asci un rapide coup d il au 1 diagramme de La section unicode du chapitre 3 vows montrera que st ow masque Les 4 bits de poids fort gauche dans Le code ascu d un chiffre La valeur obtenue est Justement La quantit arithm tique que repr sente ce chiffre ce qui on s en doute contribue grandement simplifier l algorithme de conversion d un chiffre e
222. ez d j nager en pratique m me si vous faites tr s attention vous avez sans doute commis quelques tourderies fait des fautes d orthographe oubli l espace ou la parenth se C est normal et il faut m me qu il en soit ainsi nul n apprend marcher s il n est jamais tomb et chaque pas est une chute contr l e de la m me fa on chaque instruction est un saut dans le vide et il faut l avoir ex cut au moins une fois pour en comprendre le r sultat que ce soit un effet ou une valeur et l exploiter dans un programme diff rent Petit lexique des concepts survol s AFFICHAGE effet d une instruction ou d une commande ARGUMENT l op rande d une fonction BASH le shell par d faut dans l environnement ubuntu et aussi MAC OS x COMMANDE mani re de dire instruction quand on op re sous un SHELL DITEUR programme sp cialis dans la modification d un texte de programme EFFET un changement d tat pour le programme ENVIRONNEMENT contexte op ratoire VALUATION interpr tation du calcul exprim dans une expression EXPRESSION un assemblage op rateur op randes qui produirait une valeur FICHIER donn es enregistr es sur disque FONCTION nom symbolique qu on utilise pour d clencher une proc dure GEDIT diteur de texte dans le monde LINUX IMP RATIF un mode de communication qui attend un effet mais pas forc ment de r ponse IMPORT instruction pour charger un module
223. fa on diff rente la transformer en extraire certains aspects ou en extrapoler de nouvelles informations PROGRAMMER C EST QUOI Programmer c est exprimer une s quence de directives sous une forme compr hensible donc executable par une machine La recette de cuisine non ex cutable pour l instant serait l exemple type de programme 1 jeter les p tes dans l eau bouillante sal e 2 laisser cuire 1 minute Ces directives impliquent des actions et des tests sur des objets explicites p tes eau sel ou non chaleur temps C est peut tre moins vident premi re vue mais l tat des objets peut avoir son importance pour appliquer la directive 1 il faut que l eau soit sal e et qu elle soit bouillante Par ailleurs la directive 2 n a de sens que si la 1 a t appliqu e correctement Enfin remarquons que cette recette implique d autres actions l mentaires totalement implicites comme prendre une casserole la remplir d eau et la faire chauffer prendre une casserole est en fait un programme relativement complexe impliquant la fois perception sensorielle visuelle tactile et contr le moteur mettant en jeu quelques dizaines de muscles ou m me plus s il faut aller l acheter Cet exemple met ainsi en vidence trois propri t s fondamentales du programme e a s quence pr sente les directives dans un ordre qui doit tre suivi scrupuleusement e chaque directive doit tre compr hensible sinon
224. formation iso 8859 1 Mais le code ici manque singuli rement de robustesse et pr sente 4 probl mes potentiels 1 rien n oblige personne indiquer le cHARSET sur la m me ligne que le tag META qui l inclut en fait la seule contrainte est que cet indicateur doit tre un l ment de la valeur de l indicateur CONTENT par convention on le met souvent c t du type MIME mais l encore rien d obligatoire 2 de plus sur une page qui justement traiterait de ce sujet comme par exemple celle ci il pourrait y avoir beaucoup d occurrences non pertinentes de la chaine charset 3 le mot CHARSET n est pas obligatoirement crit en minuscules en fait le code HTML est souvent typographi en capitales en particulier quand il est g n r automatiquement 4 la valeur du CHARSET n est pas obligatoirement tout sauf les 2 derniers caract res de la ligne la preuve la d finition pour http www python org mentionn e ci dessus Heureusement il y a une autre facon d obtenir cette information condition de savoir que quand on ouvre un URL le serveur envoie silencieusement un paquet de donn es additional information que la plupart des browsers sait exploiter mais pas afficher Ainsi la valeur retourn e par urlopen est un pointeur sur un objet ADDITIONAL INFO URL gt gt gt flux urlopen http www iedparis8 net ied gt gt gt Lits lt addinfourl at 18775656 whose fp socket fileo
225. formes et transformations l ments de programmation UNIVERSIT PARIS 8 SYNTH SE DE COURS EDF1ILPA 2011 2 FORMES ET TRANSFORMATIONS formes et transformations l ments de programmation Jym Feat 5 dition novembre 2011 Universit Paris 8 D partement Informatique UFR MITSIC Institut d enseignement distance 2007 2011 J Feat iED Paris 8 Permission is granted to copy distribute and modify this document under the terms of the GNU Free Documentation License Version 1 2 or any later version published by the Free Software Foundation with no nvariant Section no Front Cover Text and the Back Cover Text as in below A copy of the license is included in the section GNU Free Documentation License as well as a unauthorized translation In addition you are granted full rights to use the code examples for any purpose without even having to credit the author 1 The back cover text is This manual has been developed at the University of Paris 8 Vincennes Saint Denis France L MENTS DE PROGRAMMATION 3 formes et transformations l ments de programmation Ce cours est fondamental en ce sens qu on y d finit des concepts et des techniques qui vont permettre de programmer le traitement de l information S adressant des d butants il ne requiert aucune connaissance pr alable mais exige une certaine rigueur qui va de pair avec l inflexibilit des langages formels Son contenu correspond un fasci
226. ge fermez simplement la fen tre graphique ca obligera le programme en ouvrir une nouvelle toute propre sans les effets des instructions ant rieures INTERACTION AVEC LE SYST ME 11 0 4 J DITE AVEC GEDIT Le programme de tout l heure une fois test on peut avoir besoin d en garder une trace en particulier s il s agit d un exercice rendre Les menus du terminal permettent de s lectionner le contenu de la fen tre et de le copier lancez maintenant l diteur de textes GEDIT par le menu o vous avez trouv le terminal et collez y la copie que vous venez de faire Votre programme peut maintenant tre manipul comme un texte normal il ne vous reste donc plus qu faire un petit peu de m nage pour ne conserver que ce que vous avez effectivement entr comme instructions e supprimer les 3 lignes du haut affich es par python e utiliser la fonction de remplacement pour enlever tous les gt gt gt espace compris Il ne doit donc plus rester que ce que vous avez effectivement tap Maintenant si vous s lectionnez ce bloc de texte bien nettoy et que vous le copiez pour le coller dans le terminal tout se passe comme si vous aviez entr ces instructions la main PYTHON ne fait pas la diff rence et le programme s ex cute tout pareil Programmer en pas pas c est tr s utile surtout au d but pour tre s r que c tait bien cette instruction l qu on voulait ex cuter avec un peu d exp
227. gement du programme en m moire est quelque peu simplifi puisqu il s agit simplement de recopier des valeurs enti res dans le vecteur data L o les choses se compliquent c est que le document original ne montre pas moins de trois formats de programme le format de la section 13 7 exemple de programme 40 C iAO introduction l architecture des ordinateurs chapitre 13 ordinateur en papier 11 11 23 22 10 2007 2012 par J Feat 130 FORMES ET TRANSFORMATIONS 00 49 20 an 20 02 49 22 in 22 04 40 20 load 20 le format de la section 13 8 exercice 13 8 10 3a 00 31 40 32 60 33 48 32 49 33 40 33 22 ff 12 34 41 32 10 44 et toujours dans la section 13 8 le format de l exercice 13 9 50 49 70 52 40 70 54 48 71 Notez qu il s agit dans tous les cas de codes hexad cimaux parfois donn s en minuscules et parfois en majuscules aucune importance les deux formes sont quivalentes et de toute facon la repr sentation interne des programmes elle est binaire DIFF RENCES Le 13 7 liste en m me temps l adresse de l instruction le code machine et le code assembleur symbolique pour chaque ligne impaire alors que les lignes paires ne contiennent qu une adresse et une valeur format somme toute assez complexe interpr ter surtout quand on arrive l offset 0x18 car ici le 1E contrairement ce qu on attend dans cette colonne n est pas un code d op ration il n est d ailleurs pas d
228. ges au lieu d crire un expression comme 2 3 4 vous enverrez a l objet 2 un message compose du s lecteur de m thode et des objets 3 et 4 En definitive vous vous rendrez compte que ce qui s exprime difficilement dans un langage donne peut se formuler ais ment dans un autre car en principe chaque langage a t cree pour repr senter et r soudre plus facilement certains types de probl mes et c est cette culture la que vous tes en train d acqu rir culture qui vous permettra l avenir de choisir l outil le plus appropri pour accomplir une t che sp cifique Et m me ceci vous incitera peut tre a creer votre propre outil autrement dit votre propre langage vous ne serez certainement pas le premier ni probablement le dernier Mais le plus important n est pas le langage la premiere qualit d un programmeur c est sa curiosit et il se trouve que la curiosit a va de pair avec l imagination C est pour cette raison qu il ne faut pas craindre de consid rer l informatique comme une discipline exp rimentale au debut de l histoire personne n aurait imagine qu un mulot pourrait enfoncer des boutons virtuels ou d placer des objets iconiques sur un simulacre de bureau Et ces choses la il faut bien que quelqu un les invente Lisez ce que dit le Dr Dobb a propos de Xerox PARC http www ddj com 184404385 et vous d couvrirez qu il y a d j plus de 30 ans quelqu un s est dit et si on mettai
229. gments de sorte qu une expression comme segment n me retournera la liste des coordonn es n cessaires create_line pour le segment n n Ceci fait il me faudra donner une description de chaque caract re alpha num rique comme une liste des num ros des segments qui le constituent Pour repr senter ces donn es le plus commode serait un objet de type dict que j appellerai description parce que je pourrai alors utiliser naturellement une expression comme description E pour retrouver imm diatement la liste des segments du FAISABILIT Je ne sais plus o j avais crit sans donn es il n y aurait pas d algorithmes On comprend pourquoi ici l analyse que je viens de faire me permet de pr ciser la repr sentation des donn es que le programme devra manipuler Mais c est vrai que pendant l analyse je n arr te pas de pond rer l impact qu aurait telle ou telle repr sentation sur la mani re dont je pourrais ensuite l exploiter Cependant il me reste un probl me purement algorithmique puisque eoe LCD 31 1 mes coordonn es de segment sont absolues par rapport la matrice du caract re elles ne conviennent que pour le tout premier caract re que j j affiche ce qui signifie que pour les caract res suivants je vais devoir translater toutes les abscisses des segments que j affiche 1 l Sachant que cette matrice a 50 pixels de large il me parait raisonnable de d caler le caract re s
230. gne c est dire n apr s chaque mot px2 3 modifier le programme de sorte que les lignes de code qui enregistrent ou relisent la stoplist soit abstraites dans des fonctions sp cifiques appel es par exemple put list et get list l id al serait que put list qui ne retourne rien soit d finie avec un param tre repr sentant la liste de mots enregistrer et que get list retourne une liste pour qu on puisse l utiliser comme stoplist get list stop list Voyez vous comment cette g n ralisation permet maintenant d utiliser ces fonctions dans n importe quel autre programme Ceci vous permet de remarquer au passage que par d faut la m thode split prend en compte non seulement le blanc l espace mais aussi les carateres gris la tabulation et l alin a 0 27 4 modifier le texte et mettre le mot final GLOBAL entre guillemets pourquoi la fonction nettoie ne fait elle plus son boulot correctement Comment traiterait elle par exemple la ligne 3 le mot GROSSE s il tait la fois entre guillemets et entre parentheses Modifier le code pour rem dier ce probl me 27 5 fonction prd est tr s commode pour afficher les donn es mais ce n est pas comme ca qu un typographe professionnel pr senterait l index d un ouvrage le lecteur n a que faire des modifier cette fonction pour que la liste de lignes soit pr sent e sous la forme programme 1 2
231. grammeur doit s occuper de la gestion de la m moire et des variables en m me temps qu il doit programmer tous les d tails du traitement de l information l inconv nient des langages de script n appara t qu en termes de souplesse et de performance effectivement les programmes compil s sont d une mani re g n rale plus flexibles plus rapides l ex cution et moins gourmands en m moire cependant dans la programmation par scripts avec les machines modernes compte tenu du cout du materiel et de celui de la main d uvre l inconv nient du run time est largement compens par l conomie du write time PORTABILIT DES SCRIPTS Dans un environnement unix le suffixe ou extension d un fichier n est PAS un crit re pour d terminer son type c est simplement une partie du nom de ce fichier sauf si le programme qui le manipule y voit lui une intention particuli re Il n y a donc rien en apparence qui distingue un script d un executable compil ou d une po sie en alexandrins moins de regarder dedans il existe une commande file laquelle on donne comme argument un nom de fichier et qui dit ce que ca peut tre au vu de la signature interne du fichier Si on sait que le fichier x est un script on peut demander l ex cuter en invoquant explicitement le nom de l interpr te pour lequel ce script a t crit par exemple bash x Cependant comme on l a vu pr c demment un script peut tre marqu
232. he 2011 11 23 22 10 16 2007 2012 par J Feat 84 FORMES ET TRANSFORMATIONS from Tkinter import from math import T Tk set up master widget To tit let sinus 0 0 W 300 width H 300 height F Canvas width W height H bg light yellow F pack ce stade il ne reste plus qu faire varier l angle x sur une p riode de 360 degr s et calculer y sin x pour avoir les coordonn es x y comme sin s attend une valeur en radians il me faut it rer de 0 a 628 pour effectuer une r volution complete un radian c est peu pr s 57 3 for angle in xrange 0 int radians 360 100 5 x angle 100 y sin x pixel F x red T mainloop Malheureusement on ne voit rien dans ma fen tre graphique comme on l a dit plus haut y varie entre 1 et 1 mais ce qui se passe entre deux pixels est trop petit pour tre affichable il faut donc que je change y d chelle en le multipliant au moins par 100 Ici je vais arrondir sa valeur 2 decimales apr s l avoir multipli par le tiers de la hauteur de la fen tre soit H 3 et pour faire bonne mesure je vais le d caler de H 2 sorte que le se trouve mi hauteur de la fen tre def scale val return round val H 3 2 scaling et la fin du programme devient donc DE for angle in xrange 0 1nt radians 360 1000 5 x angle 100 y scale sin x H 2 scaling and offsetting pixel F x y
233. hon org 3 0 lt a gt a href ftp python 3 0 python 3 0 msi lt a gt lt a href ftp python 3 0 Python 3 0 tar bz2 lt a gt Le debut de la chaine est le protocole d acc s au vu de l exemple ci dessus il semble evident que seul nous int ressent les acces HTTP mais comment les retrouver dans le texte de la page Facile la m thode find d une chaine retourne l indice de la sous chaine pass e en argument ou la valeur 1 si la sous chaine n est pas l gt gt gt bleu blanc rouge find blanc 5 gt gt gt bleu blanc rouge find vert T Il est donc ais de programmer une fonction qui explore une ligne de texte def get href ligne texte multiligne x ligne find href trouves tu if lt return non d gage ref ligne x 6 split 0 oui extrais le lien if ref startswith http return ref et retourne le et de l utiliser it rativement apr s ouverture d un URL hrefs flux urlopen http www python org for ligne flux gt hrefs append get Href ligne Testez le pour cette page il vous construira une liste 48 liens il n y a plus qu mouliner sur les 48 pages r f renc es et sur les hyper liens qu elles contiennent et sur les pages auxquelles font r f rence ces hyper liens etc Ce serait donc l embryon d une solution au probl me du SPIDER OU CRAWLER pos plus loin par l exercice px29 2 Et pendant que j y pense notez bien q
234. icularit d avoir depuis ces dix derni res ann es merg en tant que standard Avant l utf 8 il y avait l Ascii american standard code for information interchange un syst me de codage des eng atx ee as MT uF WT FF CH caract res con us par et pour les nord am ricains comme x1 4 a f on le voit ci contre il ne prend en compte que les caract res de contr le la ponctuation les chiffres et l alphabet latin de base en usage dans les pays anglo saxons Les nombres hexad cimaux sur la ligne du haut sont la valeur des bits de poids faible tandis que ceux de la colonne de gauche sont celles des bits de poids fort Rien n tant pr vu pour accommoder les caract res accentu s europ ens sans 8v 2 n parler du grec du cyrillique ou m me de l iPA international phonetic alphabet 24 1235 2825 27 2z 54 quelqu un chez ism eut l id e d tendre ce codage sur 8 bits pour repr senter 2 P Q R H Y Z Ti soit 256 caract res et d en profiter pour y faire figurer quelques symboles suppl mentaires dont quelques caract res accentu s mais pas TE i Md syst matiquement plus d autres symboles d une utilit discutable mais T 5 i l i 1 l poque a paraissait quand m me mieux que rien asses Parce que la m moire se manipule au minimum par mots de 8 bits la n cessit d ut
235. il mot4 motl mot2 mot3 apostrophe hui V rifiez en evaluant chaque variable qu elles ont bien la valeur attendue puis coder l expression qui permettra a partir de ces variables d obtenir la nouvelle chaine au jour d aujourd hui Remarque en principe le nom des variables ne fait rien a l affaire on aurait aussi bien pu les appeler truc machin et chose mais j ai pr f r des noms auto documentaires le nom dit quelque chose de l utilisation de la variable Et a peut aider quand on lit le code Mais c est vrai que pour l interpr te les definitions suivantes p pomme de t terre 3 d finitions distinctes permettent ensuite d valuer l expression parfaitement valide p d t px01 3 essayez ce programme et valuez cette derni re expression Oh Avez vous comme moi oubli d espacer les mots Ou d ins rer des tirets A l vidence moins le code est lisible plus on fait d erreurs et du code ca n est jamais vraiment lisible Nous y reviendrons px01 4 d finir les variables trait et point et les utiliser pour coder en morse le message SOS o S est repr sent par trois points et O par trois traits avez vous spontan ment d fini ces variables avec les valeurs respectives et Ou l inverse Qu en concluez vous 2011 11 23 22 10 16 2007 2042 par J Feat 20 FORMES ET TRANSFORMATIONS NOTES On prendra l habitude la fin de chaque section
236. il s c est qu ils sont traduits sous une forme directement compr hensible par le processeur de la machine et qu ils s ex cutent donc th oriquement plus vite que lorsqu ils sont interpr t s Mais comme tout programme doit d abord passer par une phase de mise au point la vitesse d ex cution n est en d finitive que secondaire Ainsi la priorit est donn e aux phases 0 et 1 conception mise au point Du point de vue industriel ces phases sont co teuses et ne rapportent rien tant que le produit n est pas commercialisable La tendance est donc de favoriser les outils qui permettent le RAD ou d veloppement rapide de prototypes pour r duire au minimum l investissement C est ce qui explique la mont e en puissance des langages interpr t s depuis une quinzaine d ann es LANGUE NATURELLE LANGAGE FORMEL Les langues naturelles par nature ambigu s sont utilis es par des tres intelligents qui per oivent en fait bien plus qu il n est dit comme dans l exemple de la recette ci dessus l oppos les langages de programmation sont des langages formels destin s des machines sans intelligence et sont par nature non ambig s ils ne s appuient jamais sur des implicites non nonc s dans le contexte De ce fait ils sont terriblement contraignants en ce sens que changer la place d une virgule peut faire une diff rence radicale entre deux instructions Comme tout langage les langages de programmation sont interpr t s
237. iliser un octet pour repr senter un caract re a conduit les concepteurs de langages et par l les programmeurs consid rer qu un octet est un caract re donc que l espace n cessaire en m moire pour repr senter n caract res quivaut n octets D ailleurs les vieux langages ont encore un type de donn e appel char occupant 8 bits suppos s repr senter un caract re Mais m me 256 codes c est insuffisant pour beaucoup de langues lues et crites par quelques milliards d individus qui n ont pas grand chose voir avec les conventions occidentales D o l id e de l utf 8 qui red finit le concept de code de caract re le renommant code point et lui donnant une taille variable de 8 32 bits selon les besoins La bonne nouvelle pour les anglo saxons c est que l utf 8 conserve les codes asc originels sous la forme de code points sur 7 bits de sorte que beaucoup de vieux programmes puissent continuer tourner sans probl mes et a du point de vue conceptuel c est tr s fort cf lt http www cl cam ac uk mgk25 unicode html gt BYTE STRING Mais pour les autres a veut dire qu une chaine de caract res ne peut pas tre correctement interpr t e si on ne sait pas comment elle a t cod e heureusement une convention s est spontan ment tablie de fait pour utiliser l utf 8 sur les syst mes Posix c est dire les variantes de UNIX et LINUX Et ceci signifie que les logiciels qui tournent sur
238. ille taille de cellule toutes cellules initialement libres handler li lt Button 1 gt le widget actif cellule d j occup e joueur symbolique w create polygon 10 10 20 10 S33 Soy 93 sS Aor S9 iU 20 TILL Tred NW Create polygon 10 337 10 d 45 10 Soy 10 55 20 20 5 TILL Tred def fais o w w create Oval 10 I0 58 35 width 10 def symbole j return phot ial ne peut valoir que 0 ou 1 def gagnant s global info for x in range T if M x 0 1 Mix 2 count s is T ligne x return True if M O Ix MILI xl M 2 2 count s is T colonne x return True LE MIOLO MIL iL MIZILZII cODBL BS 38 T diagonale return True if MIO IZI MII MIZIIOII Gountis 15 T diagonale return True if False not in MIO M 1 M 2 info text GAME OVER eee eee ee eee eee from Tkinter import morpion Tk morpion title MORPION 1 0 cosmetique grille Frame morpion for R in range T for C in range Cell Canvas grille bg light grey width H height H Cell bind lt B tton 1 gt Joue Cell grid row R column C Cell R Cell C R C grille pack stop Button morpion stop pack info Label morpion info pack morpion mainloop text ASSEZ command localisation de chaque cellule morpion destroy PROTOTYPAGE D APPLICATIONS 127 LA M THODE GRID Les m thodes pack et grid
239. illing the role of the Document thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it In addition you must do these things in the Modified Version A Use in the Title Page and on the covers if any a title distinct from that of the Document and from those of previous versions which should if there were any be listed in the History section of the Document You may use the same title as a previous version if the Original publisher of that version gives permission B List on the Title Page as authors one or more persons or entities responsible for authorship of the modifications in the Modified Version together with at least five of the principal authors of the Document all of its principal authors if it has fewer than five unless they release you from this requirement C State on the Title page the name of the publisher of the Modified Version as the publisher D Preserve all the copyright notices of the Document E Add an appropriate copyright notice for your modifications adjacent to the other copyright notices F Include immediately after the copyright notices a license notice giving the public permission to use the Modified Version under the terms of this License in the form shown in the Addendum below G Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document s license notice H Include an unaltered
240. implement l l ment de la liste 0 X indice par la valeur de d un point de vue num rique La fonction gagnant attend un argument et j ai appel s le param tre correspondant qui re oit donc l un des deux symboles caract res 0 ou X Cette fonction est ridiculement bestiale j ai bien essay des solutions plus astucieuses mais elles demandent toutes de telles acrobaties qu elles sont en d finitive moins efficaces que celle que j ai retenue e Pour chaque ligne chaque colonne et chaque diagonale je compte le nombre de fois que la valeur de s apparait si j en trouve T je retourne vrai imm diatement e Comme cette fonction est appel e apr s chaque coup je ne m int resse qu l empreinte du joueur en cours Si c est l autre qui aurait d gagner je l aurais forc ment su au coup d avant e Mais il reste une derni re chose v rifier si personne n a encore gagn mais qu il ne reste plus aucune cellule libre alors c est le match nul z ro partout et GAME OVER 11 11 23 22 10 2007 2012 par J Feat 126 SCRIPT COMPLET J True T 3 H 60 M T False for x in def joue event global J wW event widget if M w R w C return if J fais x w else fais o w S symbole dJ M w R w C s if gagnant s info text J not J def fais x w joueur s gagne 3 s FORMES ET TRANSFORMATIONS joueur initial taille de gr
241. ine le traitement imm diatement et voil donc pourquoi il ne se passera rien si on clique sur une case d j marqu e Par contre si la cellule est libre il y a d j deux choses que je dois faire inconditionnellement e dessiner dans cette cellule le symbole sp cifique du joueur c est un r le que je d l gue aux fonctions fais x et fais o e marquer cet l ment de la matrice M comme occup par ce joueur une petite fonction symbole me retourne le symbole du joueur courant que je mets comme valeur dans l l ment appropri de la matrice M Maintenant je dois me poser la question de savoir si ce coup tait gagnant travail de d tection que j ai d l gu la fonction gagnant si elle r pond vrai j affiche un petit compliment dans le label info sinon la vie continue mais avec l autre joueur FONCTIONS ANCILLAIRES Fonctions de dessin fais x et fais o elles n ont rien de tr s rus ceci pr s que pour faire plus pro le X est dessin comme deux polygones qui se croisent Note ces fonctions devraient tre param tr es pour s adapter n importe quelle taille de cellule La fonction symbole est d finie avec le param tre j donc attend un argument le joueur dont on se souvient que c est une variable logique or il se trouve que comme dans beaucoup de langages notamment ANSI C True c est la m me chose que 1 et False c est la m me chose que 0 cette fonction retourne donc s
242. interpr te sp cifi qui se charge de fa on transparente et fait ce qu on lui a dit de faire puis s arr te en faisant place nette pour plus de d tails voyez man python e il existe encore une autre fa on de faire qui consiste a importer ce script ce qui le convertit automatiquement en module mais gardons ceci pour plus tard Nous allons utiliser pour cet exercice la 3 methode il vous faudra donc utiliser la commande chmod u x plusieurs pour donner a votre script plusieurs le statut d ex cutable On a vu ce que devait tre la premiere ligne du script et on sait pourquoi Maintenant si le code ou les donn es contiennent des caract res accentu s vous devez choisir un encodage et le d clarer comme un commentaire sur la 2 ligne avec une syntaxe particuli re usr bin env python t Comings Dei e Ici deux remarques s imposent e bien qu elles commencent par le symbole ces deux lignes ne sont pas v ritablement des commentaires mais des directives de comportement interpr t es par le SHELL e la 2 doit tre coh rente avec la facon dont le fichier est r ellement encode d cision que vous avez prise au moment ou le fichier a ete enregistr faute de quoi PYTHON se fera une representation interne erron e du et autres caract res accentu s si par exemple le fichier est enregistr en 150 8859 1 la ligne 2 devrait tre coding latin 1 Ensuite vient le code de la fonction pluriel
243. invoquent implicitement ce qu on appelle des GEOMETRY MANAGERS que je renonce traduire L avantage de la m thode grid ou GRID signifie grille c est qu elle permet de disposer les widgets dans une sorte de grille virtuelle exactement ce qu il me fallait pour organiser mes instances de Canvas Je m empresse de signaler qu il est absolument d conseill d invoquer des GEOMETRY MANAGERS differents dans un m me programme parce qu ils peuvent tre amen s a prendre des d cisions conflictuelles insolubles et se renvoyer la balle ind finiment je l ai fait ici parce que a simplifiait le programme mais j ai honte LISTES ET R F RENCES Un mot propos de l trange syntaxe de l expression qui me sert initialiser la matrice M 3 False for x in range 3 On avait d j rencontre ce genre d expression et on sait que c est la mani re fonctionnelle de calculer la valeur d une liste de mani re it rative Mais ici suivez moi de tr s pres si j valuais 3 0 j obtiendrais 0 0 0 et de m me 3 3 0 me donnerait 0 0 0 O 0 0 0 0 0 qui ressemble beaucoup ce dont j ai besoin c est dire une matrice de 3 lignes par 3 colonnes dont tous les l ments sont proprement initialis s z ro et soit dit en passant le r sultat aurait t le m me avec False au lieu de O Maintenant faites l exp rience suivante Lh 3 13 0 L O 0 0 et valuez L
244. ionnaire d v nements Or mainloop invoque les HANDLERS li s par bind en leur passant implicitement comme argument l objet qui repr sente l v nement c est pour cette raison que j ai d mettre un param tre la fonction valeur m me si moi je n en fais rien pour l instant On avait plus haut pr sent Tkinter comme une sorte de serveur mais le v nements externes m canisme de la m thode bind montre qu il s agit v ritablement d un y FRAMEWORK g n rateur m d v nements le client ne demande rien il se contente de d finir dans son programme internes des CALLBACKS C est dire des ressources qui seront appel es par le FRAMEWORK quand surviendra un v nement A i Ici la fonction valeur se comporte comme un PLUG IN utilis par Tkinter pour mainloop g rer l v nement externe enfoncement de transform en v nement interne un objet par le g n rateur gus H valeur Voil pourquoi un HANDLER ne peut tre utilis que pour son effet et ne retourne pas de valeur On vient de voir qu il y aurait deux mani res de donner une fonction le statut de HANDLER e enla liant en tant que valeur de l attribut command e en la liant avec la m thode bind Dans le premier cas le HANDLER peut g rer des v nements multiples tels que button press suivi de button release un tel HANDLER ne prend pas d argument du tout lequel devrait il prendre e
245. iquer une transformation tous Les l ments Ex title for x in al et puis si une Liste ne contient que des cha nes on peut Les r unir x L eerf volant Join x avec un tLret x elatr de Join x avec un espace x bu reau join x avec rien du tout 2011 11 23 22 10 16 2007 2012 par J Feat 56 QUELQUES LIENS INTERESSANTS Lecture vivement recommand e UTF 8 and Unicode FAR for Unix Linux nttp www cl cam ac uk mgk25 unicode html documentation Le module corecs accessible en python http docs python org library codecs html module codecs pluriels irr guliers http fr wikipedia org wiki Pluriels irr guliers en francais et si Vous trouvez d autres Liens stgnalez les sur Le forum on Les rajoutera LCL FORMES ET TRANSFORMATIONS 4 DICTIONNAIRES ACCES PAR CLE Les dictionnaires sont une mani re d tablir une relation en d finissant l association d une cl et d une valeur on peut alors acc der a cette valeur grace l index que repr sente la cl Ce type de donn e aussi appel TABLE D ASSOCIATIONS existe dans de nombreux langages modernes comme OBJECTIVE C AWK JAVA OU PERL alors que pour d autres plus anciens il est n cessaire d emuler sa mise uvre au moyen de tables de hachage ou HASH TABLES Puisque PYTHON nous a tout pr par pour qu il n y ait plus qu se servir nous n aurons pas a descendre dans le detail des calculs de
246. ires rendez vous sur le forum 1 DONN ES L MENTAIRES Ce chapitre introduit les rudiments de la programmation les types l mentaires de donn es et les concepts qui permettent d effectuer des op rations sur ces donn es Qu un type de donn e soit l mentaire ou non est affaire de point de vue ce stade nous consid rerons comme l mentaire une donn e qui peut tre manipul e en une seule op ration simple sans entrer dans le d tail de sa v ritable nature ou de sa repr sentation en machine Le texte du cours est bourr d exemples qu il ne sert rien de lire tous les exemples doivent tre mis en pratique imm diatement sous peine de ne pas comprendre le texte lui m me qui n a de sens que par rapport au r sultat de l exemple et de toute fa on tester l exemple est le seul moyen de vous l approprier en l incorporant dans votre exp rience de programmeur Par ailleurs les exemples modifient le contexte et c est dans ce contexte que les exemples suivant doivent eux m mes tre test s hors contexte ces exemples n ont pas de sens sommaire O fondements interaction avec le syst me prec 7 donnees amp l mentalle8 sce 13 1 0 pr liminaires e M TII 14 1 1 shell python a 16 1 2 application amp ne kd add aries dai ened E aan xis edid i 21 1 3 m canique de l valuation 22 2 manipulation de
247. it the lt gt cat drinks some milk Notez la syntaxe de l expression trado x ici ce x est l l ment que je voudrais rajouter la liste mais l op rateur ne peut pas concat ner une liste avec une cha ne il faut donc que mon x soit une liste contrainte que j aurais pu contourner en appliquant la m thode trado append x ou simplement comme je l ai fait en mettant x sous la forme d une liste x C est d ailleurs pour la m me raison que j avais aussi plus haut trado dic mot Okay mais en pratique une traduction pleine de trous n est pas tr s utile je vais donc sortir de mon chapeau une nouvelle structure de contr le qui ressemble beaucoup au if else d j pr sent plus haut ceci pr s qu elle permet de traiter les exceptions Il s agit de try except une forme qui se rabat sur l valuation du bloc except quand l valuation du bloc try a d clench une exception def traduis dic phrase trado le r sultat est d abord une liste vide for mot in phrase split scanne la phrase explos e mot par mot try 34 essaye pour voir trado dic mot tout va bien except non un trou dans le dico x raw input traduis moi s mot demande dic mot x rajoute au dico trado dic mot sers t en pour traduire return Join trado et retourne du texte J ai utilis ici la fonction raw input renomm e simplement input en PYTHON 3 qui prend un texte comme
248. ivi jusque l vous aurez compris que la programmation est une discipline double facette e l analyse qui permet de d composer le probl me en sous problemes e le codage qui d cide de la forme des donn es traiter et du m me coup de la fa on de les traiter Et comme tout se tient une erreur de design en un point de cette d marche conditionne tout le reste de la r alisation px11 1 coder une fonction pluriel pour former correctement le pluriel d peu pr s n importe quel adjectif majuscule ou minuscule testez la entre autres sur les mots suivants hors d uvre bal regal banal canal tal pascal portail b tail travail oeil coeur hame on ni o m pris landau rideau jeu bleu clou genou prix et tout ce qui vous passe par la t te 3 2 PROGRAMMATION FONCTIONNELLE Des langages comme LISP HASKELL O CAML OU SCHEME ont de la programmation une approche fonctionnelle sans descendre dans les d tails voici une petite id e de ce que ca donne Mettons qu on a une fonction comme pluriel et qu on a besoin de l appliquer syst matiquement une liste de mots c est d ailleurs le probl me pos dans l exercice ci dessus supposons que ca m arrangerait de r cup rer une nouvelle liste avec les m mes l ments mais au pluriel Bon mettons que la liste de mots s appelle justement mots il me suffit de coder pluriel x for x in mots et la valeur r
249. l Tkinter Wiki http tkinter unpythonic net wiki python Interface to Tel TR http docs python org library tkinter htm 32 voir aussi le chapitre 6 de PYTHON IN A NUTSHELL 2003 http docstore mik ua orelly other python 0596001886_pythonian chp 6 sect 6 html 11 11 23 22 10 2007 2012 par J Feat INFRASTRUCTURES LOGICIELLES 114 R CAPITULATION Consid rez ce chapitre comme une sorte de r trospective culturelle un bilan des concepts que nous avons apprivois s jusque l De la notion d it ration jusqu l encapsulage de m thodes dans un objet c est 60 ans d histoire d une technologie encore balbutiante et pourtant tellement complexe qu on a d j du mal en avoir une vision globale On peut n en rien retenir mais ces quelques pages sont l pour largir votre cadrage et votre profondeur de champ qu on ait r ussi vous pr senter les choses simplement ne change rien la complexit sous jacente complexit qu il vous faudra prendre bras le corps si vous avez quelque part l ambition de comprendre comment c est foutu et devenir capable de r aliser par vous m me quelque chose qui tient debout Ces notions dont vous avez maintenant une teinture sont sans doute fondamentales mais vous aurez bien d autres occasions de les revisiter que ce soit en tudiant d autres langages ou en r alisant des applications plus pouss es Car ces concepts sont applicables tous les langages de programmation m me ceux
250. l n a pas recoder les fonctions de bas niveau et du point de vue de l utilisateur ca unifie l interface si le double clic permet de s lectionner un mot ce sera pareil partout tout le monde y trouve son compte Mais ceci n est possible que si le framework est orient objet car c est le m canisme d h ritage qui permet cette transmission des propri t s donc qui non seulement unifie l aspect des interfaces mais aussi unifie les comportements en r action aux v nements g r s par le framework Cet aspect du syst me sera tudi en L2 mais en attendant Tkinter permet de se faire une bonne id e de la facon dont fonctionne cet empilement de strates logicielles tant du point de vue de la conception que du point de vue de l exploitation Il permet aussi de mesurer l int r t de programmer par objets et explique pourquoi ce paradigme de programmation connait actuellement un tel succes dans l industrie NOTES suppl ments sur quelques concepts python tutorial classes http mandrivalinux hu hron python24 tut node11 html framework http visualwikipedia com en Software_framework event driven programming _hitp eventdrivenpgm sourceforge net error handling strategies http oranlooney com lbyl vs eafp pour plus d information voir Tkinter http wiki python org moin TkInter Tkinter reference http infohost nmt edu tcc help pubs tkinter thinking in Tkinter http www ferg org thinking_in_tkinter index htm
251. l est possible d utiliser ce m canisme pour passer plusieurs mots traiter Dans ce cas il ne s agit plus de traiter seulement le mot sys argv 1 il faut it rer sur toute la liste sauf bien s r son premier l ment le nom du programme encore que rien ne s oppose ce qu on le mette lui aussi au pluriel mais ce n est pas terriblement int ressant Ainsi en mettant plusieurs arguments la suite du nom du programme plusieurs il suffirait d une construction for standard pour qu une instruction print affiche la console le pluriel de chacun plusieurs clou bleu mais rouill clous bleus mais rouill s px11 3 adapter le script plusieurs pour qu il soit capable de traiter plusieurs mots pass s en arguments sur la ligne de commande le tester abondamment pour garantir qu il fonctionne correctement dans tous les cas de figure Si vous prouvez des difficult s pour cette r alisation jetez donc un coup d il la section iLP 9 1 p 142 Et pour r gler vos listes d exceptions avec un maximum de pr cision allez voir la page ouaibe de WIKIPEDIA http fr wikipedia org wiki Pluriels irr guliers en francais 2011 11 23 22 10 16 2007 2042 par J Feat 5O FORMES ET TRANSFORMATIONS 3 4 UNICODE L objectif ici n est pas de discuter les concepts du codage des caract res il s agit plut t de d monter le m canisme qui vous permet d utiliser dans vos programmes l utf 8 un codage parmi d autres mais qui a la part
252. la correspondance conventionnelle entre un nom de couleur et le triplet de valeurs RGB qui affichera cette couleur a l cran c est ca que sert le fichier usr share X11 rgb txt mais ce n est pas tout d avoir les donn es encore faut il ecrire le code qui exploite ces donn es Supposons qu on ait besoin de construire un convertisseur de nombre romain en decimal on sait qu une expression comme V 5 X 10 X extrait la valeur qui correspond a cl d index X c est dire la valeur 10 en d autres termes une telle expression joue a la fois le r le de look up table et celui de l algorithme de recherche de l l ment Je peux donc me donner une table de tous les chiffres romains il n y en a que sept conv C 100 D 500 I 1 M 1000 L 50 V 5 X 10 sachant qu elle me procure une conversion imm diate mais bien s r ceci n est pas suffisant pour convertir un nombre romain Il serait techniquement possible de construire une table de conversion pour tous les nombres romains il n y en a que 3999 mais s il faut le faire par programme autant d penser son nergie faire des choses moins fastidieuses comme par exemple coder un convertisseur qui fonctionne pour tout nombre C est Lol qu intervient Le vieux compromis entre l espace et Le temps Les donn es occupent de l espace en m moire mais requi rent un temps de calcul nul inversement l information non encore existante occupe un
253. la d finition d une fonction on ne verra rien puisqu il est interne Une valeur peut tre associ e plusieurs variables mais une variable ne peut repr senter qu une valeur ce serait une erreur de penser qu une variable est un conteneur et que son contenu est la valeur une variable n est qu un symbole accroch une valeur un nom qui tiquette un objet Une valeur d pend forc ment d un contexte e a valeur d une variable d pend du contexte ou elle a t d finie ou red finie en particulier si sa d finition d pend de valeurs elles m mes d pendantes du contexte e ona vu page 22 un exemple ou la valeur d une variable c d pendait de celle d autres variables a et b et o une m me expression a b retournait une valeur diff rente selon le r sultat de l valuation de a et deb e a valeur d une fonction d pend aussi d un contexte celui qu on lui passe au moment o on l appelle autrement dit ses arguments La valeur de f x d pend de la valeur de x x qsdfghjklm len x 10 x weevbn Len x 6 La repr sentation d une valeur par une expression symbolique est une abstraction une variable est l abstraction d une valeur une fonction est l abstraction d un calcul ou d un traitement une valeur repr sentant une expression symbolique peut tre valu e l abstraction facilite les manipulations par programme Programmer c est exprimer des transformations
254. la m me chose que echo PATH La plupart des distributions sont livr es avec plusieurs programmes de sHELL comme sh le SHELL original icsh syntaxiquement plus proche de ANSI C zsh pour les amateurs M me si votre terminal a t ouvert avec le bash comme sHELL par d faut vous pouvez tout moment invoquer tcsh ou zsh en les appelant par leur nom partir de ce moment c est ce SHELL qui interpr tera toutes les commandes entr es au clavier Pour ce qui est de l interpr tation des scripts voir plus loin sp cifier l interpr te ENTR ES SORTIES LES OP RATEURS DE REDIRECTION Comme on l a vu plus haut une commande comme set affiche quelque chose sur l cran du terminal de la console ce quelque chose est appel de l anglais output la sortie de set L int ressant ici c est que cette sortie peut tre redirig e une expression comme set gt variables n affiche rien sur l cran parce que le texte qu elle aurait affich a ete redirig et constitue maintenant le contenu du fichier variables La preuve en est que si maintenant on commande cat variables ce que cat affichera sur l cran le contenu du fichier variables est exactement ce qu aurait affich la commande set si elle n avait pas ete redirig e Et en commandant cat variables gt encore on demande en fait a cat de recopier dans le fichier encore ce qu il a lu dans le fichier variables realisant ainsi une copie de ce fichier
255. la valeur de l l ment d indice 0x 0 du vecteur data En pratique pour d marrer du code machine il faut que le registre PC soit initialis avec l adresse origine 0x50 partir de l la proc dure ci dessus peut tre reformul e en PYTHON Op data PCIPCHZ PC 2 exec opcode table op 1 replace 7 8tr arg Notez la conversion de l op rande arg en chaine pour pouvoir l ins rer la place du It rer ces 3 instructions constitue donc le c ur du s quenceur notez que le registre PC est incr ment aussit t apr s le d codage ce qui garantit un s quencement correct dans tous les cas y compris ceux de branchement puisque l instruction ex cuter aura le dernier mot ce stade r aliser le programme revient d finir en 5 lignes une fonction run qui prendrait comme argument l adresse origine du programme muler et tournerait ind finiment en it rant les trois instructions que nous avions list es plus haut PROTOTYPAGE D APPLICATIONS 137 def while True Op arg data PC PC Z2 PC 2 exec opcode table el op l repltace Ty Str targ Et ceci satisfait pleinement le cahier des charges pour l exercice px34 1 Mais le probl me c est que mises part les instructions out nous n aurons aucun feed back du d roulement de l ex cution sachant que par ailleurs aucun des programmes simul s n a pr vu de s arr ter avorter obligatoirement p
256. le dans l approche proc durale on a m me vite fait de s apercevoir qu une s quence peut elle m me tre constitu e de multiples sous s quences impliquant l id e de r p tition et du m me coup de g n ralisation Ce dont je vais faire ici la d monstration ne peut fonctionner correctement que si vous avez suivi scrupuleusement les consignes donn es dans la section 5 2 du document de prise main en particulier si vous avez bien install le paquet python tk pour le savoir essayez ce qui suit Si ce n est d j fait ouvrez une fen tre de terminal lancez PYTHON File Edit View Terminal Help puis comme ci contre tapez l instruction python Python 2 6 5 r265 79063 Apr 16 2010 13 09 56 GCC 4 4 3 on linux2 Type help copyright credits or license for more informatioin from turtle import gt gt gt from turtle import en respectant bien s r les espaces entre les mots Ex cuter cette ligne ne provoque aucune r action apparente ce qui ne veut pas dire qu il ne se passe rien en fait si l importation chouait il y aurait un message d erreur s il n y en a pas c est que jusqu ici l interpr te a bien compris ce qu on lui demandait et a fait son boulot sans baver ce stade pour aller plus loin il faudrait savoir quelles fonctions File Edit View Terminal Help i h sont disponibles dans ce module et a quoi elles servent elles sont python 2 6 5 r265 79063 Apr
257. le un type MIMEZ un standard pour caract riser le contenu du fichier il existe actuellement 96 types de textes et tant qu il s agit de texte ca a un sens d en indexer le contenu Mais l indicateur CONTENT nous r v le aussi le CHARSET autrement dit l encodage du fichier et ici nous allons retrouver le vieux probl me de la mondialisation de l informatique les multiples mani res de coder les caract res D tecter l encodage d une page wEB serait donc juste affaire de trouver l endroit o se trouve l indicateur CHARSET dans notre cas la ligne 14 puis d extraire l information un petit moulin de 3 instructions devrait faire le boulot der get Charset url for line in urlopen url if line find meta lt continue x line find charset if not x lt 0 return line x len charset 2 22 MIME multipurpose internet mail extensions cf http www webmaster toolkit com mime types shtml 11 11 23 22 10 2007 2012 par J Feat 98 FORMES ET TRANSFORMATIONS Comme on l a d j vu plus haut la m thode find appliqu e une chaine retourne la position ou se trouve la sous cha ne recherch e ou la valeur 1 si elle ne s y trouve pas donc la boucle for dans cette fonction get_charset doit explorer chaque ligne contenant un tag META en fait il y en a plusieurs et retourner le CHARSET trouv Et en effet l expression get_charset http www iedparis8 net ied retourne l in
258. lement cette ligne print h mais ce script aussi tourne comme il faut n on peut aussi bien l ex cuter avec ruby essaye h mais ce script aussi tourne comme il faut perl essaye h mais ce script aussi tourne comme il faut D ailleurs m me pour un script autonome conforme aux 3 principes ci dessus il reste toujours possible de le lancer en sp cifiant l interpr te de l ext rieur cette solution permet de sp cifier des param tres qui modifieraient le comportement de l interpr te exemple un script PYTHON nomm zut normalement utilis comme z t D c pourrait aussi tre lanc par la commande Python zut a bc qui force PYTHON passer en mode interactif une fois l ex cution termin e ce qui nous permet d examiner les valeurs des variables ou de faire des tests compl mentaires notons que ceci ne contrarie absolument pas le m canisme de passage d arguments zut les verra de la m me fa on que s il avait t lanc en autonome 54 http how linux works org ua 8760final lip0143 html GLOSSAIRE 167 R CAPITULATION Ce chapitre fait de bric et de broc n a jamais t qu un fourre tout commode pour noter en dur un certain nombre de pr cisions qui ont fait sur le forum l objet de demandes d claircissements alors videmment il n est pas ais de les int grer au cours proprement dit sans risquer de l alourdir donc d en g ner la lescture consid rez les donc comme
259. liste PATH e df disk free espace libre sur disque LES PROCESSUS e ps process status liste le n d identification des processus en cours e kill stoppe un processus LE R SEAU e netstat NETWORK STATUS e ping renvoie l cho d une autre machine du r seau e ssh SECURE SHELL LOGIN permet la connexion une autre machine Pour plus ample documentation consulter le man de chaque commande Vous pouvez galement utiliser les ressources du www pour collecter les documents qui vous int ressent titre indicatif r f rence des commandes linux PDF 1527 pages http fuerteventura losaloes apartamentos com Linux 20Command 20 pdf description de 687 commandes par ordre alphab tique HTML http www oreillynet com linux cmd man pages au format HTML http linux die net man 11 11 23 22 10 2007 2012 par J Feat GLOSSAIRE 163 9 4 PROGRAMMATION SHELL Cette section n a pas l ambition de vous apprendre programmer en SHELL il faudrait pour a un manuel entier Nous ne ferons ici que reprendre quelques probl mes qui se posent au d butant en particulier les probl mes qui ont t soumis sur le forum Le premier est celui de la cr ation d une archive en vue de soumettre en un seul paquet bien ficel une s rie de 3 exercices dont vous avez conserv la solution dans les fichiers suivants python sessions px99 1 txt python sessions px99 2 txt python sessions px99 3 txt autrement di
260. lt s quence gt lt fais ca avec gt x Le m canisme mis en uvre ici va se charger de scanner plucher la sequence de gauche a droite en s arrangeant pour que la variable x prenne chaque fois pour valeur l l ment courant de la sequence Essayez cette application triviale For x n ONCE 2 X Voyez vous comment l instruction print s est vu passer chaque fois un argument diff rent Et comment elle s arr te automatiquement une fois la s quence puis e Essayez quelque chose d un peu plus complexe qui affiche le code de chaque caract re c est dire sa repr sentation interne tor x an SNCF print ord x Ce programme d une ligne nous en apprend beaucoup sur ce qui Se passe dans les cuisines du palais il semble que depuis le debut on nous fait croire que nous manipulons des caract res alors qu il s agit purement de codes numeriques interpretes en contexte comme des symboles de notre alphabet En fait le roi est nu Mais la est la puissance de l outil informatique tout est virtuel et tout est interpr t de sorte que nous puissions l adapter a la representation de ce qui nous int resse Ici reside le bien fonde des types de donn es un nombre entier par exemple n est jamais qu une interpretation une representation sous forme de symboles num riques familiers d un codage en r alit faits de bits c est dire de la juxtaposition des tensions lectriques de minuscules elements lectr
261. lue et executez le code ci dessus o la constante 100 serait remplac e par la variable taille pour repartir d une fen tre propre appelez clear ou reset appeler help turtle pour plus d information px06 2 coder une fonction binaire qui accepte deux arguments une valeur num rique la taille et une chaine la couleur et qui trace un carre de cette taille et de cette couleur Le carr n est jamais qu un cas particulier de polygone pour que les 4 traits se rejoignent l angle est 90 mais qel serait l angle pour tracer un polygone a 3 c t s Pouvez vous g n raliser pour le trace d un pentagone hexagone et ainsi de suite jusqu au dodecagone px06 3 coder une fonction g n rale polygone qui peut tracer un polygone quelconque de taille quelconque et de couleur quelconque le nombre de c t s tant param tr la fonction devrait donc aussi pouvoir faire entre autres un carr ou un triangle Ces polygones sont dit convexes simples mais il en est d autres dont les c t s se croisent comme l toile ci contre quel serait l angle chaque pointe d une toile 5 pointes Peut on g n raliser pour n importe quel nombre de pointes Que se passe t il pour un nombre pair de pointes px06 4 coder une fonction g n rale star qui peut tracer une toile quelconque de taille quelconque et de couleur quelconque et un nombre de branches quelconque mais sup rieur 4 2 5 NOTION DE M THO
262. lui du wiki de MANDRIVA mais tester aussi le programme avec plein d autres URL px29 2 X adapter le script px29 1 pour qu il puisse non seulement indexer une page WEB quel que soit son codage mais aussi pour qu il construise automatiquement la liste des liens HTTP mentionn s dans la page et indexe galement leur contenu quelqu en soit le codage toujours et bien entendu pr voir l architecture du programme pour qu il soit ais de le faire voluer en vue de traiter galement les liens r f renc s par les pages li es 24 lt http docs python org library stdtypes html str encode gt voir aussi lt http docs python org library codecs html module codecs gt 25 sauf bien s r MICROSOFT INTERNET EXPLORER 26 exception faite des textes en ut 8 BOM o le BYTE ORDER MARK constitue les deux premiers octets du fichier 11 11 23 22 10 2007 2012 par J Feat 100 FORMES ET TRANSFORMATIONS 6 5 R FLEXIONS Si maintenant je reprends de l altitude je constate que partant d un flux s quentiel j ai fini par aboutir par une transformation complexe une information structur e de type dict constitu e d objets de type str int grant 3 niveaux et de listes list d objets de type int flux s quentiel stream dict str int int int texte ligne mot caract re bit donn es d entr e donn es de sortie texte index Ainsi l art de programmer c est l art de
263. lus haut je pourrais l ex cuter tout pareil sans m me avoir le marquer ex cutable ni sp cifier quoi que ce soit sur sa premi re ligne en invoquant directement l interpr te bash teste moi NOTES Il existe en fait plusieurs centaines de commandes dont il n est pas question de faire ici le catalogue e certaines comme cd ou pwd sont dites intrins ques parce que pr d finies dans le langage de SHELL lui m me e mais la plupart des commandes sont extrins ques ce sont en fait des extensions du SHELL sous la forme de programmes autonomes qui r sident sur le disque dans un espace r serv espace d fini en terme de chemins d acc s par la variable d environnement path vous pouvez ainsi rajouter les commandes que vous voulez On se contentera donc d un bref survol de quelques commandes simple aper u vu d avion des ressources d un syst me a unix LE TEXTE e gedit gnome editor l diteur de texte dans l environnement GNOME ed edit un diteur de ligne adapt pour du texte vi visual interface to ed l diteur de texte fourni en standard emacs editor macros diteur en volution depuis 1970 avec interpr te LisP int gr gcc gnu compiler collection convertit du code source en code ex cutable LES FICHIERS e grep global regular expression print e locate localise recherche un fichier sur le disque voir aussi find e which quel recherche un fichier dans la
264. me suffira si elle est valide de la substituer au tiret correspondant e le jeu est termine des que toutes les lettres ont t devin es Pour la convivialit de l interface je pr vois l affichage du mot deviner avec ses tirets l affichage du nombre d essais restants l affichage du mot qu il fallait deviner un bouton pour arr ter ce jeu idiot un bouton pour recommencer ce jeu fascinant QU P ah ES Les trois premiers objets seront instanci s par des objets de la classe label et les deux derniers par des instances de Button Le dessin du pendu se fera obligatoirement dans une instance de Canvas que j appellerai tout simplement c Je vais d finir 6 variables globales e mots la liste des mots possibles 38 cf random choice la section 9 1 2 modules d usine PROTOTYPAGE D APPLICATIONS 121 mot celui qui sera tir au hasard taille celle du mot dont j aurai besoin plusieurs occasions trou le caract re choisi pour repr senter une lettre manquante devine la repr sentation interne du mot deviner P comme pendaison la liste des actions du bourreau Mon interface sera compos e de quelque sept objets top le master widgeft instance de Tk c l espace de dessin instance de Canvas LT comme Label des trous actualis chaque tour LM comme Label du mot initialis avec une chaine vide ce n est qu la fin du jeu qu il sera v ritablement actualis avec le mot qu il fallait devine
265. ment ces m thodologies n am liorent pas le rendement des quipes de d veloppement de mani re vraiment significative Agile comme Extreme Programming xP ou Joint Application Development JAD de m me que Lean Software Development Lb Rapid Application Development RAD ou Scrum toutes se heurtent un obstacle majeur aucune de ces m thodologies ne tient compte la personnalit du programmeur ni des aspects psychologiques de son int gration au sein d une quipe elles ne conviennent donc vraiment qu certains cas particuliers notamment le cas de celui qui a pris la peine de l laborer Mais dans leur principe elles ont quelque chose de bon 1 elles sont minimalistes elles sont r ductrices mais dans le bon sens du terme autrement dit simplifiantes tout en pr servant la capacit de r cup rer ult rieurement la complexit 2 elles donnent priorit la mod lisation du probl me partir de ses donn es c est dire qu elles en privil gient l aspect DECLARATIF minimisant ainsi l aspect IMP RATIF de la programmation elles sont d ailleurs toutes orient es objet 3 elles privil gient le d veloppement incremental visant produire aussi vite que possible un prototype incomplet perfectible mais suffisant pour servir de base la discussion avec le client consid r comme faisant partie de l quipe de d veloppement En fait elles correspondent un besoin du march l industrie est
266. ment une instance de cette classe Une instance n est pas une variable et ne peut donc prendre directement de valeur mais on peut y d finir des attributs ou propri t s qui se comportent comme des variables propres l instance ou la classe self stack est un exemple typique d attribut local l instance cr par d clenchement automatique de la m thode inii au moment de l initialisation Quand une m thode nomm e init est d finie pour une classe elle est automatiquement invoqu e au moment de l instantiation de cette classe ainsi donc si j value maintenant p p est maintenant une instance de Stack l instance p a automatiquement t pourvue d un attribut stack initialis comme une liste vide par la m thode __init__ la preuve gt gt gt T instance de Stack dans le module __main__ lt main stack instance at 0x5f9b585 gt gt gt p stack valeur de l attribut stack de p Maintenant valuez interactivement ces quelques lignes for x iff um deux trois sSpliti p pushix b stack un deux trois x ppop 2 x p stack trois un deux Xx f posteck deux un pour avoir le FEELING de comment a marche notez qu on peut aussi quand on conna t son nom manipuler directement la d finition de l attribut par exemple valuer p stack l chose px30 2 d finir la classe Stack et une instance d i
267. mme en LISP il n y a pas de difference formelle entre donn es et code ex cutable c est juste une question de point de vue d interpr tation d ailleurs incidemment comme en tous les objets manipul s en PYTHON sont des r f rences 7 3 STRUCTURES DE CONTR LE Comme on l a dit au d but un programme est une s quence d instructions en tout cas pour les langages proc duraux il est vrai que LISP SQUEAK OU PROLOG se pr sentent diff remment Admettons que pour ce qui nous occupe la s quence soit la forme la plus primitive de programme une s quence est en principe valu e dans l ordre ou elle se pr sente Et ca il y a des fois ou ca ne nous arrange pas il viendra un moment o le programme devra d cider tout seul en fonction de l tat des donn es ce qu il convient de faire et c est pour ca que nous avons introduit l ex cution conditionnelle aussi appel e branchement dans le sens de bifurcation on peut ainsi sauter une ou plusieurs instructions de la s quence si une certaine condition n est pas satisfaite Mieux encore au lieu de tester explicitement des conditions il est possible de sauter une instruction dans le cas o elle provoquerait une erreur il suffit d essayer et si ca ne marche pas on fait autre chose c est la gestion d exception qu on retrouvera en LISP avec catch throw et en OBJECTIVE C OU c avec try catch Et puis nous avons vu le cas ou certaines parties de la
268. mpris basculer second en not second c est dire True si second est True alors manager doit o utiliser les coordonn es m moris es et les nouvelles coordonn es pour appeler dessine de sorte que le rectangle soit effectivement dessin en fonction des deux derniers points de clics o A basculer second en not second c est dire False Ainsi manager n appellera effectivement dessine qu une fois tous les deux clics 5 6 ANIMATION DE SPRITES Ce petit programme anime un sPRITE un objet pr dessin dont la position pourra ici tre chang e au moyen de boutons de commande Toute l astuce se trouve dans la d finition de la fonction avance o sache C est une instance de Canvas dans laquelle a t cr un objet a nomm boule p p CS MANUELLE cent la m thode coords a pour effet de changer les coordonn es de boule et donc la d place effectivement Autrement dit une expression comme touts boule X Y X D D stop redessine la boule rouge en red finissant le rectangle implicite dans lequel la boule est incluse Le programme se laisse d composer en quatre parties qui apparaissent en fait l envers pour des raisons techniques expliqu es plus bas 4 Les widgets sont les instances d objets graphiques qui permettent de construire l interface le widget ma tre appel ici top dont d pendent tous les autres widgets le widget C instanc
269. n 1 20 uniform resource locator localisateur uniforme de ressource 11 11 23 22 10 2007 2012 par J Feat 96 FORMES ET TRANSFORMATIONS from dexlex import indexe prd module d indexation from sys import argv pour lire les arguments from urllib import urlopen modif def pilote f X URL ou nom de fichier dictionnaire url f if f startswith http else None modif flux urlopen f if url else open f modif for n texte in enumerate flux on a besoin den X indexe X texte split url or 1 modif flux close c est fini return X if len argv gt 1 gt prd pilote argv l1 l l argument sur la LDC else exit arg manquant fichier ou url C est maintenant que se justifie la mise en ceuvre d une sioplist ou d une golist testez naivement le programme sur la page WEB ouverte ci dessus et vous admettrez que le code HTML est un peu encombrant sauf bien sur si ce sont justement les balises ou tags HTML qui nous interessent Et pourquoi nous interesseraient elles les balises Parce que justement si un CRAWLER doit indexer les pages WEB r f renc es dans la page d j ouverte il faut bien qu il y recherche les tags HREF et plus pr cis ment l URL qu ils sp cifient Un lien HREF aussi appele hyper lien se presente sous la forme d une chaine preced e de HREF dans une balise lt A gt ou une balise lt LINK gt par exemple lt a href http docs pyt
270. n binaire cod en compl ment 2 des valeurs num riques enti res OP RATION N GATION CONJONCTION DISJONCTION EXPRESSION 0 1 080180 0 amp 1 1 amp 1 010 110 011 111 VALEUR 1 1 1 1 1 L op rateur fonctionne comme un inverseur et l op rateur amp peut se comprendre comme une multiplication bit bit Pour plus de d tails voir le manuel de r f rence du langage la section 3 4 UNICODE nous avions vu que la diff rence entre majuscule et minuscule d pendait de la valeur du bit 5 autrement dit le 6 en partant du bit le plus droite de la repr sentation binaire du caract re si ce bit est 0 c est une majuscule alors que si c est 1 c est une minuscule Par exemple le caract re ASCII est repr sent par le code 6510 ou 4116 ou 010000012 alors que son homologue minuscule est repr sent par 9 10 OU 6116 autrement dit 01100007 caract re base 10 base 16 base 2 A 65 41 01000001 a 97 61 01100001 gt gt gt chr int 01000001 2 conversion base 2 base 10 caract re TAT gt gt gt chr int 01100001 2 f conversion base 2 base 10 caract re Voici donc comment convertir de minuscule en majuscule avec un and binaire gt gt gt shr ord a amp 0x20 0501100001 0611011111 VAI Cette expression peut para tre complexe au premier abord mais elle ne fait qu op rer une c
271. n ce point abc terminologie ici remarquons que certaines commandes doivent tre suivies de quelque chose et d autres non Ce quelque chose est appel argument de la commande en effet les commandes sont des fonctions au sens mathematique du terme c est dire qu elles effectuent une op ration ont un effet et retournent une valeur qui est fonction de l argument qu on leur a donn qui lui m me d pend du contexte d ex cution En ce sens la fonction pwd n est pas une exception elle n a simplement pas besoin d argument parce qu elle op re directement partir du contexte courant en fait elle peut effectivement prendre un argument qui modifie son fonctionnement mais n anticipons pas Et puisqu on parle d op rer remarquez qu il y a la m me relation entre un op rateur et ses op randes qu entre une fonction et ses arguments valeur effet dans le cas des commandes SHELL la valeur retourn e par la fonction n appara t jamais par contre son effet est souvent vident mais pas toujours Les commandes mkdir ou cd par exemple n ont pas d effet directement visible puisque si tout se passe bien elles op rent silencieusement mais en cas d erreur elles afficheraient Un bref message pour expliquer pourquoi elles ont failli et ce serait l leur seul effet directement visible En principe une fonction retourne toujours une valeur mais n a pas forc ment d effet on y reviendra 9 3 3 LES COMMANDES INDISPENSABLES Dire d
272. n de pr fixer quoi que ce soit Mais il faut tre prudent car dans ce cas il se peut qu un nom import remplace un nom d fini dans votre programme ou l inverse a d pend du point ou se fait effectivement l importation Si le module est importe tout en haut du script il est possible de modifier par m garde une d finition de fonction ou de variable Si au contraire vos d finitions pr c dent l importation il est possible que soit celles du module qui supplantent les v tres C est pour a qu il existe encore une 3 syntaxe qui permet de n importer que les noms que vous voulez rendre accessibles sans pr fixe from plusieurs import pluriel En fait je ne sais pas ce qu il y a dans le module plusieurs mais ce dont je suis s r c est que je n aurais jamais besoin d utiliser directement les variables qui listent les exceptions utilis es par la fonction pluriel Et pour le cas o le nom pluriel lui m me entrerait en conflit avec une de mes d finitions locales il est encore pr vu une 4 syntaxe from plusieurs import pluriel as multiple qui d finit implicitement un synonyme de la fonction pluriel ce qui veut dire qu en valuant multiple trou j obtiendrai tout pareil la valeur trous En fait a revient exactement au m me que si j avais cod import plusieurs multiple plusieurs pluriel sauf que c est automatique Remarquons au passage que les symboles globaux d un module ne sont acc
273. n effet il ne serait pas possible d exprimer la chaine d hui parce que le deuxi me guillemet serait consid r comme fermant le premier et le reste n aurait bien s r aucun sens e La quatri me est une erreur lexicale remarquez que jusque l nous n avions utilis que des constantes litt rales autrement dit des symboles dont la valeur est donn e litt ralement ils ont leur propre valeur on les prend au pied de la lettre et ils s valuent eux m mes Une chaine est un litt ral un nombre est un litt ral Mais dans ce contexte a et b sont des symboles inconnus de l interpr te et utiliser des symboles non d finis au pr alable ca n a pas de sens l interpr te ne sait pas valuer une telle expression Remarque l interpr te PYTHON int gre en standard un diteur de texte rudimentaire sans rentrer dans les d tails sachez que vous pouvez retrouver la ligne que vous venez d entrer en pressant la touche curseur haut vous avez alors le loisir de la modifier avant de la renvoyer SYMBOLES ET VALUATION La d finition de nouveaux symboles est une op ration fondamentale pour le programmeur elle lui permet de cr er des abstractions en l occurrence des objets qui en repr sentent d autres Essayez a 2 b 3 a b Un tel objet est appel variable sa valeur peut varier et sert m moriser un certain tat pendant le d roulement du programme si maintenant j essaye d valuer a b l interpr te
274. n fait il y a bien plus simple il suffit de cr er un ensemble puis de tester l appartenance cet ensemble Testons en le principe interactivement avec l interpr te o in aeyuio oui p in aeyuio non p y Maintenant qu on est s r que a marche nous pouvons le coder sous la forme d une fonction def voyelle x if x in aeyuio return True return False MANIPULATION DE S QUENCES 33 Ceci montre qu en mati re de traitement de donn es il y a souvent plusieurs fa ons de faire dont certaines plus co teuses que d autres Ici a parait vident mais a ne le sera pas toujours La question de par quel bout attaquer un probleme est non triviale et demande r flexion On reproche souvent aux d butant de se pr cipiter sur leur clavier sit t le probleme pos et il y a des chances pour que la complexit de leur solution soit inversement proportionnelle au temps de r flexion Bon a va mieux mais suis je vraiment certain qu on ne peut pas faire encore plus simple Si je me pose la question c est parce que je sais que plus gros est le code plus grands sont les risques d erreur les statistiques montrent qu un programmeur professionnel n crit en moyenne par jour que 20 lignes de code sans erreur Par jour Et l je m aper ois que ma definition est terriblement redondante la valeur de l expression qui me sert de condition est pr cis ment la valeur que je retourne J en ai crit 3 fois trop pour
275. n http sedition com perl rgb html 5 3 ENTRY Nous allons maintenant cr er une interface minimale pour une calculette capable tk 2 d effectuer n importe quelle op ration math matique incluant les fonctions tanh 0 4 logr2 exp ay transcendantes comme l exponentielle le logarithme ou le cosinus hyperbolique 0 414458728323 Le truc consiste exploiter la capacit de PYTHON valuer du code la vol e puisque la fonction eval accepte une cha ne de caract res et calcule la valeur qu aurait cette expression si on l avait entr e directement sous l interpr te Pour que l utilisateur puisse entrer l op ration effectuer nous aurons besoin d un widget de type Entry alors que le r sultat du calcul sera affich dans un widget de type Label Pour afficher ce r sultat nous d finirons une fonction valeur dont le boulot peut tre d compos en ces quatre tapes r cup re avec la m thode gei le texte de l expression tap e dans express le widget Entry value cette expression avec eval pour produire une valeur num rique convertit ce nombre en texte avec str passe ce texte val le widget Label pour l afficher comme r sultat Ce dernier point demande une explication on a vu comment on pouvait d finir le texte d un objet de type Label sa cr ation mais comment faire pour changer ce texte apr s qu il ait t cr La r ponse est la m thode configure qui prend comme
276. n sa valeur Tester la pr sence d un element dans un dictionnaire se fait avec l op rateur in ou la m thode has key comme dans l exemple suivant picier in emplettes True empletres has key l picier True Pour afficher proprement la valeur d une donn e structuree complexe liste dictionnaire on aura recours au module pprint from pprint import pprint charge la fonction de pretty printing pprint emplettes Attention un dictionnaire n est pas une sequence mais une simple collection et a ce titre il n est pas iterable a proprement parler Cependant et c est coherent avec le predicat ci dessus l emploi de l op rateur in est possible dans une expression iterative mais ce sur quoi on itere n est pas le dictionnaire lui m me c est la liste non ordonn e des cl s d finies gt gt gt x for x in emplettes picier superette boulanger D ailleurs on peut obtenir directement avec la m thode keys la liste des cl s d j d finies dans un dictionnaire donn emplettes keys picier superette boulanger emplettes boulanger keys baguettes Enfin pour d truire un l ment on valuera par exemple del emplettes superette instruction utilis e pour son effet pas de valeur emplettes keys picier boulanger ce qui montre bien que superette n est d sormais plus d fini dans le dictionnaire Et maintenant
277. ncompr hensible sommaire O fondements interaction avec le syst me 7 0 1 utiliser l interpr te python 8 0 2 Utiliser les fonctions d un module import 9 0 3 programmation en pas pas eT 10 0 4 odito avec deg NEE de aad cna aan en 11 0 5 le mode imp ratif 11 0 6 pour commencer avec a a nee ee eo ee 11 D donn es l mentaires sux caen oe c aen E CC Eb SO E Uc 8 e o acc E Re d o DE e c aeo aar Eno Re Uc Ea e e 13 D manipulation de s quences e PE opener 25 3 listes acc s index Weit dod wipe de Ex vba Dead aequ exa Uta dad Vut dd duas ated da a 41 4 dictionnaires acces par CE beau DI REM ERE ae 57 interfaces fen tres et boutons aeedueeetesroeuseseiusestuieusessese 73 6 architecture de programmes 87 D infrastructures logicielles A E RE AURA 103 prototypage d applications 115 9 cial de TTL 143 Tale gt c E 168 glossaire HUE 171 tabl des Mati res pia ve tre acia E ono eb anb eoe rb ru vule fO cebat LE E eu panda 17
278. ne fonction suppl mentaire permet de saisir la requ te et de retourner la liste des pages pertinentes Tout ceci est presente de fa on extr mement simplifi e mais il est tout a fait possible selon ces principes de realiser un prototype operationnel En definitive cote serveur un moteur de recherche destine a trouver du texte sur une page WEB serait constitu de trois composants quelques lignes de code pour ouvrir et lire une page wEB la vol e 2 fonction qui condition que le type MIME de cette page soit bien TEXT HTML indexe la page et unifie le codage des mots selon un d nominateur commun par exemple le polyvalent utf 8 une fonction qui construit la liste des liens disponibles sur cette page pour qu on puisse recommencer l tape 1 pour chaque lien C t client les choses ne sont gu re plus complexes 1 un bout de code pour saisir la vol e les mots recherch s la requ te ou QUERY 2 une fonction pour collecter les pages index es pour ces mots une fonction pour presenter la liste des pages r pondant a la requ te 6 4 1 C T SERVEUR Lire une page WEB n est gu re plus difficile que lire un fichier il suffit d ouvrir un flux pour un URL particulier et non pour un fichier local L ouverture d un URL est analogue celle d un fichier ceci pr s qu au lieu de open c est la fonction urlopen qu il faut utiliser comme argument on lui donne une chaine celle l m me qu
279. nes structures de contr le en particulier toutes celles qui rel vent d une approche fonctionnelle de la programmation aspect qui sera de toute fa on tudi en d tail dans un cours specialise 7 4 OBJETS Mais il est une autre fa on d aborder la programmation c est l approche par objets qui permet une autre fa on de structurer les donn es que manipulent les programmes et du m me coup une autre fa on de contr ler le d roulement de ces programmes M CANISME D H RITAGE Le point fort des langages objets c est que les types de donn es sont eux m mes des sous types d objets plus abstraits L int r t d une telle architecture hi rarchique est qu il est alors possible de d finir des propri t s des comportements un niveau abstrait sachant qu on dispose d un m canisme d h ritage qui permet au sous type concret d exploiter les modalit s de comportement d finies plus haut dans la hi rarchie Par exemple toutes les s quences se comportent de la m me fa on que ce soit des listes ou des chaines de caract res elles exploitent ainsi en commun un certain nombre de m thodes 325 de Ly 2 ly retourne la valeur 3 il de b uf count retourne la valeur 2 fonctionnent de mani re similaire retournant le nombre d occurrences de l l ment donn comme argument la m thode count m thode applicable toute s quence Pour le programmeur a veut dire moins de code cri
280. ni re d acc der aux donn es si plus tard je d cide de changer la structure des donn es adapter le programme entier cette nouvelle structure ne requiert que la red finition de ces fonctions d interface PROTOTYPAGE D APPLICATIONS 139 def segment offset name i return segment table name orfrfset segment code name i return segment tabl l name code Lancer le programme c est charger le code muler puis appeler le s quenceur def simul new un nom de nouveau segment for seg in boot strap loader new segment Lablelseg read Nhexcode seq FE load image seq run segment OITSet new Remarquez que pour me conformer au cahier des charges j installe obligatoirement comme premier segment le boot strap loader avant de charger le v ritable segment muler J ai ajout en fin de script ce qu il faut pour le rendre autonome il faut donc l appeler en lui passant comme argument le nom du fichier contenant le code muler La fonction read_hexcode s attend ce que le fichier soit de la forme offset 30 code 10 3A 00 31 40 32 60 33 48 32 49 33 40 33 22 FF 12 34 41 32 10 44 L exemple ci dessus est celui du 13 8 les sauts de ligne n ont pas d importance les tabulations non plus puisque de toute facon split les confond avec les espaces le fichier peut donc tre formate comme on pr f re l important tant qu on n y introduise pas d erreur Pour vo
281. nn e 1945 Cette liste a deux l ments une chaine et un nombre entier Pour en extraire l ann e l l ment de rang 1 il suffit de demander ann e 1945 1 1945 Notons que a marcherait aussi bien avec des variables on peut ainsi crire date ann e 1945 x 1 date x 1945 Parce qu une liste est une s quence on peut it rer sur cette s quence pour acc der chacun de ses l ments successivement et on peut le faire en s quentiel aussi bien qu en index for d in date print d acc s s quentiel aux valeurs for x in range len date print date x acc s index aux valeurs Ceci dit une liste peut aussi contenir des listes date ann e 1945 mois octobre jour 15 La liste date a trois l ments qui sont des listes et chaque sous liste a deux l ments Pour extraire par exemple le jour du mois il me faudra coder date 2 1 l ment d index 1 de l l ment d index 2 Il n y a pas de limite la longueur des listes ni leur profondeur On peut donc s en servir pour repr senter n importe quelle information structur e emplettes boulangerie baguettes 3 croissants 6 superette yaourts 2 autres trucs 4 Cette liste de profondeur 3 est la repr sentation en machine de ma liste de courses faire boulangerie baguettes croissants superette yaourts 122 autres trucs 4
282. nnaire vide appel m comme m moire qu on remplira instruction par instruction comme ci dessous m d part a vide m 2997 1 1 1000 d finition du r initial I1 2 10201 d finition du diviseur i 3005 Z 2000 1000 1010 n r 0120091 2000 1010 LOLO r n r m 3013 I2 1010 1020 1000 r n r 2 m 3017 3 3005 branchement Remarquez ici que e il ne serait pas possible d ajouter une cl un dictionnaire qui n existe pas e a cl d acc s aux donn es d une instruction est l adresse de cette instruction e les donn es des instructions sont m moris es sous forme de listes DICTIONNAIRES ACCES PAR CLE 69 e certaines instructions n utilisent pas vraiment 4 octets ce qui permet d en simplifier la representation e les deux premieres instructions devraient manipuler des nombres reels sinon en 3005 et 3013 les divisions seraient entieres Il va nous falloir aussi simuler le registre pc comme PROGRAM COUNTER qui devra contenir au d part l adresse du d but du programme c est dire 2997 On va lui aussi l int grer aux donn es de m rien que pour garder ensemble tous les l ments de la simulation m pc 2997 ce stade notre dictionnaire m contiendrait donc 2997 f Ils d 1000 SOUL T II 2 20207 3005 2 2000 IUUD 3009 4 2000 1010 TITOLO 3013 d 1010 1020 JI0907 3017 2 fo 300517 ge x 2997 Notons que comm
283. nous pouvons nous dispenser pour le moment de connaitre les d tails d autant su on peut tout moment consulter le manuel en ligne avec man Mais ne perdez pas de vue que t t ou tard on aura besoin faire des manipulations dans le terminal il sera toujours temps alors de reprendre ce chapitre et d en assimiler le contenu au fur et mesure des besoins COPIE DE FICHIERS CP La commande cp abr g pour copy prend au moins deux arguments la source et la destination il faut bien s r avoir le droit d acc s en ecture pour la source et le droit d acc s en criture pour la destination On peut copier plusieurs fichiers en en donnant la liste ou en les sp cifiant avec des wildcards De plus je peux utiliser la sp cification vue plus haut pour dire que c est l ou je me trouve pwd que je veux copier On comprend maintenant l int r t d acc der des fichiers en sp cifiant leur chemin d acces je vais ainsi pouvoir copier chez moi un fichier qui se trouve ailleurs dans une tout autre branche par exemple celle d un 11 11 23 22 10 2007 2012 par J Feat DOCUMENTS ANNEXES 157 autre utilisateur qui m autorise regarder le code source de son programme D PLACEMENT DE FICHIERS MV La commande mv abr g pour move prend au moins deux arguments la source et la destination il faut bien s r avoir le droit d acc s en ecture pour la source et le droit d acc s en criture pour la destina
284. ns un argument le mot redessiner les segments pour produire le v ritable effet LCD tel que ES La m thode utiliser n est plus create line mais SEC NE create polygon qui attend les coordonn es des sommets du polygone ici 6 sommets par polygone et referme automatiquement le polygone en joignant le dernier point au premier voir l exemple de la fonction fais x dans le code du MORPION la section 8 3 4 les afficheurs LCD r cents disposent de segments suppl mentaires pour repr senter par exemple le point ou l apostrophe et autorisent une plus grande latitude pour placer les segments de sorte qu on puisse distinguer le B du 8 ou le A du R tudier la faisabilit de telles modifications au programme et les r aliser 11 11 23 22 10 2007 2012 par J Feat 120 FORMES ET TRANSFORMATIONS 8 2 PENDU On me demande de r aliser une tude de faisabilit pour un jeu de pendu la r gle est que le joueur a droit un total de 10 coups pour retrouver toutes les lettres d un mot deviner faute de quoi il sera virtuellement pendu ANALYSE DU PROBL ME La premi re question que je me pose c est qu est ce que je dois repr senter et de quelles donn es vais je disposer Et ici il y a deux choses l interface de l application et la donn e des mots connus par le programme parmi lesquels il choisira au hasard Une diff rence majeure avec l application pr c dente affichage
285. nt faire les graphes propos s dans le cours de math matiques si j y sugg re de convertir le code ANSI C en PYTHON c est parce que c est ce qu il y a de plus facile pour tirer profit de l exp rience acquise au long des chapitres 7 et 9 du cours d introduction l alternative pour ceux qui en auraient le temps serait d apprivoiser un autre syst me graphique utilisable directement en ANSI C donc de conserver tels quels les programmes ANSI c d j cod s l existe une 3 route qui permettrait de pr server le code ANSI C en le compilant sous la forme d un module PYTHON donc de persister avec Tkinter petit probl me c est une manipulation que nous n apprendrons faire que dans l avant dernier chapitre de l c 213 donc vers la fin du 2 semestre sommaire O fondements interaction avec le syst me ee 7 D donn es l mentaires 13 D manipulation de s quences ee ee E 25 listes acc s index are Dane tonne Cae xe PE Ed dad wars eia 41 4 dictionnaires acces par CS TETTE 57 interfaces fen tres et boutons eee RI K HH 73 6 architecture de programmes eeeeee cette mH nnn 87 D infrastructures logicielles E E E E E gues 103 prototypage d applications 115 O ANG D s sc epee eet ate Curr beret 143 9 OS Tm 144 9 2 indentation
286. nt vertical 3 Gay X0 195 segment vertical 4 60 15 60 551 segment vertical 5 60 65 60 105 segment vertical 6 description des lettres en termes de leurs segments description D UL oe 2 Z1 PET Un Se Be 1 4 U s Lee 42 Dj Sy 211 F ete construction des widgets from top caneva caneva dess offset ep 1 couleu decal for K les Or kinter import Tk s Canvas top height 150 width 400 des segments 70 0 poe alge attention une cha ne dans une chaine 20 in PULL _ segments description K les segments pour chaque caract re SG in les segments S segments SG les coordonn es pour chaque segment X1 repr S 0 decal Y1 repr S 1 maintenant translate les abscisses X2 repr 5 2 decal Y2 repr 5 3 args 98 185 ws ea Xl Yl X2 X2 les args pour create line args width s fill s repr ep couleur eval canevas create Iine 5 args decal offset top mainloop EXTENSIBILIT px31 1 px31 2 px31 3 augmenter le dictionnaire description pour pouvoir afficher les mots DESCRIPTION et SEGMENT modifier la taille des segments pour afficher des caract res 20 plus grands attention aux dimensions du canevas qui peuvent devenir insuffisantes pour des mots tr s longs ramasser le code qui affiche le mot pour en faire une fonction au moi
287. ocs python org library codecs html module codecs pour les d tails 8 BOM byte order mark 9 litt ralement tire et lache LISTES ACC S INDEXE 53 Chaque fois qu on pr tend ignorer quoi correspond la repr sentation interne on s expose des m comptes en pratique il n est pas possible de traiter avec insouciance du texte sous forme utf 8 parce que c est un codage con u pour transmettre l information dans un flux et non pour la traiter En fait il nous faut retourner la figure 7 1 du 1AO 7 6 p 64 qui aurait d nous convaincre qu en mati re de donn es textuelles il y a trois aspects consid rer 1 comment a apparait en externe les glyphes forme de surface affichable et imprimable non repr sent e sur ce diagramme 2 codage de l information sa repr sentation interne en cha ne d octets forme sur 8 bits qui ne peut supporter que des manipulations simples comme la copie 3 encodage gt cha ne unicode pour un traitement syst matique aspect m canique d taill dans l encadr bleu texte original 1AO 7 6 p 63 un autre syst me de codage utilise en combinaison _ gt e unicode un codage sur 16 bits pour repr senter les informations dans les e utf UNICODE TRANSLATION FORMAT codage de longueur variable pour transmettre les informations e Cem Joss Notons que le diagramme est l inverse du texte il y a donc lieu de le lire l envers
288. ogrammation shell niea 163 9 4 1 options are 165 9 4 2 script ex cutable 166 Tale gt DP 20254 e e cT l NN NER RR 169 table des AO nen 178
289. ogrammer est en fait l art de transformer en appliquant des outils de d composition de s lection filtrage de recombinaison une sorte de jeu de construction o les briques LEGO sont des donn es qu on assemble qu on agr ge qu on structure MIDDLE OUT APPROCHE PRAGMATIQUE Tout c est tr s joli dire mais ce n est pas comme a que nous fonctionnons r ellement la conception est un cycle d involutions pour la d marche analytique et d volutions pour reprendre de l altitude et synth tiser Si vous reprenez le chapitre pr c dent son d but vous verrez que je m occupe d abord d obtenir les donn es traiter le texte Une pr occupation globale puis que je descends imm diatement tr s bas au niveau d une instruction l mentaire texte split n 0 qui me donne une ligne pour remonter avec une id e d algorithme boucle sur les lignes puis redescendre de nouveau tr s bas pour consid rer quoi mettre dans l index et encore une fois remonter avec une id e de boucle sur les mots d une ligne il me faut alternativement consid rer 4 niveaux de donn es du texte au caract re jusqu la fonction nettoie La d marche naturelle serait donc plut t faite d oscillations d allers retours mais remarquez que c est toujours apr s examen des donn es que se prennent les d cisions algorithmiques jamais l inverse Cette d marche dite MIDDLE OUT proc de partir d une id e de niveau interm diair
290. ollection consisting of the Document and other documents released under this License and replace the individual copies of this License in the various documents with a single copy that is included in the collection provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects You may extract a single document from such a collection and distribute GNU FREE DOCUMENTATION LICENSE it individually under this License provided you insert a copy of this License into the extracted document and follow this License in all other respects regarding verbatim copying of that document 7 AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works in or on a volume of a storage or distribution medium is called an aggregate if the copyright resulting from the compilation is not used to limit the legal rights of the compilation s users beyond what the individual works permit When the Document is included in an aggregate this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document If the Cover Text requirement of section 3 is applicable to these copies of the Document then if the Document is less than one half of the entire aggregate the Document s Cover Texts may be placed on covers that bracket the Document within the aggregate or the electronic equi
291. omme des sous buts lesquels demandent galement la satisfaction d autres conditions qui elles m mes r cursivement Un peu comme si on tait des saumons et qu on remonte le courant et ceci d une certaine fa on ressemble la d marche du programmeur d crite ci dessous BOTTOM UP APPROCHE INCR MENTALE Ascendant c est le premier aspect auquel est confront le d butant et cette d marche est incontournable le potier a d abord appris comment la glaise r agit la pression et dans quelle mesure la forme qu il ui imprime persiste dans le temps C est pourquoi l apprenti programmeur est invit manipuler du code directement sous l interpr te pour acqu rir le FEELING du langage a suppose un minimum de curiosit qui se manifeste comme une approche exp rimentale chaque expression est soigneusement test e avant d tre incorpor e une expression plus complexe Et ceci vaut quel que soit le niveau sous expression dans une instruction instruction dans une fonction fonction dans un module ou module dans un programme Il est evident ici que l exp rience du programmeur joue un r le consid rable puisqu il a deja teste tellement d expressions qu il a sans s en rendre compte d ailleurs constitu un capital de savoirs faire Il va donc aller beaucoup plus vite puisqu il peut anticiper l valuation de son code donc coder directement des expressions complexes voire des fonctions compl tes Ce qui nous am
292. on type retourne une valeur diff rente qui d pend de la valeur de son argument remarque pratique chaque fois que possible copiez le texte du programme propose et collez le dans le terminal comme s il y a des erreurs ce sera de ma faute et non de la votre Mais attention FIREFOX a un bug avec le cut paste et le drag drop Utilisez KONQUEROR TYPE DES VARIABLES Les variables elles ne sont jamais typ es si on a defini par exemple z 123 appliquer la fonction type a z retournera le type de la valeur de 7 pour vous en convaincre essayez N 123 type z z 123 type z Maintenant si je demande a valuer a valeur de 7 donc double valuation ce que j obtiens n est plus du type sir mais du type int essayez w eval z t 123 type w gt type int type eval z gt int gt Sachant cela il peut tre utile de d finir une variable de sorte qu elle repr sente une expression valuable on en verra l int r t dans la section suivante o un programme lit une expression au clavier donc forc ment sous forme de texte et doit ensuite en calculer la valeur par exemple z 1 2 3 Ici le type de la valeur de z est bien s r str mais si on l value 2011 11 23 22 10 16 2007 2012 par J Feat 22 FORMES ET TRANSFORMATIONS eval z on obtient la valeur 6 parce qu en pratique le m canisme d valuation d taill ci dessous ne
293. oniques qui constituent la m moire d une machine Et pour nous donner la representation qu on attend le programme a besoin de connaitre le type des donn es que nous manipulons Nous y reviendrons 2011 11 23 22 10 16 2007 2012 par J Feat 34 FORMES ET TRANSFORMATIONS Mais soudain un doute m assaille si l interpr te fait la diff rence entre les minuscules et les majuscules c est qu il doit y avoir une diff rence de codage Essayons for x in ONCE print ordix for x in sncf print ord x Avez vous remarqu que comme avec toutes les instructions complexes un bloc for doit tre suivi d une ligne vide Ceci au cas ou notre bloc ferait plus d une ligne Attention ici la virgule en fin de print cette trange syntaxe dit print qu il ne faut pas aller la ligne chaque fois de sorte que je vais pouvoir comparer les deux codages chacun sur sa ligne majuscules SNCF 83 78 67 70 minuscules sncf 115 110 99 102 Tiens tiens tiens Non seulement les codes des majuscules sont inf rieurs ceux des minuscules mais en plus on observe une constance dans la diff rence la minuscule est cod e comme la majuscule 32 Je vais faire une petite exp rience partant du code du je devrais obtenir en ajoutant 25 et 7 en rajoutant encore 32 La converse de ord s appelle chr ce qui nous permet de coder le programme d ord A d but f d 25 fin for
294. onjonction bit bit de deux nombres dont le premier est la valeur de ord a c est dire son code Ascil et le second est un nombre o tous les bits sont 1 sauf celui qu il nous int resse de basculer 0 le 5 pr cis ment Notez qu ici pour des raisons pratiques il est plus commode de partir d un nombre o tous les bits sont a 0 sauf le 5 et d en faire la n gation bit a bit avec ce qui a pour effet d inverser chaque bit le r sultat du amp avec 0000100000 est alors reconverti sous forme de caract re avec la fonction chr pour produire un A majuscule Grace a nos op rateurs logiques nous pouvons donc changer la valeur d un ou plusieurs bits en operant directement sur la repr sentation interne binaire du caract re ou d ailleurs de n importe quel nombre entier par exemple tant donn la repr sentation du caract re 9 en masquer les bits de poids fort avec OxOF effectue une conversion en sa valeur num rique gt gt gt Ord 898 amp Ox0F 9 Quant l op rateur de conjonction il permet de forcer un bit 1 sans toucher aux autres partant d un nombre quelconque et lui appliquant une conjonction avec le nombre 1 je peux garantir que le r sultat est impair sans aucun test pr alable gt gt gt 4 1 0b100 0b001 3 45 voir la pr sentation des fonctions ord et chr la section 2 4 filtrage PROTOTYPAGE D APPLICATIONS 135 Le m me genre d op ration m
295. ont ici communes aux deux classes 11 11 23 22 10 2007 2012 par J Feat 110 FORMES ET TRANSFORMATIONS Essayez donc ceci q Queue q stack gt q stack truc g push machinm q stack truc machin q push ohose dq stack truc machin chose q size 3 d fini dans Stack par l exercice 22 2 x dg pop q atack truc machin chose x e gpop 2 x f qa stack machin chose px30 3 d finir la classe Queue puis en tester des instances pour simuler plusieurs queues aux caisses du supermarch le plus proche Bien entendu c est au programmeur qu il incombe de s assurer qu il construit un ensemble coh rent au niveau des piles et des queues ca ne parait pas bien complexe mais ca pourrait le devenir pour des applications plus sophistiqu es L important ici est que l approche orient e objet me permet de d porter le code g n rique dans la classe elle m me donc par la suite de manipuler ses instances sp cifiques sans avoir programmer ce comportement chaque fois une classe est une sorte d abstraction qui une fois cod e permet de s affranchir des d tails comportementaux Si je fabrique une pile elle d marre vide comme il faut Et je n ai plus me soucier de comment on d pile une queue je d finis une instance de queue et j empile et d pile l envi comme ca doit naturellement se passer dans une
296. onvertissent une chaine en majuscules et minuscules recodez la fonction voyelle pour qu elle soit indifferente a la casse de son argument MANIPULATION DE S QUENCES 39 VU D AVION valeur de v rit valeur bool enne vrate True ou fausse False interpr tation num rique binatre False quivaut tandis que True quivaut 1 LEl TOL 2 gt True False errors ab IFalse gt a ab ITruel gt b bool fonction peu pr s inutile qui convertit son argument en valeur de v rit pr dicat se dit d une expression dont La valeur est interpr t e d un point de vue Logique toute expression sy mbolique m me atomique peut tre utilis comme pr dicat pour tout type de donn e L l ment neutre est interpr t comme False ceci inclut False None 0 s quence vide etc turtle module graphique de La distribution standard ow peut en lire Le code source dans usr lib puython2 5 turtle py requiert L installation du module Tkinter pour fonctionner m thocle se dit d une fonctionnalit propre un type d objet existe sous forme de op rateur binaire simili fonction s utilise avec une syntaxe particuli re comme dans abc upper Le coin des curieux m thodes de cha nes manuel de r f rence htip docs python org library stdtypes html id4 d finir une m thode suppose ma tris e L approche orient e objet esquiss e section 6 4 expression bool enne x Lf lt condition gt
297. org PYGUI htip www cosc canterbury ac nz greg python_qui syst mes graphiques at Kpe PYQT http riverbankcomputing co uk pyat PYKDE http riverbankcomputing co uk pykde ERIC http eric ide python projects org PYQTGPL http www quadgames com download pythonat autres syst mes graphiques OPEN SOURCE FXPY http fxpy sf net PYFLTK http pyfltk sf net PYOPENAL http pyopengl sf net PYOPENGL pr serve l interop rabilit avec un grand nombre de biblioth ques qui pour PYTHON Y compris TKINTER en installant Le TOGLWIDGET WXPYTHON FXPY PYGAME QT 6 ARCHITECTURE DE PROGRAMMES Les chapitres pr c dents montraient comment structurer les donn es sans jamais dire quoi ca pouvait tre utile Mais manipuler des structures de donn es travers des structures de contr le n est videmment pas une fin en soi ce n est qu un moyen de passer d une forme une autre de transformer l information pour la pr senter selon un nouveau point de vue La v ritable difficult de la programmation n est pas d apprivoiser les idiosyncrasies de tel ou tel langage mais d organiser les processus de transformation de mani re assez simple pour maitriser totalement le programme L objectif de ce chapitre est de montrer en d tail comment concevoir un programme et organiser ses ressources pour que son architecture reste aussi transparente que possible de facon faciliter son volution son d veloppement d abord puis sa maint
298. ose je peux aussi presser la heip SRE credits cm for more Informatie touche f pour remonter dans le temps et retrouver sous mes doigts ligne tap e tout l heure gt gt gt forward 50 ce stade je pourrais l diter la modifier mais elle me convient telle qu elle est et je n ai qu presser la touche pour ex cuter cette instruction et la tortue se d place toujours de 50 pixels mais cette fois ci vers le nord File Edit View Terminal Help 2 Encore une fois pareil je vais de nouveau tourner de 90 puis python avian 2 6 5 r265 79063 Apr 16 2010 13 09 56 progresser de 50 pixels regardez GCC 4 4 3 on linux2 Type help copyright credits or license for more information from turtle import D un point de vue m canique ce sont les m mes gt instructions et l effet de principe est toujours le ee m me ce qui change c est le contexte dans lequel est ex cut e la paire d instructions forward suivie de left ce qui fait que l effet est globalement diff rent Maintenant je vous laisse deviner quelles sont les instructions qui manquent pour finir le carr bon c est un peu facile mais c est justement a qui nous int resse arriver concevoir le programme comme une proc dure qui fait elle m me appel d autres procedures plus l mentaires Et si vous avez sabot votre ima
299. our les autres widgets que j y placerai 3 cree le widget message dans le widget top message est ici de type Label ce qui lui donne potentiellement les attributs des objets de ce type ici je n en utiliserai que deux son texte et sa 14 En r alit ce module est un FRAMEWORK le client ne demande rien il se contente de d finir dans son programme des CALLBACKS c est dire des ressources qui seront exploit es par le FRAMEWORK quand survient un v nement INTERFACES FEN TRES ET BOUTONS 75 couleur d avant plan fg est l abr g de FOREGROUND 4 compacte le widget message en haut et au centre de la fen tre il s agit ici de calculer la taille du texte afficher et d adapter la taille de la fen tre la taille du widget px19 1 effectuer la manipulation ci dessus noter que la cr ation d une nouvelle fen tre ne d truit pas l ancienne on s en d barrassera en quittant l interpr te mais on peut aussi cliquer sur le bouton de fermeture ou taper alt F4 px19 2 remplacer le texte du widget message par un texte plus long ventuellement m me sur plusieurs lignes comme par exemple h va comme a observer comment la fen tre s adapte a la nouvelle taille du texte grace a la methode pack px19 3 cr er le script contenant le texte de ce programme y ajouter une premi re ligne de commentaire pour specifier l interpr te requis changer son mode d acc s avec la commande chmod
300. outes les lignes ou il apparait dans le texte Une fois la technique maitris e l effort pour l adapter un livre entier ou une collection de pages WEB devrait tre minime Soit le texte suivant compos exclusivement en ASCII en vue d en simplifier la manipulation et les v rifications de traitement Un programme qui tourne bien c est un plaisir mais un programme qui marche mal ou pas du tout c est vraiment une grosse frustration La solution c est de le coder par petits bouts en testant progressivement chaque expression pour avoir la certitude qu elle retourne bien la valeur attendue avant de s en servir dans une expression plus large autrement dit une instruction du programme On teste alors chaque instruction avec le contexte voulu ce qui progressivement garantit le bon fonctionnement global Si vous voulez coller la d monstration qui va suivre t l chargez le texte indexer et mettez le dans votre dossier de travail ou working directory Et si votre dossier de travail n est pas le dossier par d faut utilisez la commande cd pour naviguer jusqu ce dossier avant d appeler PYTHON notez que vous pouvez le faire aussi avec PYTHON en important d abord le module os puis en utilisant la fonction chdir pour vous d placer dans le dossier voulu cf 9 1 2 module os A ce stade il vous faut lire le fichier comme expliqu dans la section pr c dente flux open indexe
301. par les v nements r alisation de prototypes annexes fourre tout modules programmation shell glossaire terminologie de l informatique condens e L MENTS DE PROGRAMMATION 5 objectif Ce cours propose une r flexion sur le traitement analytique de l information et sur la fa on d appr hender la structure m me de cette information en vue de la transformer Comme il s adresse des n ophytes il ne fait appel qu des concepts intuitifs notamment ceux qui d coulent de notre perception du texte et de l image le son pourtant omnipr sent dans notre vie quotidienne a t laiss pour compte parce que traiter du signal acoustique num ris n est pas si intuitif que a Le regard propre au traitement automatique implique par contre de nouveaux concepts appel s structures de contr le Qu on se rassure il n y en a qu une petite poign e et ils font eux aussi r f rence implicitement des aspects intuitifs de notre comportement e sequence d actions d instructions e jt ration d une s quence e actions conditionnelles gestion d exceptions Le cours aurait donc 2 objectifs camper le d cor en pr sentant les structures de donn es et comment les manipuler chapitres 1 2 3 4 et 5 e pr senter un panorama de ce qu on peut faire avec chapitres 6 et 6 Ce qui signifie que seuls les 5 premiers chapitres sans compter le 0 sont v ritablement co teux pour ce qui est des concepts techniques les
302. pas montrer patte blanche vous tes consid r comme un intrus et l acc s vous est refus Une fois l acc s autoris cette fen tre se referme derri re vous mais vous pouvez maintenant ouvrir une fen tre de terminal de console pour dialoguer presque directement avec le syst me et ex cuter de nouveaux programmes 11 11 23 22 10 2007 2012 par J Feat DOCUMENTS ANNEXES 153 terminal _ En fait ce dialogue se fait au travers d un SHELL un programme encore qui sert d interface logicielle entre l utilisateur et le syst me prot g par cette coquille Le SHELL est un interpr te qui ex cute la vol e des programmes explicitement appel s comme des commandes tap es au clavier On en verra de nombreux autres exemples mais une commande comme pwd provoque l ex cution d un petit programme dont la mission est d afficher votre position on y reviendra mais essayez donc cette commande dans une fen tre de terminal ou console commande affichage Position Encore une m taphore Disons approximativement que les programmes et les donn es r sident sous la forme de fichiers sur un support magn tique le disque et que comme il y en beaucoup on les organise en dossiers techniquement directories autrement dit repertoires Position signifie donc ici le dossier dans lequel on travaille On pourrait imaginer qu une simple pile de dossiers devrait suffire mais comme il y
303. pend de l infrastructure d un langage de programmation Ce point de vue n est pas innocent parce qu il implique que notre toute premi re exposition un langage de programmation va nous conditionner culturellement et a toute chance d influencer notre jugement quant l int r t d autres langages d autres facons de voir le monde et de le structurer et par l notre capacit valuer la qualit de nos m thodes de d veloppement sommaire fondements interaction avec le syst me 7 donn es l mentaires x59 22 lacet ER Eire 13 2 manipulation de Sequences dues societe nn 25 9 listes acc s index Henne 41 dictionnaires acc s par cl 57 b interfaces fen tres et boutons RR RR 73 architecture de programmes 87 D infrastructores logicielles ainsi nn 103 7 1 du conceptuel la mise en uvre 104 7 2 structures de donnees acceder atin eie UM a 105 7 3 structures de contr le 106 etei ee S oe 107 7 5 strates logicielles nmn nnn 112 brotolYpage d applications CEU UM CIC US UE 115 ASIE a CE otra TEE TET TTE 143 Tale gt TTC IT
304. peut calculer sa taille len espagnol 2 y tester La pr sence d une cl quatro in espagnol False y d finir une nouvelle cl espagnol quatro 4 gt r essayer L expression pr c dente en supprimer une cl del espagnol uno en extraire La Liste des cl s espagnol keys en extratre La Liste des valeurs espagnol values en fait nous manipulons des dictionnaires depuis Le tout d but sans Le savoir par curiosit d finissez donc quelque chose comme azerty ulop 789 puis regardez La valeur de La fonction Locals c est La m me que celle de globals sauf pendant L valuation d une fonction o Locals retourneralt Le dictionnaire des objets d finis dans cette fonction autrement dit son contexte Local un dictionnaire ne peut pas avoir deux m mes cl s pour deux valeurs distinctes Les cl s constituent un ensemble au sens math matique du terme o chaque l ment est unique et Voil pourquoi dans un contexte donn une variable ne peut repr senter qu une valeur fichiers Lun y a que trois principes appliquer pour utiliser un fichter il faut l avoir ouvert open en mode r ou w ow peut alors y lire ou y crire quelque chose read ou write Load ou dump partir du module pickle il faut Le refermer close b INTERFACES FEN TRES ET BOUTONS Comprendre ce qui suit requiert les concepts de TYPE et de M THODE re
305. ple le b est repr sent par le CODE Ascil 97 et le par le CODE POINT 0xC3A9 e l tat dune ampoule lectrique pourrait tre simul par une valeur logique vrai faux selon qu elle est allum e ou teinte e une image aura chacun de ses points repr sent comme une combinaison RGB de rouge de vert et de bleu plus ou moins intense RGB red green blue e un son deviendra une s rie de nombres mesures successives des variations de pression acoustique tous les 44 milliemes de seconde du moins en qualit CD e a pollution pourrait se coder comme un vecteur de nombres r els repr sentant la proportion dans l atmosphere des gaz les plus toxiques Comme on le voit ci dessus seules les donn es l mentaires comme les nombres et les caract res ASCII peuvent tre cod es comme des scalaires terme technique d signant un codage chelle de valeurs les autres supposent l agr gat ou s quence de plusieurs scalaires chacun repr sentant l un des aspects de la donn e num ris e comme par exemple l intensit de la composante rouge d un point lumineux Il y a donc plusieurs sortes de codage plusieurs fa ons diff rentes de coder la m me chose Le choix du codage d pend bien s r de l application envisag e autrement dit du rendement de ce codage pour un traitement sp cifique ainsi quoi bon repr senter les composantes RGB d une image en noir et blanc 11 11 23 22 10 2007 2012 par J
306. plus haut les listes sont mutables on peut en changer les l ments jurons 0 ciel ciel mille sabords tonnerre zut enfer jurons 2 de Brest ciel mille sabords tonnerre de Brest zut enfer Pour toute red finition de variable on peut utiliser ce qu on appelle des op rateurs d affectation cumulatifs augmented assignment operators cf notes de la section 1 1 jurons 2 de Brest a pour effet de retrouver la valeur de jurons 2 c est dire tonnerre de concat ner cette valeur avec celle qui est donn e en partie droite de l instruction tonnerre de Brest et de remplacer l ancienne valeur par la nouvelle On aurait pu dire la m me chose avec lurons 2 jurone 24 de Brest mais a fait moins coder donc a diminue les risques d erreurs et il se trouve que le code est plus efficace donc que a peut faire une diff rence de performance en particulier lors d une it ration Cette syntaxe idiomatique se retrouve dans d autres langages comme le C alors autant la maitriser tout de suite On peut manipuler une expression de liste sans qu il soit besoin d en faire une variable LISTES ACC S INDEXE 43 10 int 1 23 456 801it rl 33 mais bien tordu Puisque comme on l a dit plus haut une liste peut contenir n importe quel type de donn e on peut rassembler des donn es de type texte avec par exemple des nombres a
307. pour reconstruire le dictionnaire AF en une seule instruction 4 3 1 FICHIERS OPEN READ WRITE Supposons que vous ayez cod les exercices sur les dictionnaires francais anglais et anglais francais si vous les avez fait consciencieusement ca repr sente quand m me un gros paquet de donn es et ca serait bien commode si on pouvait conserver ces donn es dans des fichiers qu il suffirait de relire pour retrouver les donn es intactes La solution est fournie en PYTHON sous la forme de la fonction open et des m thodes read write et close La fonction open prend deux arguments tous deux de type str e le nom du fichier par exemple azertyuiop e mode d acc s w comme WRITE criture ou comme READ lecture et retourne un objet de type file qui repr sente le fichier ouvert La m thode write n est connue que par les objets de type file e elle ne prend qu un argument la donn e crire dans le fichier e cette donn e est obligatoirement de type str ce qui signifie que si on veut crire un objet d un autre type quel qu il soit il faut d abord lui donner une repr sentation sous forme de texte en utilisant la fonction repr voir l utilisation ci dessous cette m thode n a pas de valeur de retour La m thode read n est connue elle aussi que par les objets de type file e elle peut ne prendre aucun argument et retourne dans ce cas la totalit du contenu du fichier sous la forme
308. pr dicat d identit le verbe is qui s utilisent comme suit 111 10 2 10 1 10 0 bon sang mais c est bien s r black is mot whits ah oui 1 1 is 2 value True c est dire vrai z in yamaha False c est dire faux On dispose galement d op rateurs logiques qui permettent de construire des pr dicats complexes ou expressions bool ennes la conjonction and et la disjonction or qui sont binaires op rent sur 2 op randes et la n gation not qui est unaire x or Y six value faux retourne eval y sinon retourne eval x x and y si x value faux retourne eval x sinon retourne eval y not x si x value faux retourne True sinon retourne False px04 1 calculez la valeur de v rit des pr dicats litt raux suivants en vous assurant que vous comprenez parfaitement la r ponse de l interpr te au besoin utilisez la fonction bool valuez d abord les sous expressions puis l expression enti re commentez ces r sultats boolt bool convertit son argument en valeur bool enne L 4 2 3 and 3 is 4 I not 0 azertyuiop gt wxcvbn e in oil de b uf l l ment fait il partie de l ensemble 1 1 3 1 est l inverse de comme is not 1 18 3 and L 15 2 not 3 is not 2 scope port e de la n gation not 3 ie not Z y LO xs Tz g Tz L 18 and 2 18 Or 3 18 mot 3
309. pr ter pour ce segment Ce qui signifie que nous pouvons d j tester un prototype d mulateur ou interpr te sur tous ces segments de programmes CONCEPTION DE L INTERPR TE On peut se demander pourquoi avoir d cid d une repr sentation aussi complexe des donn es alors qu il suffisait d avoir la s quence des octets du code machine BvTE CODE pour mettre en place les principes de l interpr tation du code en question L important c est qu on ait d fini la structure des donn es auxquelles accedera l mulateur apres chargement sachant que ce chargement se fait th oriquement par l ex cution du tout premier segment donc qu il tait n cessaire en toute rigueur d int grer la notion de segment cette structure de donn es En fait cette repr sentation n est probablement pas encore assez complexe pour accommoder des programmes comportant eux m mes plusieurs segments ni permettre d accommoder du code symbolique comme suggere par le format 13 mais pour l instant on peut quand m me faire avec Le principe fondamental de l mulation comme on l a vu au chapitre 4 c est de disposer d un proc d capable de convertir une instruction de code machine en une expression du langage souche ici PYTHON Or le code machine ne sait manipuler que des registres et il n y en a que deux l accumulateur A et le compteur ordinal Pc premi re vue il semblerait judicieux de les repr senter par les variables A et PC 43 ou
310. ps l indice de l l ment ici appel n et l l ment proprement dit ici appel ligne e c est donc ce n qui me donne le moyen de r f rencer cet indice en tant que n de ligne e et d y ajouter 1 pour faire plus grand public Pour bien comprendre ce m canisme essayez l instruction ci dessous Corim am enumerate print nm G qui affiche sur chaque ligne l indice du caract re puis le caract re lui m me N HO Gis 0 px27 1 coder ce programme et le tester en l tat sur le fichier INDEXE MOI On fait donc tourner ca sur l ensemble du texte Ici pour limiter l encombrement je ne mentionnerais que les entr es ind sirables reportez vous donc vos propres r sultats instruction Z bien 1 bouts r 4 frustration S Global s IS grosse s 3 large 7 DEI programme I7 progressivement 9 qui 2 2 couce f 2 voulu x 6 Je suppose que vous comprenez pourquoi bien ne doit pas tre entr tel quel la virgule faisant partie de la cl d acc s le programme ne peut pas savoir que le mot bien est d j l puisqu en r alit il n y est pas ou du moins pas sous sa forme attendue la plus depouill e 19 http foad iedparis8 net claroline courses E464 document python code indexe moi ARCHITECTURE DE PROGRAMMES 93 6 2 REGLAGES Et maintenant je note toutes les anomalies que je voudrais nettoyer
311. quand il y a 2 num ros cons cutifs ou plus par exemple 1 2 3 5 la liste est pr sent e sous la forme 1 3 5 coder cette pr sentation Le moment est venu de mettre le programme l preuve sur des fichiers plus volumineux peut on l appliquer aux textes source de programmes et comment se comporte t il avec le format pdf ou celui d un fichier html Et bien videmment pour des raisons pratiques il serait commode que ce programme soit un script autonome qui puisse lire sur la LDC la ligne de commande le nom du fichier indexer px28 1 adapter le programme 27 5 pour qu il prenne le nom du fichier sur la LDC et l essayer sur des textes nettement plus volumineux d couvrez vous de nouvelles anomalies Modifiez le code ou les donn es du programme pour y rem dier Un probl me qui se pose l indexation de gros fichiers c est qu il y a beaucoup de mots sans int r t pourquoi ne pas inverser le principe de la stoplist pour au contraire n indexer que les mots qui figurent dans une golist A titre exp rimental essayez en le principe avec une liste contenant les mots BOUTS FRUSTRATION GLOBAL PROGRAMME PROGRESSIVEMENT et VALEUR En fait il faudrait adapter le programme pour qu il puisse fonctionner indiff remment en mode stop ou en mode 9o il suffit de le lui indiquer sur la ligne de commande au moyen de ce qu on appelle un switch une option c est dire un argument particulier conventionnellement p
312. que l interface avec sa_ite e a section FORMATS DE FICHIERS vous montrerait comment lire des donn es dans un format particulier comme CSV OU NETRC mais ce n est pas utile a notre niveau De toute facon nous devrons revenir sur ce sujet dans le chapitre lorsqu il faudra vraiment manipuler de l information en provenance de fichiers en particulier pour traiter des pages web 10 http docs python org library stdtypes html file objects 11 http docs python org library persistence html 12 http docs python org library fileformats html 2011 11 23 22 10 16 2007 2042 par J Feat 68 FORMES ET TRANSFORMATIONS 4 4 INTERPR TATION Toujours dans l optique de g n rer dynamiquement des donn es structur es l exemple suivant montre comment r aliser un interpr te pour un langage tr s simple le pseudo langage machine OU BYTE CODE expos au d but du cours 140 INTRODUCTION L ARCHITECTURE DES ORDINATEURS avec lequel vous avez donc probablement d j fait connaissance Concu avec une vis e purement p dagogique ce langage a au moins deux bonnes propri t s e il ressemble dans ses m canismes un authentique langage machine e eninterpr ter les instructions permet v ritablement de traiter de l information Pour cette raison ce que je vais en faire ici a une port e bien plus large que nos habituels exercices sur des cas d cole et les principes que j utiliserai pour simuler l ex cution d un programme
313. quired texts for either cover are too voluminous to fit legibly you should put the first ones listed as many as fit reasonably on the actual 11 11 23 22 10 2007 2012 par J Feat 176 cover and continue the rest onto adjacent pages If you publish or distribute Opaque copies of the Document numbering more than 100 you must either include a machine readable Transparent copy along with each Opaque copy or state in or with each Opaque copy a computer network location from which the general network using public has access to download using public standard network protocols a complete Transparent copy of the Document free of added material If you use the latter option you must take reasonably prudent steps when you begin distribution of Opaque copies in quantity to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy directly or through your agents or retailers of that edition to the public It is requested but not required that you contact the authors of the Document well before redistributing any large number of copies to give them a chance to provide you with an updated version of the Document 4 MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above provided that you release the Modified Version under precisely this License with the Modified Version f
314. r LP comme Label de pendaison affichant le nombre de coups restants deux boutons pour arr ter ou relancer le jeu FAISABILIT Le probl me ici et de faire en sorte que la frappe d une touche de clavier d clenche le HANDLER appropri je vais donc sensibiliser la fen tre elle m me en la liant au HANDLER avec la m thode bind Appelons ce HANDLER actualise je sais qu il attend obligatoirement un argument l v nement pourvu par le m canisme de cALLBACK de mainloop le gestionnaire d v nements donc je lui mets un param tre que j appellerai E ev OU event je sais que cette variable est elle m me un objet muni d attributs et celui qui m int resse ici c est event char le caract re correspondant la touche qui a t enfonc e Maintenant je dois actualiser la variable globale devine sauf si e il nereste plus rien pendre auquel cas c est perdu e il reste plus de trous dans le mot auquel cas c est gagn Il me suffit donc de coder ceci comme une expression bool enne retournant une valeur logique pour d cider si je dois ou non actualiser devine autrement dit s il reste quelque chose qui n a pas encore t pendu et qu il reste des trous dans devine j appelle la fonction valide en lui passant le caract re tap le mot original et la variable devine dans son dernier tat Comparer la valeur retourn e par valide avec celle de devine me permet de savoir si la lettre propos e es
315. r c d d un tiret que le programme teste avant de d cider comment traiter le fichier px28 2 adapter le programme pr c dent pour pouvoir optionnellement n indexer que les mots figurant dans une golist donn e dans un fichier nomm go list Et pour parachever l ouvrage d porter dans un module les fonctions indexe ajoute nettoie prd et les donn es globales qu elles utilisent le script qui exploiterait ce module ne doit donc plus contenir que les instructions d ouverture du flux la cr ation du dictionnaire d index vide et la boucle d indexation autrement dit la fonction pilote cf section 9 1 modules px28 3 adapter ce programme pour en faire un module nomm dexlex avec ses fonctions et les donn es globales d une part et le reste dans un script autonome d autre part ARCHITECTURE DE PROGRAMMES 95 6 4 EXTENSION Si l un des principes fondamentaux de la programmation est de g n raliser autant que faire se peut tendre la capacite de ce programme au traitement de textes accessibles par le reseau ne parait pas une ambition d mesur e si Google le fait c est que c est possible Un moteur de recherche vu au plus simple c est un programme qui indexe des pages WEB et indexe les mots interessants non pas en fonction de la ligne ou ils apparaissent mais de la page ou ils figurent en fait dans une architecture typique CLIENT SERVEUR cette t che est d volue au serveur cote client u
316. r cursivit voir r cursion regression tests tests de r gression ensemble de tests associ s une fonction pour s assurer qu une modification ne compromet pas son bon comportement r pertoire fichier repr sentant une liste de fichiers synonymes dossier directory ROM acronyme anglo saxon pour read only 72 en LISP et SCHEME seule la liste vide nil value faux 73 provenant le plus souvent de p riph riques comme la souris ou le clavier 74 FIFO first in first out 173 memory scalaire structure de donn es l mentaire destin e repr senter une valeur qui appartient une chelle de valeurs autrement dit une s quence implicite typiquement un nombre ou un caract re script d note un texte de programme destin tre interpr t la vol e s lecteur dans le contexte des langages objets c est la partie du message qui s apparie une m thode compatible avec le destinataire du message s quence structure de donn es ordonn es organis e de fa on s quentielle dans beaucoup de langages on peut acc der directement un l ment de la s quence d apr s son rang au moyen d un index pour d autres la s quence est implicitement consid r e comme une pile serveur dans l architecture client serveur d note la partie qui fournit le service shell interpr te d instructions commandes ligne par ligne ou sous forme de scripts sp
317. r grosso modo Les grandes lignes de La solution s inspirer de ce qu on ferait La main tester in vivo La faisabilit d une telle approche partir de l id e que Les sous probl mes qui se pr sentent sont d j r solus en fatre des abstractions soigner Les noms pour qu ils solent vocateurs descendre alors dans Le d tail de La r solution des sous probl mes et r cursivement une fonction est une capsule isol e des perturbations ext rieures ne communique que par Les param tres d finis son fonctionnement ne d pend que des arguments ainsi transmis sa fiabilit est garantie par Les tests unitaires si possible exhaustifs par prudence elle ne devrait donc pas utiliser de variables globales sauf durant La phase de mise au point exemple La stoplist globale peut tre modifi e sans avoir red finir indexe toute fonction peut avoir un effet et une valeur a priori toute fonction devrait retourner une Valeur sinon a veut dire qu elle est utilis e pour son effet global et non pour La Valeur qu elle calcule La pr sentation des r sultats est un effet devrait tre l apanage d une seule fonction du programme m me si pour ce faire elle utilise des fonctions auxiliaires s il faut changer cette pr sentation ce sera plus facile de Localiser par son nom Le code responsable d y substituer une nouvelle fonction de tester Les nouvelles fonctionnalit s sans compromettre Les anciennes ainsi on peut toujours revenir sur s
318. r te ce qu ils sont en train de coder et ceci dans les moindres d tails c est dire une tabulation pres Ainsi nombreux sont ceux qui arment l option indentation automatique de leur diteur de texte c est bien commode puisque cette option indente chaque nouvelle ligne comme la pr c dente Et quand il s agit d aligner par exemple des blocs for c est spontan ment qu on corrige l indentation pour mettre en vidence que la ligne suivante ne fait plus partie du bloc sauf si c est la derni re ligne d une d finition on garde l ndentation et on passe a la ligne suivante pour coder autre chose et vue d en haut la ligne qui precede a l air blanche mais on a d j oubli qu elle n est pas vide EXEMPLES Voici comment la d finition pr c dente de la fonction pair pourrait apparaitre dans pair py triple un diteur de programme sachant que sa deuxi me ligne commence par une def pair x 2 gt return not x 2f tabulation EL 4 Encore que peut tre bien que ce serait plus simple de la r diger sous la def pair x return 9 2 083 forme d un one liner comme ca plus besoin de se poser inutilement 2 des probl mes d indentation Puisqu on en parle il y a d ailleurs une autre bonne raison de pr f rer les one liners et c est une vidence quand on travaille en interactif tant que la ligne n a pas t envoy e il est possible de la corriger apr s si on s
319. r des agents qui s changent des messages et Les propagent aux autres membres de La soci t programmer c est alors d finir Les bons agents et Les r ponses ad quates aux messages malis SL OW y r fl chit bien tous Les langages sont d claratifs puisque ce sont des donn es interpr t es par un moteur que ce soit au niveau mat riel Le processeur ou au niveau Logiciel l interpr te Le compilateur tout programme est en r alit des donn es pour un autre programme f t Ll r alis avec de La Logique digitale 2011 11 23 22 10 16 2007 2012 par J Feat 72 FORMES ET TRANSFORMATIONS R CAPITULATION dictionnaire collection de donn es de La forme cl valeur LL n y a jamais que 2 malheureux trucs savoir pour exploiter des dictionnaires comment Les construire ww OWE deux two comment en extraire l information l un one deux two un dictionnaire est index par ses cl s La cl permet d acc der La valeur rien n emp che que La valeur solt elle m me un dictionnaire un dictionnaire peut tre vide La fonction dict sans argument cr e un objet neutre de type dict vide diet gt False La donn e Litt rale des couples cl gt valeur duo 2 Tuno amp 1l construit par programme espagnol dict zip uno duo 1 2 3 gt 7 duo 2 uno 1 partir d un dictionnaire ow
320. r le nom de la fonction par le nom de son module ce qui limine les risques de collision avec les noms d j existants dans votre espace de travail Une autre facon d importer les fonctionnalit s d un module c est d utiliser l instruction from random import ou la diff rence du mode pr c dent les nouveaux symboles import s supplantent ceux d j d finis avec le m me nom dans votre environnement il n est donc plus n cessaire de les pr fixer Il n est d ailleurs pas non plus n cessaire de les importer tous from random import choice importe le nom choice une r f rence choice azertyuiop choisis un l ment de la s quence choice pique c ur carreau tr fle split comme par hasard MODULE OS Autre exemple le module os i e operating system qui contient tout ce qu il faut pour effectuer par programme les op rations qu on pourrait commander depuis le SHELL from os import getcwd listdir chdir chmod e getcwd fait pareil que la commande SHELL pwd sauf que c est une fonction donc que je peux m moriser la valeur qu elle retourne pour y revenir plus tard e istdir est l quivalent de ls sauf que l encore la valeur retourn e est une liste de noms de fichier qu on peut plucher loisir e chdir est comme cd ceci pres qu elle ne sait pas interpr ter le symbole qui veut dire dossier personnel de l utilisateur et attention elle ne retourne rien e chmod accepte
321. raissent difficiles et de prendre des notes sur ce qui vous parait important votre niveau c est une facon de vous approprier l essence du cours donc de l int grer en compl ment les exercices sont une autre mani re d assimiler les principes illustr s dans le support de cours commentez en chaque instruction si vous n tes pas vraiment sur de retenir ce vous avez compris sur le moment 2011 11 23 22 10 16 O 2007 2042 par J Feat FORMES ET TRANSFORMATIONS supports La digestibilit du cours d pend bien s r de vos dispositions mais l exp rience montre qu il n cessite entre 20 et 30 heures d assimilation et peut tre plus si vous avez c ur de r aliser tous les exercices recommand s Cette estimation grossi re peut varier en fonction du niveau initial de l tudiant et de son assiduite Les exemples comment s dans le cours doivent tre recopi s sous l interpr te de sorte qu ils solent autant que possible valu s instruction par instruction non seulement pour en comprendre la pertinence avec le cours mais aussi pour prendre conscience des m canismes l uvre derri re l interpr tation d expressions formelles Et pour le d butant absolu nombreux sont les pi ges le plus banal tant le manque de rigueur il faut admettre pour principe que le mode d emploi le support de cours doit tre rigoureusement suivi la lettre y compris les espaces sinon le code programm peut n avoir plus aucun sens po
322. rait tout sauf le segment n 2 O 1 3 5 4 et 6 2 Maintenant j ai id e que je pourrai ais ment dessiner chaque segment parce que je sais que la classe Canvas dispose d une m thode create_line qui tant donn s les coordonn es de deux points sait les joindre par un trait dont on peut sp cifier l paisseur et la couleur Il me suffira alors d associer chacun de ces segments le code qui permet de le dessiner une position absolue dans la matrice du caract re Je me donne donc des dimensions pour cette matrice et d cide qu elle fera 70 pixels de large pour 120 pixels de haut chaque segment aura une paisseur de 10 pixels et une longueur de 40 pixels Ainsi le chiffre 8 aura pour hauteur 3 segments horizontaux d une hauteur effective de 10 pixels chacun donc 30 plus la longueur de deux segments verticaux 2 40 pixels soit 110 pixels au total quant la largeur totale elle sera la somme des paisseurs de 2 segments verticaux plus la longueur d un segment horizontal soit 60 pixels La m thode create_line attend au minimum 4 arguments les coordonn es du d but de la ligne et celles de la fin C est donc en connaissance de cause que je d cide de repr senter chaque segment comme la liste des 11 11 23 22 10 2007 2012 par J Feat 118 FORMES ET TRANSFORMATIONS arguments de la m thode en question x y et x Et ces listes seront elle m mes rassembl es dans une liste que j appellerai se
323. re puisqu il peut factoriser des comportements qui seront automatiquement h rit s Ainsi toutes les s quences ont une m thode pour faire et une pour faire bien entendu il y a des choses qu on peut faire avec des listes mais pas avec des chaines et inversement ce qui veut dire que certaines m thodes ne doivent tre d finies qu au niveau du sous type concern Un autre avantage n a pas encore t mis en vidence c est le fait que tout objet h rite des propri t s du type dont il est un repr sentant On l a bien compris pour ce qui est des propri t s comportementales ou dynamiques mais c est galement vrai pour les propri t s statiques techniquement appel es attributs un exemple va claircir ce point sur le champ Consid rez les d finitions suivantes pour des raisons historiques les types s appellent ici des classes ce qui est l inverse de ce qu on entend par l en math matiques ou en philosophie o les classes sont d finies en EXTENSION alors que les types sont d finis en INTENSION Le mot cl class permet de d finir une nouvelle CLASSE autrement dit un nouveau TYPE et d y d finir des attributs dans l exemple suivant pour faire simple je n en ai d fini qu un chaque niveau et je n ai d fini aucune m thode de cet aspect des choses nous verrons un exemple un peu plus tard Une expression de la forme class A B d finit la classe A comme h riti re de la classe B techniq
324. re turtle a avanc de 50 pixels vers l est en laissant 50 points noirs sur le chemin parcouru la tortue proprement dite est figur e par la pointe de la fl che je vois donc en m me temps sa localisation et son orientation ce stade je pourrais changer la fen tre de place ou m me la redimensionner elle ne d pend pas de la fen tre du terminal mais du programme qui est en train de s ex cuter lui dans la fen tre du terminal programme que je construis moi m me instruction par instruction Tiens propos d orientation il y a une fonction pour la changer left tourne la tortue de n degr s vers la gauche donc left 90 effectuera une rotation de 90 File Edit View Terminal Help sit t dit sit t fait mais encore une fois l interpr te ne retourne 2 6 5 r265 79063 Apr 16 2010 13 09 56 GCC 4 4 3 on linux2 aucun r sultat dans la fen tre du terminal ce qui compte C est type help copyright credits or license for more information TE r j P gt gt gt from turtle import l effet visible dans la fen tre graphique observez qu en fait forvard 50 rien n a chang si ce n est que la tortue est d sormais orient e gt vers le nord Maintenant je voudrais de nouveau avancer de 50 pixels je File Edit View Terminal Help pourrais retaper la m me chose qu avant mais puisque python 2 6 5 r265 79063 Apr 16 2010 13 09 56 justement c est la m me ch
325. red Temainloop Mais l encore deux probl mes e les x sont tellement sardin s que le graphe n a aucune ampleur e et que tout est tass dans les 63 premiers pixels de la fen tre Je vais donc a rer les x en les multipliant par 20 en m me temps que je d calerai le tout de disons 50 pixels vers la droite pour voir X W 6 horizontal offset Y H 2 vertical offset for angle in xrange 0 int radians 360 100 5 x angle 100 y scale sin x Y x 20 x X pixel F x y red T mainloop Maintenant on voit bien que c est le graphe d une sinusoide et que comme toute fonction p riodique elle revient sa valeur de d part une fois que x a effectu une r volution compl te autour du cercle trigonom trique Et a me va comme un d tail pr s c est que ce graphe n a pas grand sens s il n y a pas de rep re cart sien pour expliciter les variations de y en fonction de x alors trois petites lignes de code et il n y para tra plus INTERFACES FEN TRES ET BOUTONS 85 mam X W 6 horizontal offset Y H 7 vertical offset F create line X 2 Y W X Y x axis F create line X X X H 20 Y axis F create text X 2 10 Y 10 text 0 cartesian origin for angle in xrange 0 int radians 360 100 5 complete revolution x angle 100 yields abscissa y scale sin x Y and ordinate x x 20 X scaling pixel F x y
326. rendre compte de l aspect microcode du out Cl Sortie processeur on se bornera mulerr l effet de chaque instruction en nm 10 PC lt c actualisant la RAM l accumulateur A et le compteur ordinal Pc bn TA PC Z brz 12 siA 0 PC lt px34 1 programmer cet mulateur de sorte qu il puisse lire le code machine partir d un fichier et l ex cuter r solvez entre autres exemples l nigme des 2 programmes myst re de la section exercices du document original ANALYSE Le probl me ressemble celui de l exercice px18 2 d j r solu au chapitre 4 et il devrait tre possible de lui appliquer une solution similaire mais il y a quelque chose ici qui nous oblige changer notre angle d attaque ce langage dispose de modes d adressage plus puissants lui permettant d acc der n importe quel l ment de la m moire qui du m me coup ne peut plus tre saucissonn e en tranches de 4 octets comme pr c demment c est pourquoi on adoptera la representation sous forme d un vecteur d octets appelons le data de type list D ailleurs comme sp cifi la section 13 3 chaque instruction est cod e sur 2 octets et il est tout fait possible que le programme crive une nouvelle valeur la place de celle donn e dans le code source original voil pourquoi l approche simpliste du px18 2 ne convient plus Du fait que le programme doit maintenant lire le code partir d un fichier le char
327. rg pour une coh rence globale PCI 5 A 00 in 70 data 0x70 input val val 3 PC 52 A 00 load 70 A data 70 PC 54 A 03 store 71 data 71 A PC 56 A 03 store 72 data 72 A 2 Po 58 A 03 load 5E A 5E 2 PC 5A A 5E store 8D data 8D A Pos oC A 5E jump 74 PC 74 PC 74 A load 00 A 0 PC 76 A 00 store 73 data 73 A PC 78 A 00 load 71 data 71 PC 7A A 03 DEZ SL if not A PC 8 Pos A 03 sub 01 A 1 PC 7E A 02 out 71 print An datalil 3 Bien entendu ces 15 lignes de code ne comprennent pas la lecture des donn es que nous allons d finir avec une petite fonction d s que nous aurons adopt un format pour le fichier Pour rester simple conservons comme modele celui du 13 8 et fixons en le format source Pour tre s r de ne pas faire d erreur en recopiant les donn es du document original je propose de garder la forme hexad cimale non pr fix e telle qu on l a manipul au d but offset 30 code 10 3A 00 31 40 32 60 33 48 32 49 33 40 33 22 FF 12 34 41 32 10 44 Bien entendu on peut pr senter le code autrement par exemple avec deux octets par ligne comme pour le 13 9 mais les deux mots cl offset et code devront tre pr sents on pourrait s en passer mais leur pr sence est pour le programme une indication de quoi faire avec les donn es cf EXTENSIBILIT ci apr s la lecture du fichier est relativement simple
328. rite sprartl a computer graphic that may be moved on screen and otherwise manipulated as a single entity string voir chaine struct en C agr gat h t rog ne regroupant en s quence de multiples d clarations structure organisation arrangement C voir struct structure de contr le proc d programmatique de routage d une s quence d instructions dans un programme structure des valuations successives ou flot que certains s efforcent de repr senter par des diagrammes peu pr s inintelligibles au del d une certaine complexit et sans utilit en de stub angl coupon fonction qui ne fait rien symbole une abstraction repr sentant quelque chose d autre ainsi pour nous autres le symbole 4 repr sente la quantit 111175 syntaxe ensemble des r gles de construction d expressions bien form es d pend largement du langage 75 remarquons que est en soi un symbole une repr sentation symbolique o le nombre de i s interpr te comme une quantit 11 11 23 22 10 2007 2012 par J Feat GLOSSAIRE table sequence de donn es homogenes de taille fixe dans le jargon des bases de donn es une table est en fait un vecteur au sens large dans d autres contextes une table peut tre aussi bien un vecteur qu une matrice et il n y a pas de limite theorique aux nombre de dimensions d une table bien qu en pratique a devienne un peu d licat au dela de la quatri
329. rn 1 taille s 1 if s else 0 Le if ne serait donc qu une conjonction d guis e tandis que le else serait une disjonction Mais attention on ne vous demande ni d apprendre ni de retenir cet aspect des choses mais de savoir que ca existe histoire de paraitre cultiv GEOMETRIE ITERATIVE Si iterer c est r p ter il serait cependant inutile de r p ter exactement la m me chose en fait comme dans le cas de SNCF le contexte est different a chaque iteration Toute l astuce consiste donc a programmer ce qui va faire une difference tout en faisant pareil Par exemple si je veux dessiner un carre donc 4 cotes gaux je vais tracer un trait d une certaine longueur puis tourner de 90 tracer un second trait de m me longueur etc Et c est la quadruple r p tition de ces actions l mentaires qui aboutit a la repr sentation finale Et notez au passage comment est ici applique le principe diviser pour regner e analyse du probleme pour le ramener a une s rie d actions e factorisation de ces actions pour les programmer economiquement Pour montrer ce qu on attend d un analyste programmeur a ceci pres que tout n est pas aussi facile a analyser et qu il faut galement savoir programmer reprenons le programme du 112 0 4 MANIPULATION DE S QUENCES 37 from turtle import cf 9 1 en annexe forward 100 left 90 forward 100 left 90 forward 100 left 90 forward 100 La toute premi re ligne
330. rom you under this License will not have their licenses terminated so long as such parties remain in full compliance 10 FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new revised versions of the GNU Free Documentation License from time to time Such new versions will be similar in spirit to the present version but may differ in detail to address new problems or concerns See http www gnu org copyleft Each version of the License is given a distinguishing version number If the Document specifies that a particular numbered version of this License or any later version applies to it you have the option of following the terms and conditions either of that specified version or of any later version that has been published not as a draft by the Free Software Foundation If the Document does not specify a version number of this License you may choose any version ever published not as a draft by the Free Software Foundation 177 11 11 23 22 10 2007 2012 par J Feat 178 FORMES ET TRANSFORMATIONS TABLE DES MATI RES fondements interaction avec le syst me e 7 0 1 utiliser l interpr te python 8 0 2 utiliser les fonctions d un module import 9 0 3 programmation en mn 10 0 4 j dite avec gedit ECT 11 0 5 le mode 1
331. ropri t s et capable de g n rer de nouveaux objets cette filiation permet un m canisme d h ritage gr ce auquel les propri t s de l original sont partag es par tous les descendants client dans l architecture client serveur d note la partie qui utilise le service code convention de repr sentation dans l activit de l analyste programmeur le code est le texte du programme par opposition tous les autres textes qui d crivent le programme de mani re non formelle 55 au sens informatique et par abus de langage une classe est comme un type d finie en intension ce n est pas vrai en math matiques ou en philosophie o une classe se d finit en extension 11 11 23 22 10 2007 2012 par J Feat GLOSSAIRE collection structure non s quentielle de donn es h t rog nes par exemple la classe bag dans les langages objets commande terme exclusivement utilis dans le contexte d un sHELL d notant une expression valuable instruction ex cutable compilateur programme de traduction d un langage en un autre g n ralement plus primitif souvent le langage machine constante se dit d une valeur immuable par exemple celle du nombre Pi par abus de langage se dit aussi du symbole qui repr sente cette valeur par exemple la constante PI data driven programming voir programmation dirig e par les donn es d claratif se dit d un langage qui au lieu de structures de
332. rrespond au widget maitre la fen tre deja cr e piece maitresse de l interface instance de Tk d finie ici sous le nom de top et pass e en argument la creation de l instance prog avec prog Salutations top Le reste du code est similaire a ce qu on aurait crit en dehors d une definition de classe c est dire que j ai simplement ajout self avant le nom des objets cr s pour l interface mais aussi pour les m thodes li es aux boutons L objectif c est qu un objet issu de cette classe ne connaisse et donc n utilise que les methodes de sa classe from Tkinter import class Salutations def bonjour self print salut c est moi def aurvoir self print ciao at def _ init self W self stop Button text assez fg red command W destroy self hello Button W text dis bonjour command self bonjour seli qood bye Button W text dis revoir command lt s lt 2Urvoit self hello pack self good bye pack self stop pack top Tk prog Salutations top top mainloopt Du fait que j ai d fini une m thode init toute instance de Salutations sera pr meubl e avec des boutons hello good bye et stop et n auront donc pas besoin d en h riter on peut d ailleurs difficilement imaginer qu il en soit autrement puisque ces boutons doivent imp rativement tre pr sents au moment ou on appellera la m thode pack Les m thodes par contre ne sont jamais recopi
333. rs relativement facile d crire un programme ad hoc mais les probl mes se posent d s qu on veut le faire voluer pour tendre ses capacit s de traitement Ainsi ce que je propose ici c est de d finir quelques ensembles comme 2011 11 23 22 10 16 2007 2042 par J Feat 46 FORMES ET TRANSFORMATIONS ail bail corail mail soupirail travail vantail vitrail split Il s agit des mots en ail qui forment leur pluriel en aux tous les autres comme d tail ayant un pluriel r gulier Un b te test comme if mot in ail return mot 0 2 ux me permettrait alors de retourner le radical du mot c est dire tout sauf le il final en y rajoutant aux et le tour est jou De la m me fa on on d finira ou hibou chou genou caillou pou bijou split la liste des ou qui deviennent oux et on testera l appartenance du mot cet ensemble de la m me fa on Et celle des eu qui ne deviennent pas eux eu pneu bleu split et puis des au qui ne deviennent pas aux au landau sarrau split hmm deux lignes de code de plus ne reste plus qu se d barrasser des invariants comme les riz les roux et les gris ainsi que de quelques monstres comme ceil qui devient yeux et ail qui devient aulx et que d ailleurs personne n utilise mais c est pour faire bien pour ceux l je ne vois pas d autre solution que le test ad hoc Si vous m avez su
334. s initialisation une pile d marre en principe vide empilement qui se dit d habitude push dans les langages qui supportent ce type d objet typiquement Lisp mais aussi l assembleur d pilement qui se dit pop dans ces m mes langages et accessoirement on pourrait aussi demander la hauteur de la pile La pile est le type fondamental en Lisp ou elle est appel e liste et S augmente de droite gauche gr ce cons la fonction de construction Le dessus de la pile est donc par d finition le dernier l ment empil qui devra donc tre trait en premier selon le principe le dernier arriv est le premier servi Voici comment d finir ce type en PYTHON 30 par pure convention les noms de classes sont typographi s avec une capitale initiale INFRASTRUCTURES LOGICIELLES 109 class Stack object par convention initiale capitale pour les noms de classes def init self self stack nom de m thode reserve a cet usage def push self val self stack append val m thode sp cifique def pop self return self stack pop m thode sp cifique Toute d finition de fonction depuis l int rieur d une classe est implicitement une d finition de m thode et doit avoir au moins un param tre nomm conventionnellement self mais peu importe en fait qui sera pourvu automatiquement au moment de l invocation de la m thode et qui repr sente l objet qui invoque la m thode obligatoire
335. s giga souvent abr g en G pour les informaticiens c est 2 c est dire 1024 m gas et ce en d pit de la normalisation de 1998 pour les autres ce n est qu un milliard glyphe repr sentation graphique d un caract re ou d un id ogramme handler fonction param tr e pour g rer un type d v nement sp cifique 57 une fonction peut tre anonyme les langages fonctionnels disposent d une forme appel e lambda expression qui se comporte exactement comme une fonction mais n a pas de nom symbolique 58 certains langages LISP ICON PYTHON SCHEME disposent de g n rateurs fonctions qui auto g n rent une valeur en fonction de leur contexte local 11 11 23 22 10 2007 2012 par J Feat GLOSSAIRE hash table structure non s quentielle de donn es organis es sous la forme de couples cl valeur telle qu on acc de directement la valeur quand on en connait la cl il n y a pas de contrainte de type sur la valeur qui peut donc elle aussi tre une hash table 59 En PYTHON ce type de donn e s appelle dictionnaire ce qui voque fort justement la mani re dont on l utilise hertz mesure de la p riodicit cadence par seconde le plus souvent abr g en Hz h t rog ne se dit d un ensemble d l ments disparates de types diff rents homog ne se dit d un ensemble d l ments de m me nature de m me type imp ratif ou proc dural s oppose d claratif se dit
336. s allons raffiner la proc dure en d placant dans un nouveau dossier le lot de fichiers a compresser en prenant le soin de nommer ce dossier comme il faut en fonction du nom de l auteur et du n de serie new S auteur 1 mkdir Snew ls 1 new txt inutile juste pour bien voir ce qu on obtient echo moving all new s into new inutile mais rassurant mv new txt new Si tout s est bien pass il y a maintenant un nouveau dossier nomm truc 8 ne contenant que les fichiers archiver qu on traite d un seul coup d un seul zip r new new Et pour faire le m nage nous pourrions maintenant d truire le dossier dont il existe d sormais une copie compress e rm rf Snew optionnel Le script emballe contient donc les lignes suivantes fT JusBr bin env bash auteur machin lor x n pxSlL Ttxt do echo renaming x as auteur x inutile mais rassurant mv x Sauteursx done new S auteur 1 mkdir Snew ls 1 new txt inutile juste pour bien voir ce qu on obtient echo moving all new s into new inutile mais rassurant mv new txt Snew zip r new Snew rm rf Snew optionnel 9 4 1 OPTIONS D EX CUTION Chaque interpr te d finit des options qui contr lent son ex cution pour leur documentation commander man nom de l interpr te gt pour PYTHON l option i est discut e page suivante pour BASH ces deux ci me paraissent les plus utiles e l option n NO EXECUTION lors de
337. s complexes EXTENSIBILIT De toute facon ce jeu est invendable face la concurrence mais c est une opportunit de d velopper des techniques de programmation et peut tre m me d en inventer de nouvelles Alors rien n est indispensable mais rien n est inutile Modification qui ne demande m me pas de rajouter une ligne de code px33 1 tel quel ce programme ne s arr te pas quand un joueur a gagn comment peut on peu de frais modifier le code pour qu il n accuse r ception d aucun nouveau coup une fois que l un des joueurs a gagn Modification qui requiert un peu d astuce pour g n raliser la fonction gagnant px33 2 tendre le programme pour jouer sur une grille de mettons 5 par 5 suffirait il pour cela de changer la valeur de la variable globale T Le programme continuerait il fonctionner Que faudrait il changer pour am liorer son comportement Peut on coder une solution g n rale pour n importe quelle dimension Modification qui requiert une petite formalisation de la strat gie gagnante mais ne risque pas de vous embarquer dans les arcanes des techniques d intelligence artificielle px33 3 qu en couterait il d adapter ce programme pour jouer contre la machine et non plus deux joueurs humains R alisez cette adaptation PROTOTYPAGE D APPLICATIONS 129 8 4 L ORDINATEUR EN PAPIER Soit le langage d crit dans L ORDINATEUR EN PAPIER dont on se contentera ici de rapp
338. s de mots qui ont dans l ensemble 0 un pluriel r gulier sauf quelques exceptions qui ont un pluriel diff rent 0 un pluriel irr gulier sauf quelques exceptions qui ont un pluriel r gulier en s Puisqu on parle d ensembles la solution PYTHON serait entre les deux il s agirait de cr er des ensembles de mots ou plut t de finales de mots un ensemble pour chaque classe d exceptions Par exemple tous les mots terminaison ou ont un pluriel en s sauf bijou caillou chou genou hibou pou et ripou l inverse tous les mots en eu ont un pluriel en x sauf bleu et pneu Si j cris tout ca c est pour retarder le moment ou je publierai la solution je vous prie de ne pas regarder plus bas pour l instant mais de r fl chir la solution la plus conomique celle qui vous permettrait d crire le moins possible de code tout en g rant le maximum d exceptions Parce que c est justement en cela que programmer est un art une technique qui consiste abstraire les caract ristiques essentielles de l information traiter de facon ce que le traitement soit aussi simple que possible Ceci reste vrai quel que soit le type d information manipuler traitement du signal cryptographie ou reconnaissance de formes autant de domaines ou il faut faire un effort d abstraction pour imaginer des solutions g n ralisables D ailleurs c est ca le mot cl g n raliser Il est toujou
339. s du code ex cutable et 2 je ne peux pas les d truire d truire tant une fa on radicale de modifier La commande s dispose de plein d options pour configurer l affichage le trier Elle offre aussi la possibilit de specifier les fichiers qu on veut lister l exclusion des autres ici on aurait pu specifier Is d i pour obtenir la liste de tous les fichiers ou dossiers dont le nom comporte un j en 2 position et sont ce qu on appelle des wildcards ou jokers en fran ais et certains les appellent des m ta caract res e repr sente n importe quel caract re en un seul exemplaire e represente n importe quelle sequence de n importe quels caract res On peut ainsi filtrer une liste pour ne s lectionner que les noms des fichiers int ressants HISTORIQUE DES COMMANDES L diteur de ligne incorpor au SHELL permet de rappeler l historique des commandes les touches de curseur haut et bas retrouvent les derni res commandes et les touches de curseur gauche et droit permettent de se placer pr cis ment l endroit qu on veut corriger Pour ceux qui utilisent le shell bash l historique des commandes est conserv dans un fichier nomm bash_history dans la liste des fichiers tous ceux dont le nom commence par un sont invisibles sauf si on utilise l option a c est dire all de la commande s voir ci dessus Le reste de cette section passe en revue un certain nombre de commandes dont
340. s le cadre d une maquette d une tude de faisabilt il est un autre probl me qu il nous faut absolument r soudre celui de la disparit d encodage des pages WEB certaines sont en latin 1 alors que d autres sont en uti 8 comment le d tecter et comment ceci peut il influer sur l indexation proprement dite Comme on l a vu la section 3 4 unicode le mot uf serait cod diff remment selon qu on est en uti 8 en latin 1 ou en latin 9 et comme c est le mot qui sert de cl d acc s au dictionnaire la cons quence imm diate est que ces 3 codages vont forc ment correspondre 3 entr es distinctes il faut donc un moyen de d terminer l encodage de la page et une petite acrobatie pour unifier la repr sentation interne selon un d nominateur commun unicode par exemple Toute page HTML bien form e comporte normalement une indication du type des donn es qu elle contient sous la forme d un indicateur CONTENT l int rieur d un tag META ainsi dans le cas de la page lt http ww iedparis8 net ied gt il y a une ligne qui dit meta http equiv 2 content type content text html charset iso 8859 1 gt D autres pages publieront ce type d information avec de l g res variantes par exemple la 7 ligne du code source de http www python org ajoute un blanc et un avant le chevron fermant meta http equiv 2 content type content text html charset utf 8 Cette indication TEXT HTML est ce qu on appel
341. s milliers et ce pour des raisons historiques et pratiques On ne programme plus aujourd hui comme il y a cinquante ans parce qu on ne programme plus les m mes choses et certains langages permettent de programmer certaines t ches plus facilement que d autres ou qui seraient m me impossibles autrement C est d ailleurs pour cette raison qu il s en cr e de nouveaux chaque ann e en 2006 il y en avait d j 8512 Chaque langage a son propre exique pr d fini ainsi qu une syntaxe sp cifique et bien entendu l interpr tation s mantique qui va avec Beaucoup de langages ont la propri t d tre extensible au moins pour ce qui est du lexique on d finira de nouveaux symboles en fonction de combinaisons de symboles d j existants Effectivement si je peux donner un nom une expression symbolique l utilisation de ce nom sera d sormais quivalente l expression elle m me Ainsi vais je pouvoir cr er des abstractions de haut niveau et manipuler des donn es en invoquant simplement le nom du programme complet Mais avant d en arriver l le premier probl me que rencontrent les d butants c est comment dire ce qu on veut faire Autrement dit comment puis je avec le lexique de ce langage construire des expressions syntaxiquement bien form es qui expriment pr cis ment le traitement que je veux appliquer l information dont je dispose 1 1 SHELL PYTHON PYTHON langage interpr t a t choisi d une part cau
342. s oppose donc l approche structur e sous la forme d objets classes m thodes et instances Or le module Tkinter est r solument orient objet et ne vous laisse manipuler que des instances des classes Tk Button etc Ce module est un FRAMEWORK dans le sens o en appelant la m thode loop d une instance de Tk toutes les ressources de Tkinter se mettent la disposition de votre application Je ne suis pas s r que ca s duise quiconque de prime abord vu l aspect r barbatif du code ne vous inqui tez pas on finit par s y faire mais il me semblait utile ici de montrer comment programmer deux boutons pr s le px20 1 avec l approche objet Mais quel est donc l avantage de cette approche par rapport notre facon de faire habituelle R ponse ici pratiquement aucun avantage mais th oriquement et surtout dans le cas d applications complexes on verra tr s vite l int r t de regrouper sous un nom un ensemble de propri t s statiques les attributs ou dynamiques les m thodes surtout quand on sait qu une classe est aussi un espace de nommage on vite INFRASTRUCTURES LOGICIELLES 111 ainsi les conflits entre des objets de m me nom par exemple un bouton nomm stop qui figurerait dans de multiples fen tres En pratique l avantage de l approche objet est de conf rer aux donn es le m me statut modulaire que celui d une fonction les donn es d un objet sont isol es de celles des autres et les m thodes
343. sabords jurons saperlipopette mille sabords Turons zut saperlipopette mille sabords zut Jurons saperlipopette mille sabords Jurons 1 mille sabords jurons 0 saperlipopette jurons 1 mille sabords Comme le montre la 3 expression ci dessus concat ner un nouvel l ment une liste existante ne modifie pas la liste il faut une instruction explicite Jurons jurons zut jurons saperlipopette mille sabords zut Remarque l l ment ajout doit tre lui m me une liste d ou la forme zut parce que l op rateur attend deux objets de m me type et ne fait pas de conversion implicite La construction d une liste peut donc tre programm e L T une liste vide for x in range l 9 L L x ajoute les l ments 1 par 1 Ajouter un nouvel l ment peut aussi se faire directement avec la m thode append jurons append enfer jurons gt saperlipopette mille sabords zut enfer Et pour ins rer directement un nouvel l ment on peut utiliser la m thode insert jurons insert 2 tonnerre jurons saperlipopette mille sabords tonnerre zut enfer Et notez que ces deux m thodes prennent comme argument un l ment de liste et non une liste la diff rence de l op rateur mais on peut aussi ins rer une liste si on veut Comme on l a dit
344. sayez de pr dire le r sultat de l expression Te gt Z Si vous aviez pr dit 3 5 c est parfait en fait vous tes en train de pratiquer la m thode incr mentale voqu e plus t t le programmeur exp riment a fait tellement d exp riences qu il est m me d anticiper de pr dire le r sultat de son code il acquiert une conscience aigu du fonctionnement du langage et l integre sa propre fa on de penser Une fois que tout ceci est devenu inconscient il devient rapide et efficace en fait c est horrible dire mais il se met penser comme la machine DONN ES L MENTAIRES 19 EXERCICES Voici les premiers exercices programmer par vous m me il est imp ratif de maitriser tout ce qui pr c de par la pratique parce que m me si on a bien compris l aspect th orique c est l motion que provoque l erreur qui va laisser l empreinte la plus profonde comme un enfant qui ne sait marcher que parce qu il est tombe et comme disent nos amis allemands c est la pratique qui fait le maitre px01 1 d finir deux variables valant respectivement votre ann e de naissance et l ann e en cours et programmer le calcul de votre ge en soustrayant l une de l autre px01 2 d finir les variables suivantes espace attention espace entre guillemets doubles apostrophe attention apostrophe entre guillemets doubles motl au Mots our mot3 d les guillemets simples marchent pare
345. scendre dedans Les types de donn es ont t vus au chapitre 1 pour chaque type il existe une fonction qui fabrique un l ment neutre de ce type par exemple l l ment neutre pour l addition d entiers est 0 et int sans argument retourne 0 de m me str retourne une chaine vide et list une liste vide et ainsi de suite On pourrait donc d finir ainsi un pr dicat is list cei is Ex ES rercurn E wer EI et l utiliser la place du pr dicat litt ral comme pour les exercices de la s rie pxO4 Les exercices ci dessous ont pour objectif d illustrer la manipulation de listes il n est pas absolument n cessaire d en maitriser tous les aspects mais ca peut vous aider plus tard pour manipuler des arrangements arrays similaires dans des langages comme ANSI C qui utilisent cette m me syntaxe pour acc der aux l ments d un vecteur d une table ou d une matrice px08 1 soit la liste erreurs Hiroshima 1945 ao t 6 Nagasaki 1945 ao t 91 Sachant que cette liste a deux l ments quelle expression permet d en extraire le premier l ment Et le deuxi me Quelle expression retrouve l ann e pour Nagasaki Comment retrouver le jour et quelle expression calculerait partir de erreurs le nombre de jours entre les deux dates px08 2 quelle expression rassemblerait les noms des deux villes dans une nouvelle liste px08 3 on dit qu une liste est plate lorsqu ell
346. se de sa diffusion logiciel libre disponible sur toutes les plate formes et d autre part pour ses qualit s intrins ques simple puissant et structurant du fait de son orientation objet 5 python Okay ce n est ni le plus simple des langages ni le plus puissant mais il repr sente un excellent compromis pour des utilisations qui couvrent de nombreux domaines du traitement de l information du multim dia aux applications num riques scientifiques en passant par l administration de syst mes d exploitation de sites wEB ou de forums VALUATION EN MODE INTERACTIF python Dans un environnement UNIX standard on appelle Python 2 5 2 r252 60911 Feb 22 2008 87 57 53 l interpr te par son nom en minuscules dans une GCC 4 8 1 Apple Computer Inc build 53635 on darwin Type help copyright credits or license for more information fen tre TERMINAL python L interpr te r pond avec son n de version ici 2 5 2 puis avec le symbole triple gt gt gt qui est une invitation entrer une expression valuer s il comprend ce qu on lui demande il retourne en r ponse le r sultat de l valuation sinon il affiche un message d erreur d taill Ce sHELL est un environnement de programmation et se superpose l environnement courant pour revenir l environnement pr c dent la commande standard est D il s agit d enfoncer simultan ment la touche de contr le tiquet e ctrl
347. se of freedom to assure everyone the effective freedom to copy and redistribute it with or without modifying it either commercially or noncommercially Secondarily this License preserves for the author and publisher a way to get credit for their work while not being considered responsible for modifications made by others This License is a kind of copyleft which means that derivative works of the document must themselves be free in the same sense It complements the GNU General Public License which is a copyleft license designed for free software We have designed this License in order to use it for manuals for free software because free software needs free documentation a free program should come with manuals providing the same freedoms that the software does But this License is not limited to software manuals it can be used for any textual work regardless of subject matter or whether it is published as a printed book We recommend this License principally for works whose purpose is instruction or reference 1 APPLICABILITY AND DEFINITIONS This License applies to any manual or other work in any medium that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License Such a notice grants a world wide royalty free license unlimited in duration to use that work under the conditions stated herein The Document below refers to any such manual or work Any member of the public
348. sequence doivent tre r p t es un certain nombre de fois c est l it ration Ensuite nous avons appris manipuler une forme assez sp ciale la fonction qui est un bout de code d fini ind pendamment utilisable dans une expression condition de lui passer les arguments qui lui permettent de param trer son comportement Utiliser une fonction revient donc d router temporairement la s quence d expressions en cours d valuation pour en valuer une autre Enfin les fonctions peuvent elles aussi sauter des instructions de leur propre s quence en valuant l instruction return C est encore une forme de d routement de la s quence en cours elle a pour effet de retourner juste apr s le point d o la fonction avait t appel e Nous avons ainsi vu 6 facons fondamentales de contr ler le d roulement d un programme 1 la cascade ou s quence d op rations INFRASTRUCTURES LOGICIELLES 107 2 l ex cution conditionnelle introduite par l instruction if contr l e par une expression bool enne la gestion d exceptions 8 introduite par l instruction try assortie de son acolyte except 4 l it ration implicitement exhaustive avec for ou explicitement conditionnelle contr l e par une expression logique avec while 5 l appel de fonction y compris l effet sophistiqu de eval 6 le retour au point d appel par l instruction return Nous ferons pour le moment l impasse sur certai
349. sition s quentielle distincte techniquement on pr f re parler d index mais a revient presque au m me Il est possible d acc der aux l ments d une s quence en disant pr cis ment ce qu on veut en extraire Prenons par exemple la chaine petit chat Je peux demander le premier element premier caract re de cette s quence en disant petit ehar I0 l ment 0 p Et bien s r a marcherait tout pareil avec des variables mots petit chat mots 0 l ment 0 p L op rateur est appel op rateur d indexation est obligatoirement utilis sous forme postfix e c est dire apres l expression dont on veut extraire une information De la m me facon mots 1 produit la valeur alors que mots 2 me donnerait t Remarquons qu en PYTHON comme d ailleurs dans beaucoup de langages de programmation les index commencent O on dit aussi qu ils sont ZERO BASED Et est la petite diff rence entre index et position la premiere position est l index la deuxi me l index 1 et ainsi de suite l est possible d extraire des segments SLICES de s quence en indiquant l intervalle souhait c est dire l index de d part et l index de fin de segment Si je veux les 5 premiers l ments de la s quence je peux dire petit chat 0 5 l ments 0 1 2 3 et 4 Ce qui est bizarre ici c est que si je demandais petit chat 5 j obtiendrais l espace c est dire le
350. sont g n ralisables d autres langages plus sophistiqu s tandis que la mise en ceuvre que je propose n est pas sp cifique PYTHON mais pourrait ais ment tre port e en d autres langages de programmation comme LISP SQUEAK OU ANSI C Pour commencer remettons nous dans l ambience avec le programme du calcul de la racine carr e par approximations successives propos la section 1AO 1 2 4 l introduction du cours INTRODUCTION L ARCHITECTURE DES ORDINATEURS px18 1 tant donne le programme original de la section 140 1 2 4 page 10 d but E 4 r p ter T EB y y 2 ran le coder convenablement en PYTHON et le faire tourner limiter les r p titions Ceci fait concentrons nous maintenant plus pr cis ment sur le BYTE CODE liste page 13 dans la sous section TRADUCTION DU PROGRAMME Le code comporte 6 instructions toutes sur 4 octets la premi re d marrant l adresse arbitraire 2997 Une autre fa on de consid rer ce programme serait sous la forme d une table adresse opcode arg1 arg2 arg 3 commentaire 2997 1 1 1000 0 r initial 3001 1 2 1020 0 diviseur 3005 2 2000 1000 1010 n r 3009 4 2000 1010 1010 r n r 3013 2 1010 1020 1000 r n r 2 3017 3 3005 0 0 branchement Ce point de vue m int resse parce qu il correspond justement la structure d un dictionnaire Ainsi pour repr senter ce programme on commencera par d finir un dictio
351. sorte particuli re de fen tre la diff rence d une page web o on ne peut que lire ou m me d un programme de courrier lectronique dont la fen tre permet aussi d crire la fen tre de terminal elle est active en ce sens qu elle r agit ce qu on crit dedans Ouvrir le terminal lance implicitement un programme appel bash et c est lui qui interpr te les commandes c est donc lui qui regarde ce qu il y a sur la ligne qu on vient de valider en appuyant sur la touche et qui l analyse mot par mot avant de comprendre ce qu elle veut dire En fait bash n est que l un des interpr tes possibles il en existe une flopp e d autres qu on d signe sous le nom g n rique de SHELL c est dire carapace pour voquer son r le d interface entre l utilisateur aux doigts gourds et les entrailles bien vuln rables du syst me d exploitation Bon il n est pas indispensable pour le moment d en savoir plus sur le contr le de l ordinateur par le biais du terminal mais vous trouverez dans le chapitre 9 une section qui lui est consacr e 2011 11 23 22 10 16 2007 2042 par J Feat 12 FORMES ET TRANSFORMATIONS R CAPITULATION En r alit les quelques pages qui pr c dent sont destin es tester que votre syst me est correctement configur pour effectuer les exercices de la suite du cours Le but inavou de cette section tait de vous pousser dans la piscine sans se poser la question de savoir si vous savi
352. spectivement voqu s aux sections 1 2 et 2 5 tout comme 123 et abracadabra sont des objets de types diff rents les objets graphiques sont eux aussi organis s en types et sont munis de m thodes certains objets sauront donc faire des trucs qui ne seront simplement pas possibles avec d autres La plupart des applications modernes mettent en uvre la m taphore des fen tres en fait une fen tre n est jamais qu une zone rectangulaire avec une image dedans qui d limite la sensibilit du programme ce rectangle est appel interface et tout ce qu on peut y faire avec la souris ou le clavier est consid r par le programme comme un v nement en dehors de cette fen tre c est autre chose et notre programme y est insensible L int r t des fen tres c est qu elles ont une dynamique du fait m me qu il y a un programme derri re et que ce programme peut r agir en fonction des v nements cette r action peut prendre de nombreuses formes de l affichage d un texte l extinction de la machine en passant par la lecture d un fichier mp3 ou le lancement d une autre application dans une autre fen tre Le code du programme n a pas besoin d avoir conscience qu il tourne derri re une interface graphique nous verrons un exemple qui utilise le programme de calcul du pluriel pr sent pr c demment sans en modifier une ligne de code Autrement dit pour r aliser une interface graphique il suffit d ajouter quelques
353. spond ce qu on appelle en Lisp une iste d associations ou a list pour faire short et s utilise de la m me mani re avec la fonction assoc tant donn e une cl d acc s on r cupererait directement la valeur associ e cette cl Les donn es repr sent es par les emplettes du chapitre 3 pourraient avantageusement tre d finies avec une structure de dictionnaire et voici ce que ca donnerait emplettes boulanger boulangerie superette superette Ici ne perdez pas de vue que la variable boulangerie est valu e au moment de l valuation de l expression donc qu la cl boulanger sera associ e la valeur de boulangerie idem pour superette Une expression telle que emplettes boulanger retourne la valeur associ e la cl boulanger c est dire haguettes 3 croissants 6 et une expression cl s multiples permet d extraire une information plus profonde emplettes superette autres trucs 4 videmment l encore ceci fonctionne indif remment avec des variables boutique superette article autres trucs emplettes boutique article 4 On ajoutera un nouvel l ment au dictionnaire en valuant emplettes picier sucre 1 kg sel 500 g Et on modifie un l ment existant en le red finissant comme si c tait une variable emplettes picier poivre boulanger croissants emplettes x y 6 Adjonction
354. ssion a pour valeur logique vrai procedure une s quence d instructions ou fonction qui ne retourne pas de valeur processeur machine logique programmation dirig e par les donn es technique ou le code est genere dynamiquement donc en tant que donn e d un programme puis valu c est la technique utilis e par la plupart des interpr tes mais aussi par exemple par les filtres anti spam programmation dirig e par les v nements technique ou les fonctionnalites d un programmes sont invoqu es indirectement par des v nements d eclencheurs g r s par un event manager qui se charge d appeler le handler defini pour cet v nement programme texte voquant un truc faire et comment le faire par extension le code ex cutable correspondant Prolog langage de programmation d claratif qui met en avant l objectif par rapport aux moyens d y parvenir un peu comme si on programmait avec des if l envers l o Lisp dit appuyer sur le bouton pour r cup rer votre monnaie Prolog dit pour r cup rer votre monnaie appuyer sur le bouton En C la m me chose se dirait vous n aviez qu faire l appoint PROM acronyme anglo saxon pour programmable read only memory queue structure s quentielle de donn es qui se g re sur le principe du premier arriv premier servi c est la converse d une pile r cursion peut tre crois e voir r cursivit
355. ster m me quand la fonction avance n est pas active si ces variables taient locales la fonction avance elles seraient dynamiquement cr es au moment de l activation de avance et donc dispara traient d s que avance a termin son boulot from Tkinter import gt variables globales D 30 diam tre X Y 10 10 coordonn es initiales nn nd Rint Rte REET animation def avance delta X delta Y global X Y X Y X delta X Y delta Y C coocrds boule X Y X D X D J c handlers def bas avance 0 10 def haut avance 0 10 def droite avance 10 0 def gauche avance 10 0 dd a widgets top TK top title animation manuelle Canvas top bg dark grey height 300 width 300 boule C create oval X Y X D D width 2 C pack side LEFT Button top text gauche command gauche pack Button top text droite command droite pack Button top text monte command haut Button top text descend command bas Button top text stop command top destroy pack side BOTTOM top mainloop La raison pour laquelle le programme est crit l envers c est que les HANDLERS doivent tre d j d finis au moment ou sont cr s les widgets avec lesquels ils vont tre li s tout se passe en principe comme si la partie du programme qui fait quelque chose
356. t append ligne else dex mot ligne return dex def nettoie x return x def prd d un dictionnaire for c in sorted d pean Tity Tit d e stoplist ce de du en le la mais on ou par pas pour qui un une split pilote indexe moi Comme vous le constatez l architecture du programme a subi quelques remaniements e fonction pilote regroupe d sormais les instructions de pilotage du programme autrefois tap es au top level comme une s quence d instructions 11 11 23 22 10 2007 2012 par J Feat 92 FORMES ET TRANSFORMATIONS e ne reste donc plus qu une seule instruction globale l appel de pilote qui prend comme argument le nom du fichier a indexer et un dictionnaire vide au d part e etil ne reste plus qu une variable globale stoplist qui doit pour l instant rester accessible la fonction indexe e dans ajoute l op ration a t remplac e par la m thode append plus efficace notez que la prudence voudrait qu on v rifie que le mot n est pas vide avant de l ajouter bien que ce soit en principe totalement inoffensif Hemarquez l expression for n ligne in enumerate flux dans la fonction pilote e un fichier est une s quence au m me titre qu une liste une fois ouvert je peux it rer sur chaque l ment c est dire chaque ligne pas besoin de read ni de split la fonction enumerate s applique une s quence et retourne en m me tem
357. t contrarier cet effet OFFSET DATA INSTRUCTION EMULATION 6A 10 74 jump 74 PC 0x74 l devrait en tre de m me pour les instructions de branchement conditionnel ainsi le code machine a l offset 0x A sera simule par un if et un pr dicat sur la valeur de l accumulateur OFFSET DATA INSTRUCTION EMULATION 1200 brz 8C if not PC 0x8C Le document original ne contient pas d exemple de l instruction brn mais on devine qu elle sera mulable de fa on tout fait similaire sauf que le test devra tre de la forme if A lt 0 Il existe une autre instruction load qui implique une valeur dont l adresse est directement donn e par l op rande de l opcode 0x40 et correspond fonctionnellement au store opcode 0x48 qu on vient de voir un exemple se trouve a l offset 4 du BOOT STRAP LOADER OFFSET DATA INSTRUCTION EMULATION 04 40 20 load 20 A data 0x20 Ce processeur est galement capable d acc der a la m moire de mani re indirecte c est dire que l adresse ou doit s effectuer la lecture ou l criture est donn e indirectement par la valeur situ e a l adresse sp cifi e par l op rande de l opcode 0xC0 pour load ou de l opcode 0xC8 pour store il n y a malheureusement aucune occurrence de l utilisation de ces instructions dans le document original mais la table de la section 13 3 nous en dit assez pour que nous puissions l interpr ter
358. t il y a dans votre dossier personnel un dossier nomm python sessions qui contient les fichiers qu il vous int resse d emballer proprement Si vous deviez le faire manuellement il suffirait de commander zip 99 adding px99 1 txt deflated 49 adding px99 2 Etxt deflated 52 adding px99 3 txt deflated 62 qui compresse puis ramasse tous ces fichiers dans une archive nomm e 99 zip Un probl me se poserait s il y avait dans ce dossier d autres fichiers que les trois qui nous int ressent le symbole s expanse automatiquement en une liste de tous les fichiers qui resident l donc ramasse tout ce qui traine dans ce cas on peut contraindre l expansion zip 99 DXJ9 7 LXxt garantit de ne s occuper que des fichiers dont le nom commence par px99 suivi d un caract re quelconque et finissant par txt c est ca que sert le une autre mani re de contraindre la liste expans e serait d utiliser une sp cification comme px99 1 3 txt le caract re possible en cette position du nom doit alors appartenir a l ensemble des chiffres de 1 3 ce qui exclut le fichier px99 4 txt de m me que le px99 a txt Tout se passe donc comme si on avait tap zip 99 prg EE px29 Mais quand je dis emball proprement le proprement signifie que le nom des fichiers et le nom de l archive sont conformes aux sp cifications du client les fichiers doivent tre renomm s pour comporter
359. t je peux directement taper son nom sur la ligne de commande et obtenir son ex cution 50 http www gnu org software bash manual bashref html 11 11 23 22 10 2007 2012 par J Feat DOCUMENTS ANNEXES 160 chmod utx zou zo Un tel fichier est appel script impliquant que le code source doit tre interpr t par opposition aux commandes en langage machine qui elles sont d j traduites par un compilateur sous une forme directement ex cutable par le processeur de la machine Il existe des dizaines de langages de script commencer par les diff rents programmes de sHELL SH TCSH BASH ZSH mais aussi AWK BISTRO C JAVASCRIPT MATLAB PERL PHP PYTHON RUBY OU encore SMALLTALK pour ne citer que les dix plus connus google scripting languages Ce qui caract rise les langages de script c est leur haut niveau de granularit dans le SHELL bash par exemple la plupart des op rations disponibles sont en fait des programmes complets d j prouv s et rod s et ceci pr sente un avantage consid rable un tel langage est concu pour une utilisation interactive ce qui facilite et acc l re sa mise au point on peut v rifier instantan ment le bon fonctionnement du programme chaque pas de sa r alisation le programme est donc la fois plus facile crire et plus rapide mettre au point Par contraste avec les langages de programmation de bas niveau comme le langage ANSI C o le pro
360. t par exemple Mississippi Au lieu d acc der au dictionnaire de la mani re habituelle je vais utiliser la m thode get qui a l avantage de me permettre de suppl er une valeur par d faut si l argument fourni n est pas une cl du dictionnaire occurrences for lettre in Mississippi occurrences lettre occurrences get lettre 0 1 print occurrences pour voir au fil du traitement print occurrences occurrences keys nombre d entr es ainsi cr es for x in occurrences t print x occurrences x les l ments du dictionnaire Cette m thode get appliqu e un objet de type dict peut prendre deux arguments le 1 est bien s r la cl d acc s et le 2 est une valeur par d faut si cette cl n a pas t trouv e e Ainsi au tout premier tour de la boucle for la cl M n existe pas encore dans mon dictionnaire occurrences et l expression occurrences get lettre 0 1 retournera la valeur par d faut 0 augment e de 1 avec un effet secondaire side effect maintenant la cl M de occurrences est associ e la valeur 1 e Aux 2 et 3 tours ce m canisme fonctionnera de la m me fa on et les cl s i et s se verront galement associ e une valeur 1 e Mais ce qui est int ressant c est ce qui se passe au 4 tour la cl s existe d j donc la m thode get retrouve la valeur 1 qu elle augmente de 1 avant de modifier cette entr e du dictionnaire occurrences
361. t ration sur les instructions for n in range 4 fois compte tenu du d codage a m pc valeur du program counter apply op m a 0 m a 1 1 ex cute l opcode L mlalo Jee3 34 sauf dans le cas d un branchement inconditionnel m pc 4 incr mente le program counter return m 1000 retourne la valeur calcul e En fait ce sequenceur n est jamais qu une b te it ration sur le d codage et l ex cution de chaque instruction compte tenu de la valeur courante du registre pc le param tre fois contr le le nombre d it rations la variable a comme adresse est la valeur du pc extraite du dictionnaire m m a est donc la liste repr sentant l instruction l adresse a m a 0 est le code de l op ration et le reste m a 1 c est les op randes l expression op m a 0 retourne la fonction qui correspond au code op ration m a 0 pour muler l ex cution on utilise ici apply qui applique cette fonction ses arguments repr sent s par le reste de la liste e et bien entendu apres chaque execution le registre pc doit tre incremente de 4 pour pointer sur l instruction suivante sauf dans le cas d un branchement code 3 Ainsi grace a apply tout se passe comme si run construisait a la vol e des appels de fonctions affecte 1 1000 affecte 2 1020 divise 2000 1000 1010 ajyoute 2000 1010 1010 encore 3005 effectuant par l m me l ex cution de l instruction qu il vient
362. t title gt n ou le et le ont respectivement pour code 224 et 233 en is0 8859 1 le reste tant de l ASCII Et c est l que les m thodes decode et encode vont r soudre notre probl me gt gt gt Ldecode iso 8859 1 encode utf 8 lt title gt institut d enseignement 3 0 distance universit xc3 xa9 paris 8 lt title gt n Autrement dit pour chaque ligne d une telle page il nous faut explicitement convertir la chaine iso 8859 1 une repr sentation d cod e partir de laquelle on pourra construire une nouvelle repr sentation cod e cette fois en uti 8 garantissant ainsi l uniformit de l index l argument des m thodes decode et encode est le nom du CODEC utiliser pour la conversion Alternativement on pourrait aussi lire toute la page d un coup et effectuer alors la conversion sur la totalit du texte comme pr conis dans le cours iAO 7 ca ne peut pas faire de mal La preuve c est ce que font en pratique tous les BROWSERS bien con us D ailleurs ce probl me n est pas sp cifique aux pages WEB et se poserait se r soudrait de la m me facon pour des fichiers texte locaux cette diff rence qu ils ne contiennent aucune information d encodage il faut le savoir avant de les ouvrir px29 1 adapter le script px28 3 pour qu il puisse indexer cons cutivement plusieurs pages WEB ind pendamment de leur codage utiliser par exemple l url de l igp et ce
363. t valide e Sielle l est il faut actualiser devine qui change donc de valeur e si c est une faute il faut proc der l tape suivante de la pendaison Et de toute facon il faut actualiser l affichage en appelant la fonction affiche Un mot d explication sur la m canique de la pendaison exemple typique de DATA DRIVEN PROGRAMMING la m thode pop 0 appliqu e une liste enl ve de cette liste l l ment de rang 0 et retourne cet l ment comme valeur ainsi e appliquer eval cette valeur dessine cette partie de la pendaison e laliste P tant amput e d un l ment chaque fois finira par tre vide et l expression P d un point de vue logique sera alors valu e comme False d o le test dans l expression conditionnelle de actualise La fonction valide attend donc 3 valeurs e le caract re actualiser e Original le mot original e devine ce qui a t devin jusqu pr sent M caniquement parlant valide est tr s simple elle scanne l original et si elle y rencontre le caractere C elle le concatene au r sultat R sinon c est le caract re situ la m me position mais dans devine qui sera concat n au r sultat R que ce soit une lettre ou non Lorsque le scan est termin ce que la fonction retourne c est justement le cumul des concat nations successives La fonction affiche est charg e de la mise jour de l interface elle ne manipule que des objets globaux
364. t du LIAGE C est pour ca que je l ai d finie en haut du programme mais j aurais pu aussi placer cette d finition Juste avant d appeler la m thode bind La fonction position est ce qu on appelle techniquement un HANDLER dans cette d finition le parametre nomm click repr sente l v nement envoy au HANDLER par mainloop au moment ou on clique un v nement est en fait un objet muni de propri t s en particulier les valeurs num riques enti res correspondant l abscisse et l ordonn e d un tel v nement Alors l expression s s click x click y comme on l avait vu pr c demment dans la section 4 3 TRADUCTION convertit en texte ces deux valeurs de sorte qu il ne reste plus qu l utiliser pour modifier le 15 valuer help math pour voir la documentation des fonctions import es arr t par la touche q INTERFACES FEN TRES ET BOUTONS 79 texte du Label l objet afficheur Comme vous l avez peut tre d j devin tous ces objets ont une repr sentation interne de type dict ce qui explique qu on puisse manipuler directement la valeur associ e la cl iext de afficheur comme d ailleurs n importe quelle cl de la liste retourn e par afficheur keys Une autre fa on plus standard de faire la m me chose serait d utiliser la m thode configure dont l avantage est qu elle permet de modifier en une seule invocation de multiples param tres Remarquez au passage que contrair
365. t ensemble les plus bricolos d entre nous pour voir C est comme ca qu ont t invent s les concepts d cran PAPER WHITE et d interface graphique d ou la m taphore des fen tres et celles des SCROLL THUMBS ou ascenseurs le concept d ic ne repr sentant des objets le concept de POINTING DEVICE Souris tablette graphique mais aussi la technologie de l imprimante LASER le langage POSTSCRIPT ou encore le r seau ETHERNET Et notre bon Dr Dobb a cette formule rafraichissante it is because the best way to understand the present is to study and invent multiple futures Tout un programme n est ce pas Q ANNEXES Le texte de ce chapitre est d abord une compilation d articles publi s sur le forum mais aussi des fragments de cours qu il a fallu d porter des pages culturelles qui disent des choses qu il faut conna tre pour comprendre le reste m me si on en retient rien d autre que le principe C est le cas des modules par exemple On peut tres bien importer le module turtle sans se poser la question de ce qui se passe au moment d une telle operation comme on peut avoir envie de comprendre pourquoi des fois on utilise la syntaxe from lt module gt et des fois pas On revisitera les questions souvent pos es propos de l indentation en PYTHON et on mettra au point quelques details a propos de la programmation en SHELL bash La derni re section PROGRAMMATION NUMERIQUE est le passage oblig pour ceux qui veule
366. t le point de d part et celui d arriv e et retourne une s quence de nombres entiers Vous pouvez si vous le souhaitez visualiser une telle s quence en valuant directement la fonction range sous l interprete range 10 range 10 20 Est ce l ce que vous attendiez La s quence a t elle bien le nombre d l ments pr vus Par pure curiosit essayez aussi range 10 20 2 range 20 10 2 M me si vous n avez pas encore r solu le probl me de casse de caract re nous en savons d j assez pour programmer l explosion d un mot e il nous faut au d part deux s quences vides une pour les voyelles l autre pour les consonnes MANIPULATION DE S QUENCES 35 e nous allons alors scanner le mot en ajoutant le caract re courant l une ou l autre s quence selon le r sultat retourn par la fonction voyelle e une fois le traitement termin nous devrions avoir les caract res r partis selon leur statut dans deux chaines distinctes Simple n est ce pas Alors passons au codage proprement dit mot abracadabra attention vide ror x in mot if voyelle x v x else c x V AG il ne nous reste plus qu examiner les valeurs respectives de v et de c pour v rifier que tout s est bien pass et c est que fait la derni re ligne d ailleurs l expression len v len c is len mot retourne vrai donc je n ai perdu aucun caract re en route Mainten
367. t logiques Il se trouve qu en combinant ces op rations rudimentaires par programme on peut r aliser des op rations beaucoup plus complexes et plus proches de notre intuition comme dessiner un cercle de plusieurs milliers de points en indiquant simplement les coordonn es de son centre et la mesure de son rayon Ce deuxi me niveau de complexit est directement accessible par le biais de langages de programmation qui disposent implicitement de ce savoir faire preprogramme Beaucoup de langages et donc de programmes crits dans ces langages peuvent tre directement interpr t s par un programme sp cifique justement appel interpr te D autres doivent d abord tre traduits sous une forme compr hensible par la machine avant de pouvoir tre ex cut s et c est l le r le d un compilateur autre programme sp cifique Dans cette introduction nous n utiliserons que des langages du premier type les langages interpr t s L int r t de cette approche est qu elle permet de travailler de mani re interactive un ordre donn l interpr te est imm diatement ex cut et si son r sultat est inattendu il est possible de le corriger sur le champ Dans le cas de programmes compiles il faut passer par une tape suppl mentaire pour voir le r sultat du programme ce qui n encourage pas la programmation incr mentale la seule m thode qui assure la maitrise totale du programme l ment par l ment L int r t des langages comp
368. t sa d finition est donc celle d une fonction O aire Dans le deuxi me cas le HANDLER sera invoqu avec comme argument l v nement qui a d clench le CALLBACK un tel HANDLER doit obligatoirement tre d fini avec un param tre qui repr sente l v nement en question qu il soit utilis ou non px21 1 coder et ex cuter le programme complet entrer une expression dans le champ de texte du 2011 11 23 22 10 16 2007 2042 par J Feat 78 FORMES ET TRANSFORMATIONS widget Entry et la r ponse s affichera dans le widget Label toutes les op rations arithm tiques habituelles et toutes les fonctions du module math sont disponibles en cas d erreur de syntaxe une exception avec TRACEBACK sera affich e dans le terminal c est au programmeur de blinder son programme px21 2 modifier ce programme pour qu il calcule le pluriel d un mot et non la valeur d une expression math matique au lieu d importer le module math ajouter simplement votre d finition de la fonction pluriel et arrangez vous pour qu elle soit invoqu e quelque part dans le handler valeur la place du m canisme qui jusque l valuait l expression math matique px21 3 simplifier la d finition de la fonction valeur sachant que la fonction str est devenu redondante encore que bien qu inutile elle n est pas vraiment nuisible puisque str appliqu e une chaine retourne cette chaine sans alt ration aucune 5 4 FRAME
369. tez y quelques mots sans int r t comme c est dans s en ou plus puis refermez le il n est pas vraiment crucial que la liste soit triee tant qu elle reste de taille modeste Maintenant repassez sous PYTHON et tapez ces 3 lignes de code Elux open stop list Tr stoplist flux read split explose en mots la lecture flux close et regardez ce que stoplist a maintenant dans le ventre a t elle bien pris en compte vos modifications Est ce que ca change le comportement du programme Remarquez l utilisation conjugu e des deux m thodes dans l expression flux read split ca veut dire que la valeur retourn e par fread de type str appelle directement la m thode split et que stoplist accueille donc directement une liste sans passer par un tat interm diaire cette criture condens e est une affaire de style ici le style dit fonctionnel et si vous n y voyez pas clair il est toujours possible de d composer l expression en deux instructions distinctes m me si c est du strict point de vue de la performance moins efficace 11 11 23 22 10 2007 2012 par J Feat 94 FORMES ET TRANSFORMATIONS 3 FINALISATION Peut tre pensez vous qu une vraie stoplist serait plus presentable donc plus facilement modifiable s il n y avait qu un mot par ligne Qu cela ne tienne px2 7 2 adapter le programme px2 1 de sorte que la stoplist soit enregistr e avec un saut de li
370. tion Cette commande accepte les m mes sp cifications de fichiers que cp mais d place litt ralement les fichiers sans avoir les recopier avant d effacer les originaux De surcroit si cette fonction est utilis e sans sp cification de d placement elle a pour effet de renommer les fichiers mv truc machin changera le nom de truc en machin DESTRUCTION DE FICHIERS RM La commande rm abr g pour remove accepte une liste de fichiers y compris par wildcards et les retire d finitivement du syst me de fichier cette op ration est irr m diable et on comprend pourquoi le syst me se prot ge en retirant le droit d acc s en criture aux cr tins qui farfouillent DESTRUCTION DE DOSSIERS RMDIR La commande rmdir abr g pour remove directory n est applicable que si le dossier est vide si par exemple le dossier w contient un dossier vide v il faudra commander dans l ordre rmdir w v w pour que v soit d truit avant que la commande n essaye de d truire w DOCUMENTATION Toutes ces commandes sont document es la fois de fa on interne et externe interne parce qu une erreur de syntaxe provoque un message qui rappelle quels sont les arguments attendus externe parce que toutes les commandes figurent dans un manuel en ligne qu on peut consulter directement gr ce la commande man Par exemple man Is affiche toutes les options accept es par cette commande et man rmdir vous explique comment d truire un dossi
371. tiv e 2011 11 23 22 10 16 2007 2012 par J Feat 28 FORMES ET TRANSFORMATIONS On parle de l arit d une fonction pour dire le nombre d arguments qu elle accepte une fonction unaire prend exactement un argument et ce serait une faute de l appeler avec deux arguments ou sans argument du tout idem pour les fonctions binaires ternaires e l argument c est la valeur avec laquelle la fonction est appel e e le param tre c est la variable qui repr sente cette valeur dans la definition Petite pr cision la variable qui nomme le param tre est dite ocale la fonction a veut dire qu une d finition de fonction d finit en m me temps un nouveau contexte propre la fonction et invisible de l ext rieur d icelle En cons quence vous pourriez tr s bien avoir d j d fini une variable truc et pourtant l appel de double ne modifiera pas votre truc vous qui se trouve dans un autre espace de noms que celui de la fonction Autrement dit peu importe le nom du parametre il ne peut pas cr er de conflits avec d autres symboles Essayez gt gt gt truc 100 gt gt gt double pa papa Queue Eee 100 Recapitulation formellement une definition commence avec l op rateur def suivi du nom de la fonction et d une liste de param tres entre parenth ses puis un et enfin une s quence d instructions qui d finit les calculs effectu s par la fonction termin e par une instruction return suivie d
372. totype je pr f re tre s r que l idiome utilis pour finaliser l application n aura pas de probl me de port e des variables un concept qu on examinera de plus pr s lorsqu on tudiera un langage comme ANSI C qui est un peu plus rigide que PYTHON Toujours propos de la fonction valide j ai ajout un 4 param tre appel initialis avec une chaine vide Dans un certain nombre de langages par exemple OBJECTIVE C OU C il est possible de d finir des parametres initialement pourvus de valeurs par d faut du m me coup ces param tres sont optionnels si on met l argument correspondant en appelant la fonction le param tre accepte la valeur de l argument sinon il prend par d faut la valeur sp cifi e dans la d finition de la fonction EXTENSIBILIT J ai d j fait plus haut quelques remarques sur l extensibilit de ce prototype la plus importante tait le nombre de mots disponibles qui peut tre facilement augment en cr ant un fichier contenant plein de mots s par s par des espaces ou des sauts de lignes px32 1 coder une version de ce script qui prend ses mots dans un fichier adaptez le code pour quil puisse manipuler des glyphes unicode et prendre en compte les caract res accentu s et neutralise la difference majuscule minuscule px32 2 quand il y tr s peu de mots choisir comme c est le cas dans le script ci dessus il arrive que le m me mot soit par pur hasard s lectionn
373. udimentaire et j cris ceci en tant pleinement conscient de l effort que tout a vous a quand m me demand Mais l important c est que vous devriez avoir maintenant des bases solides pour aborder les concepts mis en uvre dans les autres langages de programmation Des bases solides Quand on y regarde de pr s il n y en a qu une c est l application du principe diviser pour r gner qui implique 1 que les donn es peuvent tre manipul es d structur es puis restructur es et 2 que ces manipulations se font plus facilement en d l guant des fonctions ancillaires des t ches sp cifiques Ainsi le d nominateur commun tous les langages c est qu ils permettent de repr senter les donn es traiter ensuite c est la mani re de les repr senter qui est d terminante voire contraignante pour la fa on de les traiter il incombe donc au programmeur de choisir avec soin ses repr sentations initiales En fait les concepts ne diff rent gu re d un langage l autre et le principal obstacle surmonter pour l apprentissage d un nouveau langage c est la syntaxe de ses repr sentations que ce soient des donn es ou des programmes Certains comme LISP vous paraitront plus simples alors qu un langage de bas niveau comme C se montrera incroyablement primitif d autres comme PROLOG vous obligeront a exploser votre mode de raisonnement SQUEAK OU OBJECTIVE C vous demanderont de penser en termes de transmission de messa
374. ue urlopen peut aussi ouvrir un fichier local 21 attention cette fonction get href est cod e pour ne retourner que le 1 URL rencontr dans chaque ligne ARCHITECTURE DE PROGRAMMES 97 6 4 2 C T CLIENT En supposant que votre serveur ait la nuit derni re construit l index de toutes les pages wes de la plan te il ne reste plus qu l interroger en lui fournissant les mot cl s recherch s e s il y a un seul mot il suffit th oriquement d acc der au dictionnaire en lui fournissant cette cl d acc s la valeur est la liste des pages wEB index es pour ce mot e Sil y a plusieurs mots la chose devient un tout petit peu plus complexe parce qu il faut alors faire l intersection des pages WEB index es pour chacun de ces mots 6 4 3 PROBL MES ET SOLUTIONS Comme dans tout projet de programmation des probl mes peuvent se poser au cours de la r alisation le plus d licat non trait ici est celui de la d tection de la circularit cette page a t elle d j t visit e Si elle l a t n a t elle pas t modifi e entre temps Si oui alors peut tre faut il la r indexer donc supprimer cette r f rence pour tout mot de l index On devine que la maintenance de l index est un probleme non trivial d autant que cet index risque fort d tre assez volumineux en tout cas trop volumineux pour tre conserv en m moire il faudra probablement recourir aux techniques de bases de donn es Dan
375. uement on dit que l objet A est une instance de la classe B 28 mais voir aussi http oranlooney com lbyl vs eafp 29 autrement dit http foad iedparis8 net claroline courses E3c0 11 11 23 22 10 2007 2012 par J Feat 108 FORMES ET TRANSFORMATIONS class Mammifere object propl j allaite mes petits class Carnivore Mammifere prop2 je me nourris de chair class Chien Carnivore prop3 j aboie class Chat Carnivore prop3 je miaule On voit dans ces quatre lignes la d finition de quatre classes o Chien et Chat sont des instances de Carnivore qui est elle m me une instance de Mammifere instance de object Maintenant nous allons cr er encore trois nouveaux objets deux instances de Chien et une de Chat Milou Chien Gromit Chien Garfield Chat Une expression de la forme A B cr e l objet A en tant qu instance terminale de la classe B par instance terminale j entends individu et non plus une classe capable de g n rer encore d autres instances Ceci fait on fait cracher a ces objets ce qu ils ont dans le ventre print Milou 4 Milou propl Milou propz Milou props print Gromit 2 Gromit propl Gromit prop2 Gromit props print Garfield Garfield propl Garfield prop2 Garfield prop3 Ici une expression comme Garfield prop1 d note la propri t ou attribut prop de l objet Garfield or il n y a aucune propri t nomm e prop dans l objet Garfield
376. uivant de 80 pixels ce qui me laisse un espace de 30 pixels entre chaque caract re Tous comptes faits il me faut 5 donn es segments liste des abscisses et ordonn es pour chaque segment description dictionnaire de description des caract res ep valeur en pixels de l paisseur du trac d un segment couleur couleur du trac d un segment offset valeur en pixels de la translation decal cumul des translations successives initialis O L affichage d un mot quelconque sous reserve que chacun de ses caract res ait une description se fera par une double it ration e pour chaque caract re retrouve ses segments dans sa description e pour chaque segment SG retrouve les arguments pour reconstruire le texte de l expression create_line qui permettra de dessiner ce segment en tenant compte de la position du caract re e value cette chaine de caract re pour effectuer l affichage du segment e actualise la variable decal en pr vision du prochain affichage Notez l utilisation de la fonction repr la converse de eval chaque fois que je veux tre certain que eval pourra effectivement valuer l expression en question PROTOTYPAGE D APPLICATIONS 119 SCRIPT COMPLET description des sept segments LCD segments Xl Yl X2 Y2 CLS T Be LOT segment horizontal O 15 BU 55 6014 segment horizontal 1 15 110 55 110 segment horizontal 2 10 I5 10 55 segme
377. um either commercially or noncommercially provided that this License the copyright notices and the license notice saying this License applies to the Document are reproduced in all copies and that you add no other conditions whatsoever to those of this License You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute However you may accept compensation in exchange for copies If you distribute a large enough number of copies you must also follow the conditions in section 3 You may also lend copies under the same conditions stated above and you may publicly display copies 3 COPYING IN QUANTITY If you publish printed copies or copies in media that commonly have printed covers of the Document numbering more than 100 and the Document s license notice requires Cover Texts you must enclose the copies in covers that carry clearly and legibly all these Cover Texts Front Cover Texts on the front cover and Back Cover Texts on the back cover Both covers must also clearly and legibly identify you as the publisher of these copies The front cover must present the full title with all words of the title equally prominent and visible You may add other material on the covers in addition Copying with changes limited to the covers as long as they preserve the title of the Document and satisfy these conditions can be treated as verbatim copying in other respects If the re
378. umi re que d obscurit La fonction indexe est donc ainsi modifi e def indexe dex mots ligne un dictionnaire une liste de mots un entier for mot in mots if mot in dex if ligne in dex mot pass else dex mot ligne else dex mot ligne return dex Oh oh ca se complique Pour moi quand on atteint le troisi me niveau d indentation c est le signe que le temps est venu d en faire une abstraction sous la forme d une fonction autonome ici ajoute ARCHITECTURE DE PROGRAMMES 91 def ajoute dex mot ligne un dictionnaire un mot un entier if mot in dex if ligne in dex mot pass else dex mot ligne else dex mot ligne return dex L avantage c est que maintenant je peux dans la fonction indexe manipuler le mot avant de l indexer par exemple le nettoyer de sa virgule coll e ou tester s il n appartient pas a une stoplist de mots que j ai pas envie ou pas besoin d indexer typiquement les mots grammaticaux qui n ont pas grand int r t pour le lecteur qui s attend a un index exical def indexe dex mots ligne un dictionnaire une liste de mots un entier for mot in mots mot nettoie mot Li mot lower in stoplist lt pass else dex ajoute dex mot ligne return dex Vous allez sans doute trouver trange que j appelle ici une fonction nettoie qui n existe pas ou que je manipule une variable stoplist qu on avait jamais vu avant Mais souvenez
379. un pr c dant La s quence d instructions qui d finit Le calcul effectuer Le mot cl return suivi de La valeur retourner une ligne vide termine La d finition Le param tre repr sente La valeur de l argument son nom est Local La fonction pas de confusion possible Lors de L appel il doit y avoir autant d arguments que de param tres en d finition r f rence http docs python org reference compound_stmts html function definitions 2011 11 23 22 10 16 2007 2012 par J Feat 30 FORMES ET TRANSFORMATIONS 2 3 DISTINGUER LE VRAI DU FAUX valuation d expressions logiques Toute expression quand elle consid r e d un point de vue logique a une valeur dans l ensemble vrai faux et cette valeur est exclusive si ce n est pas vrai c est que c est faux et d ailleurs tout ce qui n est pas faux est forc ment vrai Il n y pas de place pour l incertitude il s agit d une logique bool enne Par abus de langage on parlera d expression bool enne pour dire que le seul point de vue qui nous int resse est sa valeur logique ou valeur de v rit Et ce type d expression est souvent appel aussi pr dicat ca d pend des langages mais aussi des programmeurs ou plut t de l historique de leur formation Ainsi on parle volontiers de pr dicats en LISP PYTHON OU PROLOG mais rarement en ANSI C OU en PERL Comme LISP avec equal et eq PYTHON dispose d un pr dicat d galit l op rateur et d un
380. un bref apercu du sHELL le programme qui permet d interagir directement avec le syst me d exploitation Le mot SHELL d note une abstraction celle de carapace qui prot ge les organes les plus vuln rables mais du m me coup joue le r le d interface entre le syst me d exploitation et celui qui en prend le contr le En fait c est une abstraction g n rique le terme de sHELL ne d signe pas un programme particulier mais plut t une fonction qui peut tre remplie par toute une cat gorie de programmes dont la particularit est de permettre l acc s des fonctions intimes du syst me Il existe donc plusieurs SHELLS qui constituent autant de langages de programmation L objectif premier du sHELL est en effet de permettre l automatisation de proc dures autrement dit la r alisation de programmes sous la forme de s quences d instructions ex cuter Ces programmes n ont parfois qu une seule instruction une commande tap e directement sur la ligne de commande du terminal ou console Presser la touche appel e return enter ou entr e aura alors pour effet d envoyer la commande c est dire de la soumettre au sHELL qui va se mettre en devoir de l interpr ter en fonction du contexte C est de cette notion de contexte techniquement appel e environnement que vous devez vous impr gner d s le d but votre programme peut tourner dans un certain environnement alors que dans un autre il sera totalement i
381. un dictionnaire en vrac c est un peu p nible a examiner je pourrais me faire cuire une petite fonction print dictionary disons prd qui m aiderait y voir clair def prd d d un dictionnaire for c in sorted d AR Ba 127 AT Cette fonction prd accepte un argument de type dict en trie les cl s par ordre croissant gr ce a la fonction sorted puis scanne la liste ainsi cr e pour afficher sur une ligne la c et la valeur qui lui est associ e la s quence est une convention pour afficher une tabulation Et maintenant gt gt gt prd index Un 2 0 bien 0 c est 1 du e 1 mais 0 mal 1 marche 1 ou s 1 pas 3 1 plaisir i 0 programme 1 eua s Z tourne 0 11 11 23 22 10 2007 2012 par J Feat 90 FORMES ET TRANSFORMATIONS tour Lil un x IU vraiment 1 affiche donc bien lisiblement les associations cl n de ligne ce qui me permet de d tecter deux nouveaux probl mes e un certain nombre de mots bien plaisir tout ont gard la virgule qui leur tait coll e e les mots d j index s pour la ligne 0 comme programme ou qui ont perdu leur r f rence originale remplac e par le n de ligne 1 et la diff rence Un un me chagrine de plus belle 6 1 ABSTRACTIONS Il devient clair qu il ne va pas tre facile de faire ce genre de boulot avec une b te expression for je vais l abstraire et en faire
382. une commande qu elle est indispensable d pend en grande partie de qui fait quoi avec le SHELL cependant il y en a une petite poign e qui se distingue du lot LISTE DES FICHIERS LS L arborescence de fichiers est ce qu on appelle une structure de donn es Et puisque cette structure organise des fichiers on a souvent besoin de lister le contenu d un dossier Tellement souvent que les interfaces graphiques listent le contenu du dossier courant sans m me qu on ait a leur demander si on est venu la c est bien pour y faire quelque chose donc autant savoir o est ce qu on met les pieds La commande SHELL pour lister le contenu d un dossier s appelle Is abr g de list et peut s utiliser sans argument aucun dans ce cas elle affiche simplement la liste des noms de fichiers et dossiers r pertori s On peut aussi lui dire d afficher selon d autres points de vue Ainsi comme dans l exemple ci dessous ajouter l option c est dire elle en argument affichera les m mes noms mais en format ong c est dire que ca va faire apparaitre pour chaque fichier un certain nombre de propri t s qui ne seraient pas apparentes en format normal Voici par exemple comment m apparait le directory usr share X11 quand list avec les options a et F ls alF usr share X11 total 92 drwxr xr x 4 root root 4096 2009 10 28 21 58 drwxr xr x 303 root root 12288 2009 11 23 10 57 drwxr xr x 62 root root 4096 2009 10 28 21 56 locale
383. une fonction indexe comme ca je serais plus l aise pour coder des expressions conditionnelles def indexe dex mots ligne un dictionnaire une liste de mots un entier for mot in mots if mot in dex dex mot ligne else dex mot ligne return dex Hemarquez l expression conditionnelle qui teste si l index lexical a d j la cl qu on se propose d ajouter si elle y est d j on se contente d ajouter le n de ligne celui qui est d j associ cette cl on obtient alors avec la d finition ci dessus index indexe texte 0 split 0 prd index Un s O bien c est mais 0 plaisir TO programme 0 qui s 0 tourne 0 un x IO U 0 0 Et l apparait un nouveau probleme en fait il y a trois fois le mot un dans la premi re ligne dont deux fois en minuscule d o la double r f rence 0 0 Avez vous une id e de comment r gler ce probl me de doublon Arr tez vous un instant et r fl chissez y ca ne devrait pas tre bien terrible il suffirait de tester si le n de ligne que je suis sur le point d ajouter se trouve d j dans la liste associ e cette cl l if ligne in dex mot pass else dex mot ligne L instruction pass fait exactement ca rien Bon c est s r je pourrais inverser le test en lui mettant un not et conomiser ainsi une ligne de code mais j y perdrais en clart et pour l instant j ai plus besoin de l
384. ur la machine exercices Des exercices suppl mentaires sont propos s pour prouver votre compr hension du cours et votre capacit adapter les notions acquises des probl mes diff rents con us pour servir d auto valuation ce ne sont jamais que des petites variantes des exemples d j expliqu s et ils supposent simplement l acuit n cessaire pour distinguer la l g re diff rence de forme entre les donn es de l exemple et celles de l exercice En effet la programmation est un art et au d but il faut apprendre faire ses gammes la m thode la plus gratifiante reste l exploration interactive 11 semble qu il y ait deux attitudes 1 l explorateur teste des expressions directement dans l interpr te jusqu ce que ca fasse le boulot demand 2 l expert est un ancien explorateur il est d j pass par l tellement souvent qu il peut anticiper les r ponses de l interpr te donc programmer directement la s quence d instructions qui devrait aboutir au r sultat Alors que le second n a qu a crire dans un fichier le code qu il faut le premier doit v rifier en ex cutant ses lignes de code avec PYTHON qu il n a pas crit que des b tises il y a donc deux mani res d utiliser l interpr te en dialoguant interactivement ou en ex cutant des scripts r dig s sous la forme de fichiers L exercice est concu pour concr tiser un principe une notion th orique et installer la compr hension force d
385. ur qui doit tre m moris l adresse sp cifi e par le troisi me def divise x y adresse m adresse m x m y L addition cod e 4 serait tout fait similaire def ajoute x y adresse m adresse m x m y Quant au branchement cod 3 c est tout b tement une alt ration du registre pc def encore adresse m pc adresse Gardez bien conscience que comme on l avait d j vu en iLP 1 2 APPLICATION DE FONCTIONS affecte divise ajoute et encore sont des objets d un type particulier type affecte type function On va se donner une autre table ou chaque code d op ration sera associ l op ration elle m me toujours au moyen d un dictionnaire op 1 affecte 2 divise 3 encore 4 ajoute Notons que les valeurs pour chaque cl ne sont pas des chaines de caract res mais des r f rences vulgairement appel es pointeurs aux fonctions elles m mes Si maintenant en mode interactif on demandait PYTHON d valuer op sa r ponse montrerait la v ritable nature des valeurs associ es des 2011 11 23 22 10 16 2007 2042 par J Feat 70 FORMES ET TRANSFORMATIONS adresses mille tonnerres gt DP 1 function affecte at 0x717f0 gt 2 function divise at 0x71830 gt 3 r function encore at 0x718b0 gt 4 function ajoute at 0x71870 gt Bon Il est maintenant possible de d finir un s quenceur qui simule l ex cution de ce programme def run fois i
386. urs de syst me en 2 ann e Encore une fonction que vous retrouverez telle quelle en ANSI c system prend une chaine de caract res argument et invoque le sHELL en lui passant cette chaine from os import system exit code system 18 La valeur retourn e par system est le code num rique qu aurait retourn la commande si on l avait ex cut e partir du SHELL code qu on mettrait en vidence en demandant echo imm diatement apr s en pratique c est O s il y a O erreur toute autre valeur denotant une anomalie dans le d roulement du processus invoqu par la commande Si la chaine pass e en argument comporte plusieurs lignes tout se passe donc comme si on ex cutait un SHELL SCRIPT Encore un exemple de programme idiot en supposant bien s r que le script zou py existe from os import system prog zou py prog ohmod urz prog 4 XAn 4 prog exit code system proy ou le code de retour sera celui du programme zou py la derni re commande Ici le caract re n dans la chaine prog est un alin a ou inefeed qui fait que prog comporte bien deux lignes distinctes Comme on l a vu plus haut la distribution PYTHON 2 5 comprend 380 modules standard et il en existe plein d autres plus ou moins sp cialis s la page http pypi python org pypi en recense plus de 14000 ce qui veut dire qu il y a peut tre d j une solution au probl me que vous avez l intention de r sou
387. us faciliter la t che les fichiers de code machine peuvent tre t l charg s directement partir du site de l IED code de l exercice 13 8 http foad iedparis8 net claroline courses E464 document python code paper 2013 8 hexcode code de l exercice 13 9 http foad iedparis8 net claroline courses E464 document python code paper 2013 9 hexcode code du boot strap loader http foad iedparis8 net claroline courses E464 document python code paper 20boot strap 20loader hexcode 11 11 23 22 10 2007 2012 par J Feat 140 SCRIPT COMPLET FORMES ET TRANSFORMATIONS usr bin env python t lt coding were data 0 256 data bytes used as memory segment table opcode table 0x00 load A 0x10 Lume UO _ UI UsTls lt 0 PC lt DIZ if not A PC lg 0x20 add A 07 sab A 0x22 nand f amp 0x40 load A Ily our print 1 0x48 store data AT IX497 in data input val 0x60 add UA datal 1 sub 1 77 0x62 mand A amp data J ly load A Gataldatal 11 Onc ie Tous FE print 1171 OxC9 store F7 data datal 1 A I Lin input val 2 yt UsmUS Tadd Ao dartaljdatal II T USES eae
388. usqu puisement des donn es d origine Je partirai donc de l l ment 0 et progresserai de 2 en 2 jusqu puisement de la liste de mots m 0 while m lt len mots FA mots m mots m 1 print FA preuve inutile que tout marche bien m 2 FA affiche moi le dico J en profite ici pour pr senter une nouvelle structure de contr le le moulin conditionnel 11 s introduit avec une instruction while suivie d un pr dicat la condition pour continuer et d un deux points vient ensuite indent e comme il faut la s quence des instructions qui doivent tre r p titivement ex cut es tant que le pr dicat value vrai Ceci n tait bien s r qu un pr texte pour vous compliquer la vie au lieu d utiliser while j aurais pu coder la m me chose avec un for en pr cisant la fonction range le point de d part celui d arriv e ainsi que la foul e de progression vulgairement appel e STRIDE v rifiez for m in range 0 len mots 2 FA mots m mots m 1 Il y a en fin de chapitre une 3 technique pour calculer la m me chose avec la fonction zip partir de deux listes distinctes essayez la il y a bien des cas ou ca peut servir de facon imm diate Le r sultat f Ilait milk ties the That Catt 0616 arinks pectit little DOsm s du some est bien ce que j attendais ce qui fait que je peux d j l utiliser FA boit drinks FA chat
389. ut donc aussi avoir des attributs ow variables Locales La fa on de structurer Les donn es implique un compromis entre La complexit des structures de donn es La simplicit des algorithmes qui Les exploitent donn es et programmes sont des Vases communicants simplifier l un revient complexifier L autre et vice versa pour des raisons d intelligibilt La tendance est de simplifier Les algorithmes en sophistiquant Les structures de donn es c est La tendance des langages objets seueak mais aussi celle des langages d claratifs PROLOG en PROLOG n y a plus d algonithme explicite que des donn es 101 11 11 23 22 10 2007 2012 par J Feat 102 FORMES ET TRANSFORMATIONS La cr ation d un programme s appuie sur Le principe DIVISER POUR R GNER esprit humain a du mal g rer des concepts plus de 3 niveaux sans fatre d abstractions c est pourquot LL est plus facile de limiter Les boucles 3 niveaux d imbrication d exploser Le programme en de multiples fonctions m me si Le traitement serait possible en une s quence MONOLITHIQKE d instructions m me si La fonction ne prend qu une ligne en pratique il w y a pas de diff rences entre Les fonctions d finies par Le programmeur celles qui sont d finies dans des modules celles qui sont intrins ques au Langage La programmation est essentiellement une Activit CR ATIVE o LL est normal d inventer une bonne fa on de r soudre un probl me serait concevoi
390. v rifi e que si la conjonction des deux sous pr dicats valuent True Une instruction comme passe not passe a un effet de bascule OU TOGGLE si passe est vrai et que le feu est au rouge passe devient faux la n gation bascule la valeur de v rit Cette m me instruction aura l effet contraire faux vrai si on value la ligne ci dessous if not passe and feu is vert passe not passe Remarquez que si passe tait vrai au moment de son evaluation en tant que predicat la conjonction not passe and feu is vert aurait donn faux donc passe n aurait pas change Les valuations conditionnelles sont quelque chose de difficile a ma triser parce que ca fait intervenir le contexte du programme et qu on n a pas toujours conscience de l tat dans lequel sont les variables au moment o le programme doit prendre une d cision Voici pour r capituler le fragment de programme qui r gle la circulation feu vert if feu vert passe True passe devient vrai else passe False feu rouge if passe and feu rouge passe not passe passe devient faux feu vert if not passe and feu vert passe not passe passe devient vrai Hemarquez les lignes vides elles sont dues au fait qu apr s un if l interpr te me propose son invite de continuation et que je dois presser la touche pour lui faire comprendre que je n ai rien ajouter voir l annexe 9 2 pour plus de d tails sur ce
391. valent of covers if the Document is in electronic form Otherwise they must appear on printed covers that bracket the whole aggregate 8 TRANSLATION Translation is considered a kind of modification so you may distribute translations of the Document under the terms of section 4 Replacing Invariant Sections with translations requires special permission from their copyright holders but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections You may include a translation of this License and all the license notices in the Document and any Warranty Disclaimers provided that you also include the original English version of this License and the original versions of those notices and disclaimers In case of a disagreement between the translation and the original version of this License or a notice or disclaimer the original version will prevail If a section in the Document is Entitled Acknowledgements Dedications or History the requirement section 4 to Preserve its Title section 1 will typically require changing the actual title 9 TERMINATION You may not copy modify sublicense or distribute the Document except as expressly provided for under this License Any other attempt to copy modify sublicense or distribute the Document is void and will automatically terminate your rights under this License However parties who have received copies or rights f
392. value d abord a pour d couvrir qu il repr sente la quantit 2 puis fait de m me pour b avant d appliquer l op rateur et d obtenir la quantit 5 repr sent e par ce symbole dans la r ponse Notez que le r sultat de l valuation a b n est pas m moris il est calcul affich puis aussit t oubli Il est fr quent d valuer des expressions juste pour voir ce que a donne et c est le fondement de l approche exploratoire dans l apprentissage d un langage En fait j aurais pu utiliser un nouveau symbole pour m moriser donc repr senter le r sultat de cette valuation autrement dit de ce calcul Gardons d sormais l esprit que les variables ne sont que des repr sentants des symboles qui repr sentent quelque chose d autre souvent une valeur litt rale mais pas forc ment nous y reviendrons Comprenez bien que lorsque PYTHON interpr te l expression b il value d abord c trouve sa valeur actuelle et change alors la valeur de b l ancienne valeur est oubli e si on avait voulu la garder il aurait fallu la m moriser de sorte que b repr sente maintenant la m me valeur que c et si c venait changer de valeur b n en saurait rien et continuerait imperturbablement repr senter ce qu on lui a dit de repr senter Ce qu on pourrait illustrer ainsi b 5 Je c 5 7 Remarque 1 notez que dans l expression c a b la valeur de la variable c depend de celles de et de b au moment d
393. votre machine codent par d faut le texte en utf 8 que Konsole le terminal KDE accepte du texte ainsi cod et que gedit open office ou kate lisent et crivent du texte sous forme utf 8 En pratique a veut dire que vous pouvez entrer en PYTHON en interactif une chaine de caract res non ASCII et que PYTHON la reconnaitra automatiquement comme cod e en utf 8 quoi wuf de p ques no l Mais il faut savoir qu un glyphef comme va pour les besoins de la representation interne tre transform en un code point C593 6 une valeur sur 16 bits m moris e comme 2 octets cons cutifs si on demande la valeur de quoi ce que PYTHON nous montrera c est la repr sentation interne de cette sequence en termes d octets cette chaine est en fait de type BYTE STRING xc5 x93uf de p xc3 xa2ques xc3 xa0 no xc3 xabl 6 symbole graphique LISTES ACCES INDEXE 51 Pour ce type d objet les valeurs hors de l intervalle 32 128 sont repr sent es par des s quences d chappement encore une convention ou le back slash introduit un code num rique ici en hexad cimal dont nous pouvons d duire que le glyphe aurait comme code point C3A2i6 le glyphe C3A016 et le glyphe C3ABig Selon les r glages de votre console il est aussi possible que cette repr sentation interne apparaisse en octal ou base 8 strictement quivalente ce qu on vient de voir 13051223uf de pi303 12
394. vous que d finition et ex cution sont deux phases distinctes Et c est ca qui est magique d un coup de baguette je fais sortir de mon chapeau stoplist ce de du en le la mais on ou par pas pour qui un une split def nettoie x return x Ah la belle affaire un stub une fonction qui retourne ce qu on lui envoie Oui mais attendez pour que je puisse tester mon code vite fait il faut que cette fonction existe apr s j ai une petite id e de ce qu elle devrait faire mais je ne ne veux pas me disperser pour le moment Hemarquez au passage que le test d appartenance la stoplist se fait sur la forme minuscule du mot et voil comment je me d barrasse du Un Voici donc notre programme pr t tre test sur l ensemble du texte def pilote fichier dex nom du fichier dictionnaire flux open fichier r ouverture en mode lecture for n ligne in enumerate flux on a besoin den dex indexe dex ligne split n 1 indexation de la n i me ligne flux closet c est fini prd dex pr sente les r sultats return dex retourne les donn es def indexe dex mots ligne un dictionnaire une liste de mots un entier for mot iu mots mot nettoie mot if mot lower in Stoplist pass supprimer else dex ajoute dex mot ligne return dex def ajoute dex mot ligne un dictionnaire un mot un entier if mot in dex if ligne in dex mot pass supprimer else dex mo
395. x in rangeid f s print chro chr x 32 En effet c est bien ce j attendais et ceci laisse pr sager que la fonction voyelle d finie plus haut ne fonctionnera correctement que si son argument est minuscule s il est majuscule il sera automatiquement assimil une consonne Emb tant n est il pas Nous verrons bient t comment r soudre ce probl me mais vous pouvez en attendant r fl chir votre propre id e de la solution Par exemple vous pouvez tester si le code d un caract re est compris entre ord A et ord Z et le convertir en minuscules en ajoutant 32 ce code n est ce pas Ou toute autre astuce qui vous viendrait l esprit tout est permis puisque vous ne risquez pas de casser quoi que ce soit et d ailleurs personne ne vous regarde Ceci explique le r sultat du 3 test de px04 1 qui compare 2 chaines et retourne faux alors que la premi re est plus grande que la deuxi me c est en fait une comparaison lexico graphique fond e sur le codage et si a lt w alors gt wxcvbn est forc ment faux Remarque le programme ci dessus utilise une variante d expression it rative il s agit toujours d une s quence et il s agit toujours bien de scanner cette s quence l ment par l ment sauf qu ici la s quence est la valeur retourn e par la fonction range Le mot range signifie intervalle et cette fonction ici est binaire elle prend 2 arguments qui constituen
396. y ins rant for x in mot decode utf 8 2 convertir le mot avant de le passer explose Avantages de la seconde approche e casimplifie le code explose n a pas besoin de prendre des pr cautions particuli res e cameten vidence haut niveau qu on travaille avec de l unicode au lieu de l enfouir au fin fond d un fragment de code relativement inintelligible Naturellement si la fonction voyelle ne sait pas reconnaitre une voyelle unicode ca va poser un probl me r glons le tout de suite en d finissant l ensemble des voyelles comme un litt ral pr fix par un u voyelles u a eoc amp 8i o u les voyelles les plus courantes en fran ais def voyelle x return x in voyelles teste la pr sence d un l ment dans l ensemble Sachant pertinemment que lorsque explose invoquera voyelle c est un caract re unicode qu il lui passera comme argument D ou le r sultat gt gt gt for x in explose u c ur print len x x pour voir les glyphes et les compter du m me coup 2 cr 4 u Comme on le voit dans les exemples ci dessus le pr fixe u nous permet de d finir directement une chaine litt rale unicode en fait les trois expressions suivantes produisent des r sultats identiques gt gt gt u ceur u xe9c u0153ur xe9 gt gt gt cour decode utf 8 u xe9c u0153ur xe9 gt gt gt unicode ceur u xe9c u0153ur xe9 Attention on peut
Download Pdf Manuals
Related Search
Related Contents
Bedienungsanleitung Oster CKSTDFFM40 User's Manual VIZIO VBR140 Product Specifications Lenovo P/N 39T5991 User's Manual Minka Lavery 4757-206 Installation Guide 1 - Wikia Concevoir & dispenser la formation des agents dans le 9015-610 02_11 Champion WXT IO.indd Copyright © All rights reserved.
Failed to retrieve file