Transciption du Déroulement de l'Atelier
francis.ngatsi a rejoint le salon 11:57 davin.baragiotta a rejoint le salon 12:33 franck.kouyami a rejoint le salon 12:42
davin.baragiotta 27/08/2012 12:45:21 test ok ça marche 27/08/2012 12:45:24
arnaud.amelina@auf.org 27/08/2012 12:45:47 C'est bon 27/08/2012 12:45:50 darko.stanar a rejoint le salon 12:46 doan.manh.ha a rejoint le salon 12:47 shafeek.sumser a rejoint le salon 12:47 patrick.mwamba a rejoint le salon 12:49 photo-valentin.kouadio@auf.org a rejoint le salon 12:51
photo-valentin.kouadio@auf.org 27/08/2012 12:51:43 salut couz abrosine2 a rejoint le salon 12:51 Tri a rejoint le salon 12:52
arnaud.amelina@auf.org 27/08/2012 12:52:39 Salut les Couz soyez tousles bienvenues 27/08/2012 12:52:47 chanesakhone.chitsaya a rejoint le salon 12:52
Tri 27/08/2012 12:52:49 bonjour mesdames et messieurs
arnaud.amelina@auf.org 27/08/2012 12:52:59 Saluto
doan.manh.ha 27/08/2012 12:53:04
patrick.mwamba 27/08/2012 12:53:15 Bonjour
davin.baragiotta 27/08/2012 12:53:26 eheh!
abrosine2 27/08/2012 12:53:31 Bonjour à tous
arnaud.amelina@auf.org 27/08/2012 12:53:50 Ben tu vois Davin finalement on a du monde shafeek.sumser a quitté la salle 12:53 sekou.diall a rejoint le salon 12:53
arnaud.amelina@auf.org 27/08/2012 12:54:01 et ça continue
photo-valentin.kouadio@auf.org 27/08/2012 12:54:05 yep
sekou.diall 27/08/2012 12:54:24 Salut à tous
davin.baragiotta 27/08/2012 12:54:53 arnaud.amelina@auf.org: "en sale!"
chanesakhone.chitsaya 27/08/2012 12:54:58 bj à tous
davin.baragiotta 27/08/2012 12:55:09 wow, ça va être cool tout ça
arnaud.amelina@auf.org 27/08/2012 12:55:12 Ouep
davin.baragiotta 27/08/2012 12:55:24 j'espère que tout ce monde va rester pour l,atelier git qui suit après! (coup de pub) 27/08/2012 12:55:27 david.violette a rejoint le salon 12:55
david.violette 27/08/2012 12:56:16 bonjour tout le monde
doan.manh.ha 27/08/2012 12:56:52 salut david
arnaud.amelina@auf.org 27/08/2012 12:57:01 Saluto David emmanuel.tagne-tagne a rejoint le salon 12:57
arnaud.amelina@auf.org 27/08/2012 12:57:39 on aura le grand Patron parmi nous
davin.baragiotta 27/08/2012 12:58:19 ah non désolé, monsieur Cerquiglini s'est excusé 27/08/2012 12:58:21 victor.bruneau a rejoint le salon 12:58
arnaud.amelina@auf.org 27/08/2012 12:58:40
Il sera valablement représenté 27/08/2012 12:58:50 christine.legris a rejoint le salon 12:58
davin.baragiotta 27/08/2012 12:59:03 ahaha
victor.bruneau 27/08/2012 12:59:23 Salut à tous
arnaud.amelina@auf.org 27/08/2012 12:59:37 Voilà celui qui a été annoncé tran.xuan.huy a rejoint le salon 13:00
arnaud.amelina@auf.org 27/08/2012 13:00:11 Bievenue à Monsieur le représentant de Monsieur Cerquiglini
victor.bruneau 27/08/2012 13:00:18
arnaud.amelina@auf.org 27/08/2012 13:00:26
davin.baragiotta 27/08/2012 13:00:39 9h00 : coup d'envoi arnaud.amelina@auf.org, victor.bruneau : un mot d'intro? 27/08/2012 13:00:53
victor.bruneau 27/08/2012 13:01:00 oui, rapide
arnaud.amelina@auf.org 27/08/2012 13:01:13 Il est l'heure
victor.bruneau 27/08/2012 13:01:32 un petit mot pour remercier le comité d'organisation
arnaud.amelina@auf.org 27/08/2012 13:01:43
victor.bruneau 27/08/2012 13:01:49 qui a fait unbon boulit (sinon on serait pas là) merci aussi à ceux qui vont faire les ateliers 27/08/2012 13:02:20 et à tous participants 27/08/2012 13:02:33 BONNE SEMAINE TECH 2012 27/08/2012 13:02:42 C'est parti 27/08/2012 13:02:51 à toi davin.baragiotta 27/08/2012 13:02:59
arnaud.amelina@auf.org 27/08/2012 13:03:01 Merci Grand Boss
davin.baragiotta 27/08/2012 13:03:31 ok avant de commencer rappel de procédure comme arnaud disait 27/08/2012 13:03:36 dans CE salon, c,est l,atelier 27/08/2012 13:03:44
1 les discussions et questions, pour laisser le discours fluide : dans salon tech svp 27/08/2012 13:04:00
2 -------------------- DÉBUT : Atelier Python ------------------ 27/08/2012 13:04:07
3 Bonjour à tous 27/08/2012 13:04:23
4 vous devriez avoir 3 écrans ouverts 27/08/2012 13:04:32
5 1. cette fenêtre 27/08/2012 13:04:37
6 2. un navigateur 27/08/2012 13:04:43
7 3. un interpréteur 27/08/2012 13:04:47
8 (terminal je veux dire) 27/08/2012 13:04:53
9 http://wiki.auf.org/wikiteki/Projet/SemaineTech/2012 27/08/2012 13:05:02
10 premier atelier = Python 27/08/2012 13:05:08
11 voici la page présentation : 27/08/2012 13:05:13
12 http://wiki.auf.org/wikiteki/Projet/SemaineTech/2012/Ateliers/Python 27/08/2012 13:05:17
13 je prends pour acquis que vous avez tout ce qu'il faut d'installer 27/08/2012 13:05:28
14 si vous n'avez pas iPython : pas grave, on va faire sans 27/08/2012 13:05:38
15 tout le contenu est ici : 27/08/2012 13:05:54
16 http://wiki.auf.org/wikiteki/Ateliers/Python/Base/Support 27/08/2012 13:05:54
17 je vous demande donc de garder cette page ouvert... c'est le plan de match 27/08/2012 13:06:07
18 INTRODUCTION 27/08/2012 13:06:11
19 notre but dans cet atelier 27/08/2012 13:06:20
20 c'est de mettre les mains dans python 27/08/2012 13:06:29
21 on va coder 27/08/2012 13:06:33
22 d,abord interactivement... dans l'interpréteur 27/08/2012 13:06:43
23 ensuite on va mettre ce qui nous intéresse dans un script 27/08/2012 13:06:53
24 (un fichier) 27/08/2012 13:06:55
25 qu'on va exécuter 27/08/2012 13:07:00
26 vous avez la documentation officielle en lien 27/08/2012 13:07:13
27 elle a un tutoriel 27/08/2012 13:07:20
28 peut-être un peu long 27/08/2012 13:07:24
29 et aussi, la doc de la "standard library" 27/08/2012 13:07:38
30 c'est à dire de ce qui vient par défauit avec Python 27/08/2012 13:07:49
31 vous devez avoir un éditeur texte aussi 27/08/2012 13:08:01
32 vi, emacs... peu importe... moi j'utilise gedit 27/08/2012 13:08:12
33 (et je n'ai pas honte ) 27/08/2012 13:08:17
34 bon, c'est parti 27/08/2012 13:08:27
35 dans votre terminal, lancez l'interpréteur ipython 27/08/2012 13:08:43
36 (ou python pour ceux qui ne l'ont pas) 27/08/2012 13:08:49
37 s'agit juste de taper :
38 python
39 ou
40 ipython 27/08/2012 13:09:01
41 fawaz.tairou a rejoint le salon 13:09
42
43 davin.baragiotta 27/08/2012 13:09:24
44 ce qui est super avec python
45 c'est sa simplicité 27/08/2012 13:09:29
46 puissant... mais simple 27/08/2012 13:09:33
47 simplicité d'abord dans la syntaxe 27/08/2012 13:09:43
48 frumence.boroto a rejoint le salon 13:09
49
50 davin.baragiotta 27/08/2012 13:09:58
51 ah... un mot sur les interpréteurs... rapide
52 un interpréteur écoute le code que tu saisies et retournes la valeur associé à l'exécution 27/08/2012 13:10:17
53 dans ipython c'est écrit "In"... pour input 27/08/2012 13:10:30
54 et ça retourne "Out" pour output de l'exécution 27/08/2012 13:10:40
55 commence par instancier une variable avec un entier 27/08/2012 13:11:01
56 a = 12 27/08/2012 13:11:03
57 ça retourne rien... 27/08/2012 13:11:13
58 si on saisit ensuite "a" 27/08/2012 13:11:21
59 ça retourne 12 27/08/2012 13:11:28
60 toutes nos instructions restent en mémoire dans interpréteur... 27/08/2012 13:11:44
61 on va tester la syntaxe d'un commentaire 27/08/2012 13:11:51
62 c'est 1 27/08/2012 13:11:53
63 oups 27/08/2012 13:11:54
64 ''#'' 27/08/2012 13:11:56
65 ''# ceci est un commentaire ''27/08/2012 13:12:01
66 ça fait rien 27/08/2012 13:12:04
67 ça pas de /* */ 27/08/2012 13:12:15
68 en python 27/08/2012 13:12:18
69 ni de // 27/08/2012 13:12:20
70 aussi, vous avez remarqué qu'on ne met pas de $ devant la variable 27/08/2012 13:12:37
71 fianlement... pas de ; en fin de ligne 27/08/2012 13:12:53
72 ça fait du code plus facile à lire 27/08/2012 13:13:03
73 ah oui... pas besoin non plus des {} pour les blocs de code 27/08/2012 13:13:22
74 donc une fonctino (on y reviendra) ça s'écrit comme ça : 27/08/2012 13:13:35
75 def coucou():
76 return 27/08/2012 13:13:44
77 très important : c'est l'indentation qui nous dispense des {} 27/08/2012 13:14:04
78 en Python l'indentation est obligatoire 27/08/2012 13:14:11
79 par convention... on utilise 4 espaces... 27/08/2012 13:14:23
80 *pas* des tabs.... 4 espaces 27/08/2012 13:14:29
81 niry.andriambelo a rejoint le salon 13:14
82
83 davin.baragiotta 27/08/2012 13:14:44
84 configurez votre éditeur pour transformer les tabs en 4 espaces
85 pour terminer avec la syntaxe... : il existe une "stylistique" pythonesque 27/08/2012 13:15:12
86 pour rendre le code plus lisible 27/08/2012 13:15:17
87 calin.dordia a rejoint le salon 13:15
88
89 davin.baragiotta 27/08/2012 13:15:27
90 ce sont des recommandations (largement suivies)
91 PEP8 27/08/2012 13:15:37
92 http://www.python.org/dev/peps/pep-0008/ 27/08/2012 13:15:45
93 vous pouvez y jeter un oeil pendant qu'on récolte les questions dans salon tech 27/08/2012 13:16:01
94 des questions? 27/08/2012 13:16:07
95 calin.dordia a quitté la salle 13:16
96
97 davin.baragiotta 27/08/2012 13:16:36
98 ok, pas de nouvelles... bonnes nouvelles (en même temps opn a rien fait encore)
99 variables : 27/08/2012 13:16:43
100 les variables sont des "noms" qui font "référence" à une "valeur" 27/08/2012 13:17:06
101 ex.: 27/08/2012 13:17:08
102 a = 12 27/08/2012 13:17:11
103 b = a 27/08/2012 13:17:15
104 (on dit que b prend la valeur de a) 27/08/2012 13:17:31
105 avec la fonction "buiklt-in" id() 27/08/2012 13:17:41
106 on va vérifier l'emplacement mémoire des valeurs 27/08/2012 13:17:51
107 id(a) 27/08/2012 13:17:55
108 id(b) 27/08/2012 13:17:57
109 on voit que c'est identique... donc : 27/08/2012 13:18:04
110 les noms "a" et "b" pointent vers la même chose 27/08/2012 13:18:15
111 parlons maintenant des types 27/08/2012 13:18:26
112 quand on programme on manipule de l'info... et l'info est typée... car on veut pas faire la même chose avec des entiers et des chaines de caractères 27/08/2012 13:18:52
113 voyons les types de base en Python 27/08/2012 13:19:01
114 (tapez dans votre terminal en même temps) 27/08/2012 13:19:09
115 None est un nom réservé qui veut dire "rien"... 27/08/2012 13:19:26
116 comme NULL dans les bases de données 27/08/2012 13:19:35
117 on a aussi les booléens ; False et True 27/08/2012 13:19:45
118 les majuscules sont importantes ici 27/08/2012 13:19:52
119 none, false, true : ça n'existe pas 27/08/2012 13:19:59
120 dans le numérique on a les entiers : 27/08/2012 13:20:14
121 15 27/08/2012 13:20:16
122 et aussi les float... pour le décimal : 15.5 27/08/2012 13:20:27
123 évidemment, pas de virgule... un point 27/08/2012 13:20:35
124 on a les chaînes de caractères : string et unicode... 27/08/2012 13:20:47
125 c'est bon de savoir que c'est 2 choses différentes... 27/08/2012 13:21:04
126 je vous passe le détail sur les encodages 27/08/2012 13:21:19
127 mais pour déclarer une chaine unicode (soyons modernes) 27/08/2012 13:21:31
128 il faut mettre le u devant les apostrophes (quote) 27/08/2012 13:21:43
129 u"" 27/08/2012 13:21:46
130 ça peut aussi être des single quote 27/08/2012 13:21:53
131 u'' 27/08/2012 13:21:55
132 il existe aussi les chaînes "raw" (brutes) : r"" 27/08/2012 13:22:12
133 on verra ça dans django 27/08/2012 13:22:17
134 .... 27/08/2012 13:22:25
135 avec ça... on a la base... 27/08/2012 13:22:34
136 après ce qui est intéressant... c'est de créer des structures de données 27/08/2012 13:22:49
137 ex.: j'ai un prénom et un nom, moi... 27/08/2012 13:23:00
138 je voudrais manipuler les 2 dans un objet personne... 27/08/2012 13:23:15
139 premier type de structure, ou conteneur d'info : 27/08/2012 13:23:27
140 les listes 27/08/2012 13:23:30
141 l = [] 27/08/2012 13:23:34
142 ça c'est une liste vide 27/08/2012 13:23:39
143 comme en math, pour déclarer des éléments, on met des virgules 27/08/2012 13:23:51
144 l = [1,2,3] 27/08/2012 13:23:57
145 liste ayant 3 entiers comme éléments 27/08/2012 13:24:07
146 la liste est ordonnée... on y reviendra dans un instant 27/08/2012 13:24:28
147 (c,est pas un sac de valeur... y,a un ordre) 27/08/2012 13:24:38
148 t = tuple = () 27/08/2012 13:24:43
149 c'est exactement comme une liste... sauf c'est immuable 27/08/2012 13:24:54
150 si on peut ajouter un élément à une liste : 27/08/2012 13:25:01
151 l.append(4) 27/08/2012 13:25:08
152 on ne peut pas avec un tuple... 27/08/2012 13:25:14
153 ça sert à quoi? principalement pour des raisons de performance... et on le voit partout 27/08/2012 13:25:31
154 donc retenir que () = tuple 27/08/2012 13:25:40
155 exemple : 27/08/2012 13:25:42
156 t = (1,2,3,4) 27/08/2012 13:25:48
157 c'est un tuple de 4 éléments (tous entiers) 27/08/2012 13:25:57
158 balla.fall a rejoint le salon 13:26
159
160 davin.baragiotta 27/08/2012 13:26:14
161 finalement, la dernière structure c'est un "dictionnaire"
162 c'est un peu comme un array dans d'autres langages 27/08/2012 13:26:25
163 syntaxe de dictionnaire vide : 27/08/2012 13:26:36
164 d = {} 27/08/2012 13:26:40
165 le dictionnaire stocke des associations clé-valeur 27/08/2012 13:26:56
166 la clé DOIT être unique... 27/08/2012 13:27:06
167 un peu comme une entrée dans un dictionnaire 27/08/2012 13:27:15
168 ex.: 27/08/2012 13:27:19
169 d = {
170 'prenom':'Davin',
171 'nom':'Baragiotta',
172 } 27/08/2012 13:27:51
173 un dictionnaire avec 2 clés (prenom et nom) 27/08/2012 13:28:06
174 ayant respectivement les valeurs 'Davin' et 'Baragiotta' (des strings) 27/08/2012 13:28:24
175 finalement... les ensembles.... dernier type 27/08/2012 13:28:39
176 un ensemble, au sens mathématique est une collection non ordonnée d'éléments unique 27/08/2012 13:28:59
177 on crée un ensemble (set en anglais) en utilisant set() sur une collection (liste, tuple, dictionnaire) 27/08/2012 13:29:26
178 jouons. 27/08/2012 13:29:32
179 créer la liste : 27/08/2012 13:29:37
180 l = [1,2,3,3,3,4,5,5] 27/08/2012 13:29:48
181 shafeek.sumser a rejoint le salon 13:29
182
183 davin.baragiotta 27/08/2012 13:29:59
184 comptons les éléments
185 8 27/08/2012 13:30:05
186 len(l) 27/08/2012 13:30:09
187 eric.mcsween a rejoint le salon 13:30
188
189 davin.baragiotta 27/08/2012 13:30:24
190 len = length... fonction built-in (on y revient)
191 maintenant... on en fait un ensemble : 27/08/2012 13:30:33
192 e = set(l) 27/08/2012 13:30:36
193 len(e) 27/08/2012 13:30:43
194 5 27/08/2012 13:31:05
195 en tapant seulement "e" dans l'interpréteur 27/08/2012 13:31:18
196 il vous retourne les valeurs de l'ensemble 27/08/2012 13:31:29
197 e 27/08/2012 13:31:32
198
199 In [8]: e
200 Out[8]: set([1, 2, 3, 4, 5])
201 27/08/2012 13:31:40
202 on vient bien qu'un ensemble est non redondant... 27/08/2012 13:31:51
203 questions? 27/08/2012 13:31:55
204
205 arnaud.amelina@auf.org 27/08/2012 13:32:22
206 n/a
207
208 davin.baragiotta 27/08/2012 13:32:29
209 ok on continue
210 python offre des raccourcis sympas 27/08/2012 13:32:43
211 suppons que vous avez des valeurs dans un tuple : 27/08/2012 13:32:53
212 t = (34,56) 27/08/2012 13:33:03
213 disons que ce soit des coordonnées d'un piont dans l'espace... 27/08/2012 13:33:14
214 x et y quoi! 27/08/2012 13:33:18
215 et qu'on veuille manipuler x et y indépendamment 27/08/2012 13:33:32
216 on peut faire simple ceci : 27/08/2012 13:33:37
217 chamback.pierre a rejoint le salon 13:33
218
219 davin.baragiotta 27/08/2012 13:33:53
220 x, y = t
221 (euh je crois que je me trompe... faut unpacker, minute) 27/08/2012 13:34:07
222 ah si ça marche 27/08/2012 13:34:34
223
224 In [10]: t = (34,56)
225
226 In [11]: x, y = t
227
228 In [12]: x
229 Out[12]: 34
230
231 In [13]: y
232 Out[13]: 56
233 27/08/2012 13:34:46
234 c'est ce qu'on appelle unpacker (ou packer, dans le sens inverse, si je ne me trompe) 27/08/2012 13:35:03
235 python est un langage fortement typé 27/08/2012 13:35:20
236 c,est à dire qu'on ne fait pas n'importe quoi avec les variables... 27/08/2012 13:35:32
237 si a est un entier (a = 15) 27/08/2012 13:35:40
238 alors c'est un entier... je peut pas, par exemple, le concaténer avec une chaine de caractère 27/08/2012 13:35:57
239 'davin' + 5 27/08/2012 13:36:02
240 ça n'a pas de sens en Python... 27/08/2012 13:36:07
241 il ne va pas faire comme en PHP et dire "aaaah... tu voudrais que 5 soit un string?" 27/08/2012 13:36:26
242 et donner : 'davin5' 27/08/2012 13:36:30
243 fortement typé donc... 27/08/2012 13:36:40
244 louis-beethoven.montrose a rejoint le salon 13:36
245
246 davin.baragiotta 27/08/2012 13:36:55
247 ça veut dire que si on veut changer de type, faut le faire explicitement
248 avec des opérateurs pour ça : 27/08/2012 13:37:00
249 str(5) 27/08/2012 13:37:04
250
251 In [16]: cinq = str(5)
252
253 In [17]: type(cinq)
254 Out[17]: <type 'str'>
255 27/08/2012 13:37:36
256 type() = autre fonction built-in (qui vient par défaut)... ça donne le type de la variable 27/08/2012 13:37:58
257 on voit que la variable nommé "cinq" est un str après la transformation de 5 par str() 27/08/2012 13:38:21
258 c'est ce qu'on appelle le "transtypage" 27/08/2012 13:38:34
259 mais vous aurez remarqué 27/08/2012 13:38:41
260 que python est dynamqieu 27/08/2012 13:38:56
261 pas besoin de déclarer les variables et leur type 27/08/2012 13:39:05
262
263 a = int()
264 a = 5 27/08/2012 13:39:13
265 première ligne est inutile 27/08/2012 13:39:21
266 bon on n'a rien fait de rigolo... mais on a vu la base 27/08/2012 13:39:33
267 Built-in : les fonctions 27/08/2012 13:39:45
268 http://docs.python.org/library/fonctions.html 27/08/2012 13:39:50
269 dans la doc officielle... on voit toutes les fonctions de base 27/08/2012 13:40:01
270 y'en a pas beaucoup vous me direz... 27/08/2012 13:40:15
271 mais c'est parce que Python travaille plus avec des objets 27/08/2012 13:40:31
272 comme Java, par exemple 27/08/2012 13:40:36
273 dans les fonctions de pas 27/08/2012 13:40:43
274 j'en ai énuméré quelques unes d'utile 27/08/2012 13:40:57
275 certaines qu'on a déjà vu : 27/08/2012 13:41:07
276 type() 27/08/2012 13:41:10
277 int(), str().... 27/08/2012 13:41:19
278 len() 27/08/2012 13:41:21
279 on les apprendra pas par coeur : faut juste savoir où elles sont définies dans la doc 27/08/2012 13:41:36
280 dernier point de théorie et ensuite on s'amuse 27/08/2012 13:41:55
281 Objets et namespaces... 27/08/2012 13:42:04
282 en Python TOUT est un objet... 27/08/2012 13:42:13
283 un objet (en programmation orienté-objet) c'est rien d,autre qu'une strucutre de données 27/08/2012 13:42:30
284 un peu comme nos dictionnaires : d = {} 27/08/2012 13:42:45
285 un objet a donc "de l'information sur lui"... un peu comme on peut vous demander votre nom, vos études, vos jobs passées 27/08/2012 13:43:22
286 on peut interroger un objet 27/08/2012 13:43:27
287 on l'interroge en appelant des "attributs" 27/08/2012 13:43:47
288 ce sont des varaibles sur l'objet 27/08/2012 13:43:52
289 ou 27/08/2012 13:43:53
290 en appelant des "méthodes" 27/08/2012 13:43:59
291 se sont des fonctions sur l'objet 27/08/2012 13:44:08
292 les "attributs" et les "méthodes" ont tous des "noms" 27/08/2012 13:44:27
293 namespaces : ce sont des noms qui vivient dans "l'ESPACE" de l'objet 27/08/2012 13:44:45
294 on puorrait dire "derrière lui" 27/08/2012 13:44:52
295 exemple : 27/08/2012 13:44:58
296 on va prendre une chaine de caractère : 27/08/2012 13:45:09
297 prenom = "Davin" 27/08/2012 13:45:14
298 avec ipython 27/08/2012 13:45:23
299 on accède aux "noms derrière la chaîne de caractère" 27/08/2012 13:45:35
300 en utilisant le poibnt : . 27/08/2012 13:45:41
301 suivi d'un tab : 27/08/2012 13:45:46
302
303 In [18]: prenom = "Davin"
304
305 In [19]: prenom.
306 prenom.__add__ prenom.__repr__ prenom.istitle
307 prenom.__class__ prenom.__rmod__ prenom.isupper
308 prenom.__contains__ prenom.__rmul__ prenom.join
309 prenom.__delattr__ prenom.__setattr__ prenom.ljust
310 prenom.__doc__ prenom.__sizeof__ prenom.lower
311 prenom.__eq__ prenom.__str__ prenom.lstrip
312 prenom.__format__ prenom.__subclasshook__ prenom.partition
313 prenom.__ge__ prenom._formatter_field_name_split prenom.replace
314 prenom.__getattribute__ prenom._formatter_parser prenom.rfind
315 prenom.__getitem__ prenom.capitalize prenom.rindex
316 prenom.__getnewargs__ prenom.center prenom.rjust
317 prenom.__getslice__ prenom.count prenom.rpartition
318 prenom.__gt__ prenom.decode prenom.rsplit
319 prenom.__hash__ prenom.encode prenom.rstrip
320 prenom.__init__ prenom.endswith prenom.split
321 prenom.__le__ prenom.expandtabs prenom.splitlines
322 prenom.__len__ prenom.find prenom.startswith
323 In [19]: prenom.
324 27/08/2012 13:46:06
325 ahaha! 27/08/2012 13:46:12
326 on vient de découvrir plein de truc "sur" (ou derrière) ma chapine de caractère... 27/08/2012 13:46:30
327 ce sont les noms des attributs et méthodes 27/08/2012 13:46:37
328 notre but dans la vie 27/08/2012 13:46:50
329 c'est de "faire des trucs" avec notre information 27/08/2012 13:47:00
330 c'est ça programmer... 27/08/2012 13:47:04
331 là, on se rend compte que Python nous donne plein de fonction directement sur l'objet... 27/08/2012 13:47:27
332 startswith... hmmm 27/08/2012 13:47:36
333 qu'est-ce que ça peut bien faire? 27/08/2012 13:47:44
334 on va continuer notre "introspection" de l'objet en appelant l'aide 27/08/2012 13:48:00
335 ipython :
336 prenom.startswith? 27/08/2012 13:48:18
337 (si vous avez trop de noms et voulez sortir de la liste : q pour quit) 27/08/2012 13:48:51
338
339 In [20]: prenom.startswith?
340 Type: builtin_function_or_method
341 Base Class: <type 'builtin_function_or_method'>
342 String Form: <built-in method startswith of str object at 0x967d940>
343 Namespace: Interactive
344 Docstring:
345 S.startswith(prefix[, start[, end]]) -> bool
346
347 Return True if S starts with the specified prefix, False otherwise.
348 With optional start, test S beginning at that position.
349 With optional end, stop comparing S at that position.
350 prefix can also be a tuple of strings to try.
351 27/08/2012 13:49:07
352 ok donc on tombe direct sur la documentation de la méthode "startswith"! 27/08/2012 13:49:33
353 testons maitenant! 27/08/2012 13:49:45
354 on comprend que startswith nous dit si le string commence avec un prefix particulier : 27/08/2012 13:50:13
355 prenom.startswith('W') 27/08/2012 13:50:21
356
357 In [21]: prenom.startswith('W')
358 Out[21]: False
359 27/08/2012 13:50:34
360 la méthode nous retourne False... non 'Davin' ne commence pas avec 'W' 27/08/2012 13:50:47
361
362 In [22]: prenom.startswith('D')
363 Out[22]: True
364 27/08/2012 13:50:57
365 ça peut sembler trivial... 27/08/2012 13:51:07
366 mais on fait de l'introspection et ça vous permet : 27/08/2012 13:51:16
367 de découvrir tout ce que vous pouvez faire avec python 27/08/2012 13:51:27
368 dans votre interpréteur.... 27/08/2012 13:51:38
369 quand vous avez bien exploré ce que vous pouviez faire : coder le résultat finale du traitement que vous voulez 27/08/2012 13:52:01
370 dans un script! 27/08/2012 13:52:04
371 on y arrive 27/08/2012 13:52:07
372 regardons rapido ce que les listes et dictionnaires ont dans le ventre 27/08/2012 13:52:23
373 par exemple 27/08/2012 13:52:28
374
375 In [23]: l = [1,2,3]
376
377 In [24]: l.
378 l.__add__ l.__ge__ l.__iter__ l.__repr__ l.append
379 l.__class__ l.__getattribute__ l.__le__ l.__reversed__ l.count
380 l.__contains__ l.__getitem__ l.__len__ l.__rmul__ l.extend
381 l.__delattr__ l.__getslice__ l.__lt__ l.__setattr__ l.index
382 l.__delitem__ l.__gt__ l.__mul__ l.__setitem__ l.insert
383 l.__delslice__ l.__hash__ l.__ne__ l.__setslice__ l.pop
384 l.__doc__ l.__iadd__ l.__new__ l.__sizeof__ l.remove
385 l.__eq__ l.__imul__ l.__reduce__ l.__str__ l.reverse
386 l.__format__ l.__init__ l.__reduce_ex__ l.__subclasshook__ l.sort
387 27/08/2012 13:52:48
388 sort... tient on peut trier une liste... normal c'est ordonné... 27/08/2012 13:53:03
389 remove, ok on comprend sans lire la doc que c'est pour enlever un élément 27/08/2012 13:53:18
390 on teste rapido voir si on est pas trop fou : 27/08/2012 13:53:25
391 l.remove(2) 27/08/2012 13:53:32
392
393 In [24]: l.remove(2)
394
395 In [25]: l
396 Out[25]: [1, 3]
397 27/08/2012 13:53:44
398 ouais ok c'est ce qu'on pensait 27/08/2012 13:53:50
399 reverse : eh oui, retourne la liste de sens 27/08/2012 13:54:06
400 .insert... ah, y,a insert et append... 27/08/2012 13:54:19
401 c'est quoi la différence? 27/08/2012 13:54:24
402 solution : lire la doc 27/08/2012 13:54:31
403 27/08/2012 13:54:31
404 l.append? 27/08/2012 13:54:35
405 l.insert? 27/08/2012 13:54:40
406 pour ceux qui n'ont pas ipython 27/08/2012 13:54:48
407 (et pas de bonne raisons, car ipython est plus interactive que python) 27/08/2012 13:55:02
408 pour obtenir les noms :
409 dir(l) 27/08/2012 13:55:15
410 dir = directory des noms... 27/08/2012 13:55:23
411 pour obtenir l'aide sur un objet ou sa méthode ou attribut) : 27/08/2012 13:55:38
412 help(l.append) 27/08/2012 13:55:42
413 dernier truc 27/08/2012 13:55:54
414 si vous tapez juste le NOM de la méthode... 27/08/2012 13:56:07
415 sans l'exécuter 27/08/2012 13:56:14
416 vous obtenez (ex): 27/08/2012 13:56:24
417
418 In [26]: l.remove
419 Out[26]: <built-in method remove of list object at 0x967030c>
420 27/08/2012 13:56:34
421 l'interpréteur vous dit "remove est une méthode built-in de l'objet list... (et emplacement mémoire) 27/08/2012 13:57:07
422 pas intéressant 27/08/2012 13:57:10
423 pour exécuter la méthode 27/08/2012 13:57:16
424 faut mettre les parentheses 27/08/2012 13:57:23
425 l.remove() 27/08/2012 13:57:26
426
427 In [27]: l.remove()
428 ---------------------------------------------------------------------------
429 TypeError Traceback (most recent call last)
430
431 /net/nfs-authnss.b.ca.auf/home/davin.baragiotta/<ipython console> in <module>()
432
433 TypeError: remove() takes exactly one argument (0 given)
434 27/08/2012 13:57:36
435 27/08/2012 13:57:39
436 ça, c'est une erreur... 27/08/2012 13:57:45
437 je vous laisse lire... c'est plutôt explicite 27/08/2012 13:57:56
438 ça se lit comme suit 27/08/2012 13:58:37
439 on a une erreur de Type 27/08/2012 13:58:48
440 claudine.mosozi a rejoint le salon 13:59
441
442 davin.baragiotta 27/08/2012 13:59:19
443 la méthode remove() s'attend à avoir un seul argument (un paramètre si on veut) et on lui a rien donné
444 en gros... remove veut absolument la chose à enlever en paramètre sinon il retourne une erreur 27/08/2012 13:59:40
445 l.remove(1) 27/08/2012 13:59:46
446
447 In [28]: l.remove(1)
448
449 In [29]: l
450 Out[29]: [3]
451 27/08/2012 13:59:59
452 c'est bien d'expérimenter dans l,interpréteur... on veut pas d'erreur dans notre script 27/08/2012 14:00:19
453 ok, il nous reste une heure.... je vais accéléré un peu si il n'y a pas de questions 27/08/2012 14:00:39
454 questions? 27/08/2012 14:00:41
455 photo-valentin.kouadio@auf.org a quitté la salle 14:01
456 photo-valentin.kouadio a rejoint le salon 14:01
457
458 davin.baragiotta 27/08/2012 14:01:32
459 bon...
460 alors je continue 27/08/2012 14:01:36
461
462 arnaud.amelina@auf.org 27/08/2012 14:01:40
463 balla.fall 27/08/2012 13:50:41
464 QUESTION : signification de ....:
465 QUESTION : signification de ....: PASS 27/08/2012 13:51:23
466 QUESTION : signification de ....: except
467
468 davin.baragiotta 27/08/2012 14:01:45
469 ah
470 PASS? 27/08/2012 14:01:56
471 thierry.tsitoara a rejoint le salon 14:02
472
473 davin.baragiotta 27/08/2012 14:02:13
474 except fait partie des structures de gestion des erreurs... on ne l'utilise pas seul
475 ex.: 27/08/2012 14:02:18
476 try:
477 l.remove()
478 except TypeError:
479 pass 27/08/2012 14:02:34
480 (try en première ligne, désolé) 27/08/2012 14:02:47
481 ça se lit... essaie d'enlever un élément de ma liste même si je ne te passe pas d'argument... 27/08/2012 14:03:06
482 si y'a une erreur TypeError... on la capte et on fait le traitement suivant : 27/08/2012 14:03:25
483 pass 27/08/2012 14:03:26
484 pass = mot clé... pour dire on fait rien 27/08/2012 14:03:34
485 utiliser pass le moins possible 27/08/2012 14:04:01
486 on l'utilise pour commencer un truc et y revenir plus tard 27/08/2012 14:04:11
487 ex.: 27/08/2012 14:04:12
488 je définis une fonction que je ne termine pas : 27/08/2012 14:04:25
489
490 def suppression_indesirables():
491 pass 27/08/2012 14:04:44
492
493 arnaud.amelina@auf.org 27/08/2012 14:05:05
494 n/a
495
496 davin.baragiotta 27/08/2012 14:05:17
497 dans mon code, on voit bien que je veux créer une fonction qui supprime les indésirables... mais je ne sais pas quoi coder, donc je mets
498 pass 27/08/2012 14:05:18
499 voilà 27/08/2012 14:05:20
500 je continue 27/08/2012 14:05:24
501 on est rendu à "introspection" 27/08/2012 14:05:32
502 je vous invite à coder un peu de données 27/08/2012 14:05:47
503 pour le plaisir de sentir du python dans les doigts 27/08/2012 14:05:57
504 nom = "Davin Baragiotta" 27/08/2012 14:06:16
505 prenom, nom = nom.split() 27/08/2012 14:06:27
506 nom.split? 27/08/2012 14:06:48
507 testez le résultat : 27/08/2012 14:06:58
508 prenom 27/08/2012 14:07:00
509 nom 27/08/2012 14:07:01
510 aaaaah... votre administration veut que tous les noms de familles soient majusucules 27/08/2012 14:07:20
511 car ils savent pas discerner le prénom du nom? 27/08/2012 14:07:31
512 (c'est du vécu, je le jure) 27/08/2012 14:07:38
513 nom.upper() 27/08/2012 14:07:43
514 vous pouvez vérifier si la valeur est altérée ou pas 27/08/2012 14:08:01
515
516 In [30]: nom = 'Baragiotta'
517
518 In [31]: nom.upper()
519 Out[31]: 'BARAGIOTTA'
520
521 In [32]: nom
522 Out[32]: 'Baragiotta'
523 27/08/2012 14:08:23
524 ah tiens... non 27/08/2012 14:08:27
525 c'est un service à la volée que de le mettre en majuscule... mais le nom original reste 27/08/2012 14:08:43
526 un truc pas mal à savoir c'est le .join() 27/08/2012 14:09:07
527 sur un string 27/08/2012 14:09:12
528 on peut utiliser join 27/08/2012 14:09:17
529 pour que ce string serve de jointure à des éléments d'une collection (une liste disons) 27/08/2012 14:09:38
530 exemple : 27/08/2012 14:09:43
531 '.'.join([1,2,3]) 27/08/2012 14:09:53
532 la liste d'entiers 1, 2, 3 devrait être réunies par des points 27/08/2012 14:10:10
533 mais 27/08/2012 14:10:13
534
535 In [33]: '.'.join([1,2,3])
536 ---------------------------------------------------------------------------
537 TypeError Traceback (most recent call last)
538
539 /net/nfs-authnss.b.ca.auf/home/davin.baragiotta/<ipython console> in <module>()
540
541 TypeError: sequence item 0: expected string, int found
542 27/08/2012 14:10:29
543 python est fortement typé 27/08/2012 14:10:34
544 on relie pas des entiers avec des strings 27/08/2012 14:10:44
545 '.'.join(['davin','moussa','eric']) 27/08/2012 14:11:08
546
547 In [34]: '.'.join(['davin','moussa','eric'])
548 Out[34]: 'davin.moussa.eric'
549 27/08/2012 14:11:24
550 donne effectivement une chaine 27/08/2012 14:11:31
551 c'est peut-être pas intuitif... le .join()... mais c,est bon à savoir 27/08/2012 14:11:49
552 Conteneurs 27/08/2012 14:12:09
553 il faut savoir que les conteneurs (liste, tuple, dictionnaires...) 27/08/2012 14:12:21
554 ... peuvent contenir des trucs hétérogènes 27/08/2012 14:12:34
555 l = ['davin', 1, False] 27/08/2012 14:12:43
556 c'est légal 27/08/2012 14:12:47
557 liste de string, entier et booléen 27/08/2012 14:13:04
558 aussi, pour accéder à un item d'un conteneur 27/08/2012 14:13:22
559 on peut utiliser son index numérique 27/08/2012 14:13:30
560 0 = premier item 27/08/2012 14:13:34
561 l[0] 27/08/2012 14:13:38
562
563 In [35]: l = ['davin', 1, False]
564
565 In [36]: l[0]
566 Out[36]: 'davin'
567
568 In [37]: l[1]
569 Out[37]: 1
570
571 In [38]: l[2]
572 Out[38]: False
573 27/08/2012 14:14:02
574 il existe aussi le slicing... 27/08/2012 14:14:15
575 c'est une notion pour retourne une "tranche" de valeurs... 27/08/2012 14:14:27
576 je vous laisse explorer seul, plus tard 27/08/2012 14:14:37
577 l[0:1] 27/08/2012 14:14:41
578
579 In [42]: l[0:2]
580 Out[42]: ['davin', 1]
581 27/08/2012 14:15:13
582 Itérations 27/08/2012 14:15:21
583 pour itérer, while existe 27/08/2012 14:15:32
584 mais c'est pas top 27/08/2012 14:15:38
585 exemple : 27/08/2012 14:15:42
586
587 In [43]: annee = 2012
588
589 In [44]: while annee <= 2015:
590 ....: print annee
591 ....: annee = annee + 1
592 ....:
593 ....:
594 2012
595 2013
596 2014
597 2015
598 27/08/2012 14:16:17
599 rappel : pas d'accolade {} pour le bloc... indenter 27/08/2012 14:16:41
600 le top = for 27/08/2012 14:16:58
601 pour itérer 27/08/2012 14:17:01
602
603 In [47]: for i in range(2012, 2016):
604 ....: print i
605 ....:
606 ....:
607 2012
608 2013
609 2014
610 2015
611 27/08/2012 14:17:49
612 remarquez la beauté du in 27/08/2012 14:18:02
613 "in" 27/08/2012 14:18:06
614 ça se lit : pour chaque élément dans le conteneur itérable... fait ceci (ici = print) 27/08/2012 14:18:29
615 le "in" existe aussi dans un autre contexte 27/08/2012 14:18:46
616 pour tester l'appartenance à un ensemble 27/08/2012 14:18:57
617 je veux dire... une collection (pas nécessaire un set() ) 27/08/2012 14:19:15
618
619 In [48]: l = [1,2,3]
620
621 In [49]: 2 in l
622 Out[49]: True
623
624 In [50]: 5 in l
625 Out[50]: False
626 27/08/2012 14:19:37
627 ahaha! 27/08/2012 14:19:39
628 ça commence à être génial comme syntaxe! 27/08/2012 14:19:48
629 ce qui nous amène au conditionnel pour tester ça 27/08/2012 14:20:05
630 les conditionnel... pas grand chose à dire : 27/08/2012 14:20:12
631 if, elif et else 27/08/2012 14:20:19
632 encore une fois, pas de {} 27/08/2012 14:20:25
633 et pas de endif non plus 27/08/2012 14:20:32
634
635 In [51]: liste = range(6)
636
637 In [52]: if 5 in liste:
638 ....: print 'hourra 5'
639 ....: elif 4 in liste:
640 ....: print 'hourra 4'
641 ....: else:
642 ....: print 'pas hourra'
643 ....:
644 hourra 5
645 27/08/2012 14:20:57
646 on peut tester la valeur de range(6) tout seul... dans interpréteur : 27/08/2012 14:21:19
647
648 In [53]: range(6)
649 Out[53]: [0, 1, 2, 3, 4, 5]
650 27/08/2012 14:21:32
651 range est utilisé notamment pour contrôler nombre itération dans des for... 27/08/2012 14:21:58
652 ... mais ici je l'utilise juste pour me faire une liste rapido 27/08/2012 14:22:09
653 on voit que 5 est dans la liste créée par range(6) 27/08/2012 14:22:25
654 donc le test "5 in liste" retourne vrai 27/08/2012 14:22:40
655 Fichiers 27/08/2012 14:23:00
656 c'est très facile d'ouvrir un fichier et parser son contenu en python 27/08/2012 14:23:17
657 créer un fichier dans le répertoire où vous avez lancé votre terminal 27/08/2012 14:23:34
658 (dans votre home, par exemple) 27/08/2012 14:23:44
659 un fichier texte qu'on va appeller 'texte.txt' 27/08/2012 14:23:57
660 entre des lignes de texte... 27/08/2012 14:24:04
661 moi j'ai ça : texte.txt
662 J'aime Python
663 et la communauté tech
664 de l'AUF.
665 27/08/2012 14:24:44
666 pour parser les lignes de ce fichier : 27/08/2012 14:24:59
667
668 In [56]: for line in f.readlines():
669 print line,
670 f.close()
671 ....:
672 ....:
673 J'aime Python
674 et la communauté tech
675 de l'AUF.
676
677
678 27/08/2012 14:25:45
679 on voit que chacune des lignes a été imprimée... 27/08/2012 14:26:04
680 hey... vous comprenez la puissance du truc? 27/08/2012 14:26:14
681 si vous avez des données .csv, à tout hasard... 27/08/2012 14:26:26
682 et que vous faites une split sur a ligne et unpackez dans les variables 27/08/2012 14:26:48
683 on essaie? 27/08/2012 14:26:58
684 go... 27/08/2012 14:27:06
685 contenu de texte.txt :
686 'Davin', 'Baragiotta'
687 'Victor', 'Bruneau'
688 'Franck', 'Kouyami' 27/08/2012 14:27:45
689 pensez et explorez commencer spliter sur la virgule... et stocker le prenom et le nom dans 2 variables séparées... 27/08/2012 14:28:20
690 des questions? 27/08/2012 14:29:08
691 (pendant qu'on cherche solutionnaire ) 27/08/2012 14:29:20
692 ok... pas de question 27/08/2012 14:30:56
693 solution :
694 In [60]: f = open('texte.txt')
695
696 In [61]: for line in f.readlines():
697 ....: prenom, nom = line.split()
698 ....:
699 ....: print prenom
700 ....: print nom
701 ....:
702 ....:
703 'Davin',
704 'Baragiotta'
705 'Victor',
706 'Bruneau'
707 'Franck',
708 'Kouyami'
709 27/08/2012 14:31:00
710 au lieu de printer la ligne comme on faisait, on la split 27/08/2012 14:31:15
711 lisez la doc de split... mais ça fait le boulot qu'on veut (sépare sur virgule ou espace) 27/08/2012 14:31:36
712 ensuite j'imprime les variables 27/08/2012 14:31:50
713 Formattage de chaine 27/08/2012 14:31:55
714 on pourrait faire un truc plus joli avec les chaines 27/08/2012 14:32:06
715 lui dire bonjour 27/08/2012 14:32:17
716 voici la syntaxe : 27/08/2012 14:32:21
717 "Bonjour %s %s" % (prenom, nom.upper()) 27/08/2012 14:32:50
718 %s = un placeholder... disons une variable pour la string... "s" veut dire qu'on s'attend à ce que la valeur à insérer soit elle même une string... 27/08/2012 14:33:25
719 %d = entier 27/08/2012 14:33:32
720 on voit qu'on a 2 %s dans "Bonjour %s %s" 27/08/2012 14:33:49
721 ensuite on a un % seul 27/08/2012 14:33:54
722 ça se lit ainsi : 27/08/2012 14:34:01
723 prend les valeurs à droite de % 27/08/2012 14:34:10
724 pour les mettre dans le string de gauche 27/08/2012 14:34:16
725 chaque variable, dans l'ordre, va remplacer la frime dans le placeholder 27/08/2012 14:34:39
726 en fait, je m'attends à avoir : 27/08/2012 14:34:49
727 "Bonjour Davin BARAGIOTTA" 27/08/2012 14:34:56
728 preuve : 27/08/2012 14:34:58
729
730 In [65]: f = open('texte.txt')
731
732 In [66]: for line in f.readlines():
733 prenom, nom = line.split()
734 print "Bonjour %s %s" % (prenom, nom.upper())
735 ....:
736 ....:
737 Bonjour 'Davin', 'BARAGIOTTA'
738 Bonjour 'Victor', 'BRUNEAU'
739 Bonjour 'Franck', 'KOUYAMI' 27/08/2012 14:35:53
740 bon seul truc laid dont je viens de m'apercevoir c'est qu'on garde les quote ' venant du fichier... 27/08/2012 14:36:26
741 on pourrait utiliser .trim() 27/08/2012 14:36:34
742 des questions avant d'aller plus loin? 27/08/2012 14:36:39
743 eddy.andriamanantena a quitté la salle 14:36
744 eddy.andriamanantena a rejoint le salon 14:37
745 moussa.nombre a rejoint le salon 14:37
746
747 arnaud.amelina@auf.org 27/08/2012 14:38:00
748 Oui
749
750 davin.baragiotta 27/08/2012 14:38:03
751 ok, on termine aevc l'écriture de script
752 ah? 27/08/2012 14:38:04
753 j'écoute 27/08/2012 14:38:06
754
755 arnaud.amelina@auf.org 27/08/2012 14:38:33
756 C'est bon tu as répondu dans l'autre espace
757
758 davin.baragiotta 27/08/2012 14:38:37
759 ok
760
761 arnaud.amelina@auf.org 27/08/2012 14:38:37
762 Continue donc
763
764 davin.baragiotta 27/08/2012 14:38:44
765 un script
766 ce n'est absolument rien d'autre que du code python dans un fichier... fichier qu'on va exécuter 27/08/2012 14:39:02
767 on vient de faire du code python... mais dans l'interpréteur 27/08/2012 14:39:13
768 s'agit de retranscrire le code intéressant qu'on vient de découvrir interactivement grace à introspection 27/08/2012 14:39:45
769 dans le support à l'atelier, je donne un exemple de script plus complet 27/08/2012 14:40:01
770 mais codons simplement ce qu'on vient de faire 27/08/2012 14:40:11
771 créons un fichier : script.py 27/08/2012 14:40:22
772 à côté de texte.txt (sur votre home, en principe) 27/08/2012 14:40:36
773 voici mon code : 27/08/2012 14:41:16
774 script.py :
775 f = open('texte.txt')
776
777 for line in f.readlines():
778 prenom, nom = line.split()
779 print "Bonjour %s %s" % (prenom, nom.upper()) 27/08/2012 14:41:23
780 ce script ouvre le fichier texte.txt et parse chacune de ses lignes, splite son contenu et imprime le prenom et nom dans une chaine formattée... 27/08/2012 14:41:58
781 ce script aurait pu faire plein de truc : stocker les noms dans une DB, par exemple 27/08/2012 14:42:14
782 mais essayons maintenant d'exécuter ce script 27/08/2012 14:42:25
783 ipython :
784 run script 27/08/2012 14:42:34
785 ou 27/08/2012 14:42:36
786
787 run script.py 27/08/2012 14:42:40
788 python :
789 $ python script.py 27/08/2012 14:42:53
790 (dépendamment de votre interpréteur) 27/08/2012 14:43:03
791 on y va 27/08/2012 14:43:27
792 voici : 27/08/2012 14:43:28
793
794 In [69]: run script
795 Bonjour 'Davin', 'BARAGIOTTA'
796 Bonjour 'Victor', 'BRUNEAU'
797 Bonjour 'Franck', 'KOUYAMI'
798 27/08/2012 14:43:39
799 tadaaaaaaaaaaaaaaaam! 27/08/2012 14:43:43
800 voici votre premier script python 27/08/2012 14:43:50
801 (ou peut-être pas ) 27/08/2012 14:43:53
802 questions? 27/08/2012 14:44:13
803
804 doan.manh.ha 27/08/2012 14:44:17
805 ah oui
806 ça marche 27/08/2012 14:44:28
807
808 davin.baragiotta 27/08/2012 14:44:34
809 génial!
810 sérieusement... vous êtes maintenant très puissant 27/08/2012 14:44:44
811 pourquoi? 27/08/2012 14:44:47
812 car vous avez un langage de "haut niveau" 27/08/2012 14:45:01
813 qui peut donc faire des traitements plus complexes que bash mais de manière plus lisible 27/08/2012 14:45:23
814 attention : 27/08/2012 14:45:29
815 continuez d'utiliser bash partout où il fait bien le boulot 27/08/2012 14:45:41
816 mais pour des trucs de plus haut niveau, vous avez Python 27/08/2012 14:46:04
817 ce qui nous reste à voir 27/08/2012 14:46:10
818 en 10 minutes max : 27/08/2012 14:46:16
819 fonctions et import 27/08/2012 14:46:27
820 fonctions : je vous laisse voir à partir de la doc de l,atelier et doc officielle 27/08/2012 14:46:47
821 en fait, fait juste savoir c'est quoi une fonction en informatique 27/08/2012 14:46:59
822 ce qui est particulier, et cool en Python 27/08/2012 14:47:07
823 c'est les *args et **kwargs : 27/08/2012 14:47:16
824 des varaibles spéciales dans la déclaration de la fonction 27/08/2012 14:47:28
825 pour "ramasser" tous les paramètres qu'on pourrait lui passer 27/08/2012 14:47:41
826 ce qui donner des trucs comme : 27/08/2012 14:47:55
827 coucou('Paul') 27/08/2012 14:48:08
828 coucou('Paul', 'Lemay') 27/08/2012 14:48:16
829 et c'est légal... 27/08/2012 14:48:21
830 du polymorphisme de fonction, en quelque sorte 27/08/2012 14:48:30
831 import 27/08/2012 14:48:34
832 c'est là que ça se joue 27/08/2012 14:48:39
833 vous en voulez pas réinventer la roue 27/08/2012 14:48:49
834 vous voulez.... importer le code des autres 27/08/2012 14:48:57
835 voire le vôtre 27/08/2012 14:49:00
836 allez voir la doc de la librairie standar, pour le plaisir 27/08/2012 14:49:16
837 pour voir tous les modules qui s'offre à vous (sans rien à avoir à installer... ça vient avec Python) 27/08/2012 14:49:35
838 ça ferait l,objet d'une atelier plus avancé : 27/08/2012 14:49:51
839 http://wiki.auf.org/wikiteki/Ateliers/ 27/08/2012 14:50:04
840 http://wiki.auf.org/wikiteki/Ateliers/2012-02-24/Python 27/08/2012 14:50:10
841 vous y verrez des exemples (venant de JC) pour l'admin système 27/08/2012 14:50:26
842 mais pour de plus amples discussions : Python vs Bash... rendez-vous sur liste tech avec JC 27/08/2012 14:50:43
843 (moi je ne suis pas admin syst) 27/08/2012 14:50:48
844 27/08/2012 14:50:49
845 conclusion : 27/08/2012 14:50:56
846 avec les import... vous êtes royal 27/08/2012 14:51:08
847 import urlllib 27/08/2012 14:51:12
848 vous accédez au web 27/08/2012 14:51:18
849 pour importer vos propres trucs 27/08/2012 14:51:36
850 shafeek.sumser a quitté la salle 14:51
851
852 davin.baragiotta 27/08/2012 14:51:50
853 lisez la section "modules" de l,atelier et expériementer dans l'interpréteur
854 tran.xuan.huy a quitté la salle 14:51
855
856 davin.baragiotta 27/08/2012 14:51:57
857 vous importez vos fonctions
858 vous codez une fois... et utilisez N fois 27/08/2012 14:52:06
859 finalement... vous voudriez utiliser des modules qui ne viennent pas avec le langage et que vous N,avez pas coder? 27/08/2012 14:52:35
860 vous avez un exemple à la fin de cet atelier 27/08/2012 14:52:45
861 on vous demander de parser un flux RSS 27/08/2012 14:52:52
862 essayez-le 27/08/2012 14:53:00
863 un petit tour sur le web et on trouve feedparser 27/08/2012 14:53:09
864 on lit sa doc 27/08/2012 14:53:14
865 on expérimente dans interpréteur 27/08/2012 14:53:20
866 on trouve notre solution 27/08/2012 14:53:24
867 ... 27/08/2012 14:53:25
868 on la code dans un script et le tour est joué 27/08/2012 14:53:32
869 tran.xuan.huy a rejoint le salon 14:53
870
871 davin.baragiotta 27/08/2012 14:53:41
872 c'est comme ça qu'on travaille avec Python
873 fin de la fin... pour stocker dans une DB comme un pro 27/08/2012 14:53:58
874 regardez : 27/08/2012 14:54:03
875 import sqlite3 27/08/2012 14:54:08
876 ça vient avec python 27/08/2012 14:54:13
877 http://docs.python.org/library/ 27/08/2012 14:54:32
878 vous trouverez donc dans library 27/08/2012 14:54:37
879 http://docs.python.org/library/sqlite3.html 27/08/2012 14:54:49
880 tadam... 27/08/2012 14:54:52
881 27/08/2012 14:54:55
882 mais vite, vous voudrez faire plus... 27/08/2012 14:55:04
883 et Django est là pour vous 27/08/2012 14:55:10
884 l'équipe SI aussi d,ailleurs 27/08/2012 14:55:20
885 je vous laisse regarder l'horaire pour les ateliers Django 27/08/2012 14:55:30
886
887 arnaud.amelina@auf.org 27/08/2012 14:55:33
888 Il reste 5 mn
889
890 davin.baragiotta 27/08/2012 14:55:37
891 et je suis là opur vos questions
892 ----------- FIN ATELIER : QUESTIONS ------------ 27/08/2012 14:55:55
893
894 arnaud.amelina@auf.org 27/08/2012 14:56:10
895 Formidable
896 Darvin Legrand 27/08/2012 14:56:20
897 Merci torrent applaudissement !!! 27/08/2012 14:56:45
898
899 davin.baragiotta 27/08/2012 14:56:53
900 ahaha
901
902 arnaud.amelina@auf.org 27/08/2012 14:57:44
903 On a eu 28 Participants 29 y compris Formateur
904
905 davin.baragiotta 27/08/2012 14:57:56
906 génial
907
908 tran.xuan.huy 27/08/2012 14:58:11
909 je me demande si python est utile pour les techniciens de l'auf?
910
911 davin.baragiotta 27/08/2012 14:58:12
912 j'en profite (avant d'aller au petit coin) pour faire la pub du prochain atelier :
913 Git : versionner votre code source... donc vos scripts python 27/08/2012 14:58:25
914
915 arnaud.amelina@auf.org 27/08/2012 14:58:26
916 C'est un Franc succès là je suis sûr que tout le monde est content ceux qui ne le sont pas n'aont qu'à le manifester de suite
917
918 davin.baragiotta 27/08/2012 14:58:34
919 ahaha
920 -------------- FIN ATELIER Python ------------------- 27/08/2012 14:58:46
921
arnaud.amelina@auf.org 27/08/2012 14:58:59 Ouep Donc FIN ATELIER PYTHON !!!
david.violette 27/08/2012 14:59:07 Merci davin
davin.baragiotta 27/08/2012 14:59:19 plaisir campione
arnaud.amelina@auf.org 27/08/2012 15:00:15 Grand Merci Davin !!! Toute l'équipe d'organisation te félicite