Modifications entre les versions 1 et 2
Version 1 à la date du 2012-08-27 15:15:53
Taille: 44048
Éditeur: ArnaudAmelina
Commentaire:
Version 2 à la date du 2012-08-27 15:27:30
Taille: 44086
Éditeur: ArnaudAmelina
Commentaire:
Texte supprimé. Texte ajouté.
Ligne 1: Ligne 1:
==Déroulement de l'Atelier== == Transciption du Déroulement de l'Atelier ==
Ligne 152: Ligne 152:
{{{
Ligne 215: Ligne 216:
# 27/08/2012 13:11:56
# ceci est un commentaire 27/08/2012 13:12:01
''#'' 27/08/2012 13:11:56
''# ceci est un commentaire ''27/08/2012 13:12:01
Ligne 1072: Ligne 1073:

}}}

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

les discussions et questions, pour laisser le discours fluide : dans salon tech svp 27/08/2012 13:04:00
-------------------- DÉBUT : Atelier Python ------------------ 27/08/2012 13:04:07
Bonjour à tous 27/08/2012 13:04:23
vous devriez avoir 3 écrans ouverts 27/08/2012 13:04:32
1. cette fenêtre 27/08/2012 13:04:37
2. un navigateur 27/08/2012 13:04:43
3. un interpréteur 27/08/2012 13:04:47
(terminal je veux dire) 27/08/2012 13:04:53
http://wiki.auf.org/wikiteki/Projet/SemaineTech/2012 27/08/2012 13:05:02
premier atelier = Python 27/08/2012 13:05:08
voici la page présentation : 27/08/2012 13:05:13
http://wiki.auf.org/wikiteki/Projet/SemaineTech/2012/Ateliers/Python 27/08/2012 13:05:17
je prends pour acquis que vous avez tout ce qu'il faut d'installer 27/08/2012 13:05:28
si vous n'avez pas iPython : pas grave, on va faire sans 27/08/2012 13:05:38
tout le contenu est ici : 27/08/2012 13:05:54
http://wiki.auf.org/wikiteki/Ateliers/Python/Base/Support 27/08/2012 13:05:54
je vous demande donc de garder cette page ouvert... c'est le plan de match 27/08/2012 13:06:07
INTRODUCTION 27/08/2012 13:06:11
notre but dans cet atelier 27/08/2012 13:06:20
c'est de mettre les mains dans python 27/08/2012 13:06:29
on va coder 27/08/2012 13:06:33
d,abord interactivement... dans l'interpréteur 27/08/2012 13:06:43
ensuite on va mettre ce qui nous intéresse dans un script 27/08/2012 13:06:53
(un fichier) 27/08/2012 13:06:55
qu'on va exécuter 27/08/2012 13:07:00
vous avez la documentation officielle en lien 27/08/2012 13:07:13
elle a un tutoriel 27/08/2012 13:07:20
peut-être un peu long 27/08/2012 13:07:24
et aussi, la doc de la "standard library" 27/08/2012 13:07:38
c'est à dire de ce qui vient par défauit avec Python 27/08/2012 13:07:49
vous devez avoir un éditeur texte aussi 27/08/2012 13:08:01
vi, emacs... peu importe... moi j'utilise gedit 27/08/2012 13:08:12
(et je n'ai pas honte  ) 27/08/2012 13:08:17
bon, c'est parti 27/08/2012 13:08:27
dans votre terminal, lancez l'interpréteur ipython 27/08/2012 13:08:43
(ou python pour ceux qui ne l'ont pas) 27/08/2012 13:08:49
s'agit juste de taper :
python
ou
ipython 27/08/2012 13:09:01
fawaz.tairou a rejoint le salon 13:09   

davin.baragiotta 27/08/2012 13:09:24
ce qui est super avec python
c'est sa simplicité 27/08/2012 13:09:29
puissant... mais simple 27/08/2012 13:09:33
simplicité d'abord dans la syntaxe 27/08/2012 13:09:43
frumence.boroto a rejoint le salon 13:09        

davin.baragiotta 27/08/2012 13:09:58
ah... un mot sur les interpréteurs... rapide
un interpréteur écoute le code que tu saisies et retournes la valeur associé à l'exécution 27/08/2012 13:10:17
dans ipython c'est écrit "In"... pour input 27/08/2012 13:10:30
et ça retourne "Out" pour output de l'exécution 27/08/2012 13:10:40
commence par instancier une variable avec un entier 27/08/2012 13:11:01
a = 12 27/08/2012 13:11:03
ça retourne rien... 27/08/2012 13:11:13
si on saisit ensuite "a" 27/08/2012 13:11:21
ça retourne 12 27/08/2012 13:11:28
toutes nos instructions restent en mémoire dans interpréteur... 27/08/2012 13:11:44
on va tester la syntaxe d'un commentaire 27/08/2012 13:11:51
c'est 1 27/08/2012 13:11:53
oups 27/08/2012 13:11:54
''#'' 27/08/2012 13:11:56
''# ceci est un commentaire ''27/08/2012 13:12:01
ça fait rien 27/08/2012 13:12:04
ça pas de /* */ 27/08/2012 13:12:15
en python 27/08/2012 13:12:18
ni de // 27/08/2012 13:12:20
aussi, vous avez remarqué qu'on ne met pas de $ devant la variable 27/08/2012 13:12:37
fianlement... pas de ; en fin de ligne 27/08/2012 13:12:53
ça fait du code plus facile à lire 27/08/2012 13:13:03
ah oui... pas besoin non plus des {} pour les blocs de code 27/08/2012 13:13:22
donc une fonctino (on y reviendra) ça s'écrit comme ça : 27/08/2012 13:13:35
def coucou():
return 27/08/2012 13:13:44
très important : c'est l'indentation qui nous dispense des {} 27/08/2012 13:14:04
en Python l'indentation est obligatoire 27/08/2012 13:14:11
par convention... on utilise 4 espaces... 27/08/2012 13:14:23
*pas* des tabs.... 4 espaces 27/08/2012 13:14:29
niry.andriambelo a rejoint le salon 13:14       

davin.baragiotta 27/08/2012 13:14:44
configurez votre éditeur pour transformer les tabs en 4 espaces
pour terminer avec la syntaxe... : il existe une "stylistique" pythonesque 27/08/2012 13:15:12
pour rendre le code plus lisible 27/08/2012 13:15:17
calin.dordia a rejoint le salon 13:15   

davin.baragiotta 27/08/2012 13:15:27
ce sont des recommandations (largement suivies)
PEP8 27/08/2012 13:15:37
http://www.python.org/dev/peps/pep-0008/ 27/08/2012 13:15:45
vous pouvez y jeter un oeil pendant qu'on récolte les questions dans salon tech 27/08/2012 13:16:01
des questions? 27/08/2012 13:16:07
calin.dordia a quitté la salle 13:16    

davin.baragiotta 27/08/2012 13:16:36
ok, pas de nouvelles... bonnes nouvelles (en même temps opn a rien fait encore)
variables : 27/08/2012 13:16:43
les variables sont des "noms" qui font "référence" à une "valeur" 27/08/2012 13:17:06
ex.: 27/08/2012 13:17:08
a = 12 27/08/2012 13:17:11
b = a 27/08/2012 13:17:15
(on dit que b prend la valeur de a) 27/08/2012 13:17:31
avec la fonction "buiklt-in" id() 27/08/2012 13:17:41
on va vérifier l'emplacement mémoire des valeurs 27/08/2012 13:17:51
id(a) 27/08/2012 13:17:55
id(b) 27/08/2012 13:17:57
on voit que c'est identique... donc : 27/08/2012 13:18:04
les noms "a" et "b" pointent vers la même chose 27/08/2012 13:18:15
parlons maintenant des types 27/08/2012 13:18:26
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
voyons les types de base en Python 27/08/2012 13:19:01
(tapez dans votre terminal en même temps) 27/08/2012 13:19:09
None est un nom réservé qui veut dire "rien"... 27/08/2012 13:19:26
comme NULL dans les bases de données 27/08/2012 13:19:35
on a aussi les booléens ; False et True 27/08/2012 13:19:45
les majuscules sont importantes ici 27/08/2012 13:19:52
none, false, true : ça n'existe pas 27/08/2012 13:19:59
dans le numérique on a les entiers : 27/08/2012 13:20:14
15 27/08/2012 13:20:16
et aussi les float... pour le décimal : 15.5 27/08/2012 13:20:27
évidemment, pas de virgule... un point 27/08/2012 13:20:35
on a les chaînes de caractères : string et unicode... 27/08/2012 13:20:47
c'est bon de savoir que c'est 2 choses différentes... 27/08/2012 13:21:04
je vous passe le détail sur les encodages 27/08/2012 13:21:19
mais pour déclarer une chaine unicode (soyons modernes) 27/08/2012 13:21:31
il faut mettre le u devant les apostrophes (quote) 27/08/2012 13:21:43
u"" 27/08/2012 13:21:46
ça peut aussi être des single quote 27/08/2012 13:21:53
u'' 27/08/2012 13:21:55
il existe aussi les chaînes "raw" (brutes) : r"" 27/08/2012 13:22:12
on verra ça dans django 27/08/2012 13:22:17
.... 27/08/2012 13:22:25
avec ça... on a la base... 27/08/2012 13:22:34
après ce qui est intéressant... c'est de créer des structures de données 27/08/2012 13:22:49
ex.: j'ai un prénom et un nom, moi... 27/08/2012 13:23:00
je voudrais manipuler les 2 dans un objet personne... 27/08/2012 13:23:15
premier type de structure, ou conteneur d'info : 27/08/2012 13:23:27
les listes 27/08/2012 13:23:30
l = [] 27/08/2012 13:23:34
ça c'est une liste vide 27/08/2012 13:23:39
comme en math, pour déclarer des éléments, on met des virgules 27/08/2012 13:23:51
l = [1,2,3] 27/08/2012 13:23:57
liste ayant 3 entiers comme éléments 27/08/2012 13:24:07
la liste est ordonnée... on y reviendra dans un instant 27/08/2012 13:24:28
(c,est pas un sac de valeur... y,a un ordre) 27/08/2012 13:24:38
t = tuple = () 27/08/2012 13:24:43
c'est exactement comme une liste... sauf c'est immuable 27/08/2012 13:24:54
si on peut ajouter un élément à une liste : 27/08/2012 13:25:01
l.append(4) 27/08/2012 13:25:08
on ne peut pas avec un tuple... 27/08/2012 13:25:14
ça sert à quoi? principalement pour des raisons de performance... et on le voit partout 27/08/2012 13:25:31
donc retenir que () = tuple 27/08/2012 13:25:40
exemple : 27/08/2012 13:25:42
t = (1,2,3,4) 27/08/2012 13:25:48
c'est un tuple de 4 éléments (tous entiers) 27/08/2012 13:25:57
balla.fall a rejoint le salon 13:26     

davin.baragiotta 27/08/2012 13:26:14
finalement, la dernière structure c'est un "dictionnaire"
c'est un peu comme un array dans d'autres langages 27/08/2012 13:26:25
syntaxe de dictionnaire vide : 27/08/2012 13:26:36
d = {} 27/08/2012 13:26:40
le dictionnaire stocke des associations clé-valeur 27/08/2012 13:26:56
la clé DOIT être unique... 27/08/2012 13:27:06
un peu comme une entrée dans un dictionnaire 27/08/2012 13:27:15
ex.: 27/08/2012 13:27:19
d = {
'prenom':'Davin',
'nom':'Baragiotta',
} 27/08/2012 13:27:51
un dictionnaire avec 2 clés (prenom et nom) 27/08/2012 13:28:06
ayant respectivement les valeurs 'Davin' et 'Baragiotta' (des strings) 27/08/2012 13:28:24
finalement... les ensembles.... dernier type 27/08/2012 13:28:39
un ensemble, au sens mathématique est une collection non ordonnée d'éléments unique 27/08/2012 13:28:59
on crée un ensemble (set en anglais) en utilisant set() sur une collection (liste, tuple, dictionnaire) 27/08/2012 13:29:26
jouons. 27/08/2012 13:29:32
créer la liste : 27/08/2012 13:29:37
l = [1,2,3,3,3,4,5,5] 27/08/2012 13:29:48
shafeek.sumser a rejoint le salon 13:29 

davin.baragiotta 27/08/2012 13:29:59
comptons les éléments
8 27/08/2012 13:30:05
len(l) 27/08/2012 13:30:09
eric.mcsween a rejoint le salon 13:30   

davin.baragiotta 27/08/2012 13:30:24
len = length... fonction built-in (on y revient)
maintenant... on en fait un ensemble : 27/08/2012 13:30:33
e = set(l) 27/08/2012 13:30:36
len(e) 27/08/2012 13:30:43
5 27/08/2012 13:31:05
en tapant seulement "e" dans l'interpréteur 27/08/2012 13:31:18
il vous retourne les valeurs de l'ensemble 27/08/2012 13:31:29
e 27/08/2012 13:31:32

In [8]: e
Out[8]: set([1, 2, 3, 4, 5])
27/08/2012 13:31:40
on vient bien qu'un ensemble est non redondant... 27/08/2012 13:31:51
questions? 27/08/2012 13:31:55
 
arnaud.amelina@auf.org 27/08/2012 13:32:22
n/a     

davin.baragiotta 27/08/2012 13:32:29
ok on continue
python offre des raccourcis sympas 27/08/2012 13:32:43
suppons que vous avez des valeurs dans un tuple : 27/08/2012 13:32:53
t = (34,56) 27/08/2012 13:33:03
disons que ce soit des coordonnées d'un piont dans l'espace... 27/08/2012 13:33:14
x et y quoi! 27/08/2012 13:33:18
et qu'on veuille manipuler x et y indépendamment 27/08/2012 13:33:32
on peut faire simple ceci : 27/08/2012 13:33:37
chamback.pierre a rejoint le salon 13:33        

davin.baragiotta 27/08/2012 13:33:53
x, y = t
(euh je crois que je me trompe... faut unpacker, minute) 27/08/2012 13:34:07
ah si ça marche 27/08/2012 13:34:34

In [10]: t = (34,56)

In [11]: x, y = t

In [12]: x
Out[12]: 34

In [13]: y
Out[13]: 56
27/08/2012 13:34:46
c'est ce qu'on appelle unpacker (ou packer, dans le sens inverse, si je ne me trompe) 27/08/2012 13:35:03
python est un langage fortement typé 27/08/2012 13:35:20
c,est à dire qu'on ne fait pas n'importe quoi avec les variables... 27/08/2012 13:35:32
si a est un entier (a = 15) 27/08/2012 13:35:40
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
'davin' + 5 27/08/2012 13:36:02
ça n'a pas de sens en Python... 27/08/2012 13:36:07
il ne va pas faire comme en PHP et dire "aaaah... tu voudrais que 5 soit un string?" 27/08/2012 13:36:26
et donner : 'davin5' 27/08/2012 13:36:30
fortement typé donc... 27/08/2012 13:36:40
louis-beethoven.montrose a rejoint le salon 13:36       

davin.baragiotta 27/08/2012 13:36:55
ça veut dire que si on veut changer de type, faut le faire explicitement
avec des opérateurs pour ça : 27/08/2012 13:37:00
str(5) 27/08/2012 13:37:04

In [16]: cinq = str(5)

In [17]: type(cinq)
Out[17]: <type 'str'>
27/08/2012 13:37:36
type() = autre fonction built-in (qui vient par défaut)... ça donne le type de la variable 27/08/2012 13:37:58
on voit que la variable nommé "cinq" est un str après la transformation de 5 par str() 27/08/2012 13:38:21
c'est ce qu'on appelle le "transtypage" 27/08/2012 13:38:34
mais vous aurez remarqué 27/08/2012 13:38:41
que python est dynamqieu 27/08/2012 13:38:56
pas besoin de déclarer les variables et leur type 27/08/2012 13:39:05

a = int()
a = 5 27/08/2012 13:39:13
première ligne est inutile 27/08/2012 13:39:21
bon on n'a rien fait de rigolo... mais on a vu la base 27/08/2012 13:39:33
Built-in : les fonctions 27/08/2012 13:39:45
http://docs.python.org/library/fonctions.html 27/08/2012 13:39:50
dans la doc officielle... on voit toutes les fonctions de base 27/08/2012 13:40:01
y'en a pas beaucoup vous me direz... 27/08/2012 13:40:15
mais c'est parce que Python travaille plus avec des objets 27/08/2012 13:40:31
comme Java, par exemple 27/08/2012 13:40:36
dans les fonctions de pas 27/08/2012 13:40:43
j'en ai énuméré quelques unes d'utile 27/08/2012 13:40:57
certaines qu'on a déjà vu : 27/08/2012 13:41:07
type() 27/08/2012 13:41:10
int(), str().... 27/08/2012 13:41:19
len() 27/08/2012 13:41:21
on les apprendra pas par coeur : faut juste savoir où elles sont définies dans la doc 27/08/2012 13:41:36
dernier point de théorie et ensuite on s'amuse 27/08/2012 13:41:55
Objets et namespaces... 27/08/2012 13:42:04
en Python TOUT est un objet... 27/08/2012 13:42:13
un objet (en programmation orienté-objet) c'est rien d,autre qu'une strucutre de données 27/08/2012 13:42:30
un peu comme nos dictionnaires : d = {} 27/08/2012 13:42:45
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
on peut interroger un objet 27/08/2012 13:43:27
on l'interroge en appelant des "attributs" 27/08/2012 13:43:47
ce sont des varaibles sur l'objet 27/08/2012 13:43:52
ou 27/08/2012 13:43:53
en appelant des "méthodes" 27/08/2012 13:43:59
se sont des fonctions sur l'objet 27/08/2012 13:44:08
les "attributs" et les "méthodes" ont tous des "noms" 27/08/2012 13:44:27
namespaces : ce sont des noms qui vivient dans "l'ESPACE" de l'objet 27/08/2012 13:44:45
on puorrait dire "derrière lui" 27/08/2012 13:44:52
exemple : 27/08/2012 13:44:58
on va prendre une chaine de caractère : 27/08/2012 13:45:09
prenom = "Davin" 27/08/2012 13:45:14
avec ipython 27/08/2012 13:45:23
on accède aux "noms derrière la chaîne de caractère" 27/08/2012 13:45:35
en utilisant le poibnt : . 27/08/2012 13:45:41
suivi d'un tab : 27/08/2012 13:45:46

In [18]: prenom = "Davin"

In [19]: prenom.
prenom.__add__ prenom.__repr__ prenom.istitle
prenom.__class__ prenom.__rmod__ prenom.isupper
prenom.__contains__ prenom.__rmul__ prenom.join
prenom.__delattr__ prenom.__setattr__ prenom.ljust
prenom.__doc__ prenom.__sizeof__ prenom.lower
prenom.__eq__ prenom.__str__ prenom.lstrip
prenom.__format__ prenom.__subclasshook__ prenom.partition
prenom.__ge__ prenom._formatter_field_name_split prenom.replace
prenom.__getattribute__ prenom._formatter_parser prenom.rfind
prenom.__getitem__ prenom.capitalize prenom.rindex
prenom.__getnewargs__ prenom.center prenom.rjust
prenom.__getslice__ prenom.count prenom.rpartition
prenom.__gt__ prenom.decode prenom.rsplit
prenom.__hash__ prenom.encode prenom.rstrip
prenom.__init__ prenom.endswith prenom.split
prenom.__le__ prenom.expandtabs prenom.splitlines
prenom.__len__ prenom.find prenom.startswith
In [19]: prenom.
27/08/2012 13:46:06
ahaha! 27/08/2012 13:46:12
on vient de découvrir plein de truc "sur" (ou derrière) ma chapine de caractère... 27/08/2012 13:46:30
ce sont les noms des attributs et méthodes 27/08/2012 13:46:37
notre but dans la vie 27/08/2012 13:46:50
c'est de "faire des trucs" avec notre information 27/08/2012 13:47:00
c'est ça programmer... 27/08/2012 13:47:04
là, on se rend compte que Python nous donne plein de fonction directement sur l'objet... 27/08/2012 13:47:27
startswith... hmmm 27/08/2012 13:47:36
qu'est-ce que ça peut bien faire? 27/08/2012 13:47:44
on va continuer notre "introspection" de l'objet en appelant l'aide 27/08/2012 13:48:00
ipython : 
prenom.startswith? 27/08/2012 13:48:18
(si vous avez trop de noms et voulez sortir de la liste : q pour quit) 27/08/2012 13:48:51

In [20]: prenom.startswith?
Type:    builtin_function_or_method
Base Class:     <type 'builtin_function_or_method'>
String Form:    <built-in method startswith of str object at 0x967d940>
Namespace:      Interactive
Docstring:
S.startswith(prefix[, start[, end]]) -> bool

Return True if S starts with the specified prefix, False otherwise.
With optional start, test S beginning at that position.
With optional end, stop comparing S at that position.
prefix can also be a tuple of strings to try.
27/08/2012 13:49:07
ok donc on tombe direct sur la documentation de la méthode "startswith"! 27/08/2012 13:49:33
testons maitenant! 27/08/2012 13:49:45
on comprend que startswith nous dit si le string commence avec un prefix particulier : 27/08/2012 13:50:13
prenom.startswith('W') 27/08/2012 13:50:21

In [21]: prenom.startswith('W')
Out[21]: False
27/08/2012 13:50:34
la méthode nous retourne False... non 'Davin' ne commence pas avec 'W' 27/08/2012 13:50:47

In [22]: prenom.startswith('D')
Out[22]: True
27/08/2012 13:50:57
ça peut sembler trivial... 27/08/2012 13:51:07
mais on fait de l'introspection et ça vous permet : 27/08/2012 13:51:16
de découvrir tout ce que vous pouvez faire avec python 27/08/2012 13:51:27
dans votre interpréteur.... 27/08/2012 13:51:38
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
dans un script! 27/08/2012 13:52:04
on y arrive 27/08/2012 13:52:07
regardons rapido ce que les listes et dictionnaires ont dans le ventre 27/08/2012 13:52:23
par exemple 27/08/2012 13:52:28

In [23]: l = [1,2,3]

In [24]: l.
l.__add__ l.__ge__ l.__iter__ l.__repr__ l.append
l.__class__ l.__getattribute__ l.__le__ l.__reversed__ l.count
l.__contains__ l.__getitem__ l.__len__ l.__rmul__ l.extend
l.__delattr__ l.__getslice__ l.__lt__ l.__setattr__ l.index
l.__delitem__ l.__gt__ l.__mul__ l.__setitem__ l.insert
l.__delslice__ l.__hash__ l.__ne__ l.__setslice__ l.pop
l.__doc__ l.__iadd__ l.__new__ l.__sizeof__ l.remove
l.__eq__ l.__imul__ l.__reduce__ l.__str__ l.reverse
l.__format__ l.__init__ l.__reduce_ex__ l.__subclasshook__ l.sort
27/08/2012 13:52:48
sort... tient on peut trier une liste... normal c'est ordonné... 27/08/2012 13:53:03
remove, ok on comprend sans lire la doc que c'est pour enlever un élément 27/08/2012 13:53:18
on teste rapido voir si on est pas trop fou : 27/08/2012 13:53:25
l.remove(2) 27/08/2012 13:53:32

In [24]: l.remove(2)

In [25]: l
Out[25]: [1, 3]
27/08/2012 13:53:44
ouais ok c'est ce qu'on pensait 27/08/2012 13:53:50
reverse : eh oui, retourne la liste de sens 27/08/2012 13:54:06
.insert... ah, y,a insert et append... 27/08/2012 13:54:19
c'est quoi la différence? 27/08/2012 13:54:24
solution : lire la doc 27/08/2012 13:54:31
27/08/2012 13:54:31
l.append? 27/08/2012 13:54:35
l.insert? 27/08/2012 13:54:40
pour ceux qui n'ont pas ipython 27/08/2012 13:54:48
(et pas de bonne raisons, car ipython est plus interactive que python) 27/08/2012 13:55:02
pour obtenir les noms :
dir(l) 27/08/2012 13:55:15
dir = directory des noms... 27/08/2012 13:55:23
pour obtenir l'aide sur un objet ou sa méthode ou attribut) : 27/08/2012 13:55:38
help(l.append) 27/08/2012 13:55:42
dernier truc 27/08/2012 13:55:54
si vous tapez juste le NOM de la méthode... 27/08/2012 13:56:07
sans l'exécuter 27/08/2012 13:56:14
vous obtenez (ex): 27/08/2012 13:56:24

In [26]: l.remove
Out[26]: <built-in method remove of list object at 0x967030c>
27/08/2012 13:56:34
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
pas intéressant 27/08/2012 13:57:10
pour exécuter la méthode 27/08/2012 13:57:16
faut mettre les parentheses 27/08/2012 13:57:23
l.remove() 27/08/2012 13:57:26

In [27]: l.remove()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)

/net/nfs-authnss.b.ca.auf/home/davin.baragiotta/<ipython console> in <module>()

TypeError: remove() takes exactly one argument (0 given)
27/08/2012 13:57:36
27/08/2012 13:57:39
ça, c'est une erreur... 27/08/2012 13:57:45
je vous laisse lire... c'est plutôt explicite 27/08/2012 13:57:56
ça se lit comme suit 27/08/2012 13:58:37
on a une erreur de Type 27/08/2012 13:58:48
claudine.mosozi a rejoint le salon 13:59        

davin.baragiotta 27/08/2012 13:59:19
la méthode remove() s'attend à avoir un seul argument (un paramètre si on veut) et on lui a rien donné
en gros... remove veut absolument la chose à enlever en paramètre sinon il retourne une erreur 27/08/2012 13:59:40
l.remove(1) 27/08/2012 13:59:46

In [28]: l.remove(1)

In [29]: l
Out[29]: [3]
27/08/2012 13:59:59
c'est bien d'expérimenter dans l,interpréteur... on veut pas d'erreur dans notre script 27/08/2012 14:00:19
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
questions? 27/08/2012 14:00:41
photo-valentin.kouadio@auf.org a quitté la salle 14:01  
photo-valentin.kouadio a rejoint le salon 14:01 

davin.baragiotta 27/08/2012 14:01:32
bon...
alors je continue 27/08/2012 14:01:36
 
arnaud.amelina@auf.org 27/08/2012 14:01:40
balla.fall 27/08/2012 13:50:41
QUESTION : signification de ....:
QUESTION : signification de ....: PASS 27/08/2012 13:51:23
QUESTION : signification de ....: except        

davin.baragiotta 27/08/2012 14:01:45
ah
PASS? 27/08/2012 14:01:56
thierry.tsitoara a rejoint le salon 14:02       

davin.baragiotta 27/08/2012 14:02:13
except fait partie des structures de gestion des erreurs... on ne l'utilise pas seul
ex.: 27/08/2012 14:02:18
try:
l.remove()
except TypeError:
pass 27/08/2012 14:02:34
(try en première ligne, désolé) 27/08/2012 14:02:47
ç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
si y'a une erreur TypeError... on la capte et on fait le traitement suivant : 27/08/2012 14:03:25
pass 27/08/2012 14:03:26
pass = mot clé... pour dire on fait rien 27/08/2012 14:03:34
utiliser pass le moins possible 27/08/2012 14:04:01
on l'utilise pour commencer un truc et y revenir plus tard 27/08/2012 14:04:11
ex.: 27/08/2012 14:04:12
je définis une fonction que je ne termine pas : 27/08/2012 14:04:25

def suppression_indesirables():
pass 27/08/2012 14:04:44
 
arnaud.amelina@auf.org 27/08/2012 14:05:05
n/a     

davin.baragiotta 27/08/2012 14:05:17
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
pass 27/08/2012 14:05:18
voilà 27/08/2012 14:05:20
je continue 27/08/2012 14:05:24
on est rendu à "introspection" 27/08/2012 14:05:32
je vous invite à coder un peu de données 27/08/2012 14:05:47
pour le plaisir de sentir du python dans les doigts 27/08/2012 14:05:57
nom = "Davin Baragiotta" 27/08/2012 14:06:16
prenom, nom = nom.split() 27/08/2012 14:06:27
nom.split? 27/08/2012 14:06:48
testez le résultat : 27/08/2012 14:06:58
prenom 27/08/2012 14:07:00
nom 27/08/2012 14:07:01
aaaaah... votre administration veut que tous les noms de familles soient majusucules 27/08/2012 14:07:20
car ils savent pas discerner le prénom du nom? 27/08/2012 14:07:31
(c'est du vécu, je le jure) 27/08/2012 14:07:38
nom.upper() 27/08/2012 14:07:43
vous pouvez vérifier si la valeur est altérée ou pas 27/08/2012 14:08:01

In [30]: nom = 'Baragiotta'

In [31]: nom.upper()
Out[31]: 'BARAGIOTTA'

In [32]: nom
Out[32]: 'Baragiotta'
27/08/2012 14:08:23
ah tiens... non 27/08/2012 14:08:27
c'est un service à la volée que de le mettre en majuscule... mais le nom original reste 27/08/2012 14:08:43
un truc pas mal à savoir c'est le .join() 27/08/2012 14:09:07
sur un string 27/08/2012 14:09:12
on peut utiliser join 27/08/2012 14:09:17
pour que ce string serve de jointure à des éléments d'une collection (une liste disons) 27/08/2012 14:09:38
exemple : 27/08/2012 14:09:43
'.'.join([1,2,3]) 27/08/2012 14:09:53
la liste d'entiers 1, 2, 3 devrait être réunies par des points 27/08/2012 14:10:10
mais 27/08/2012 14:10:13

In [33]: '.'.join([1,2,3])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)

/net/nfs-authnss.b.ca.auf/home/davin.baragiotta/<ipython console> in <module>()

TypeError: sequence item 0: expected string, int found
27/08/2012 14:10:29
python est fortement typé 27/08/2012 14:10:34
on relie pas des entiers avec des strings 27/08/2012 14:10:44
'.'.join(['davin','moussa','eric']) 27/08/2012 14:11:08

In [34]: '.'.join(['davin','moussa','eric'])
Out[34]: 'davin.moussa.eric'
27/08/2012 14:11:24
donne effectivement une chaine 27/08/2012 14:11:31
c'est peut-être pas intuitif... le .join()... mais c,est bon à savoir 27/08/2012 14:11:49
Conteneurs 27/08/2012 14:12:09
il faut savoir que les conteneurs (liste, tuple, dictionnaires...) 27/08/2012 14:12:21
... peuvent contenir des trucs hétérogènes 27/08/2012 14:12:34
l = ['davin', 1, False] 27/08/2012 14:12:43
c'est légal 27/08/2012 14:12:47
liste de string, entier et booléen 27/08/2012 14:13:04
aussi, pour accéder à un item d'un conteneur 27/08/2012 14:13:22
on peut utiliser son index numérique 27/08/2012 14:13:30
0 = premier item 27/08/2012 14:13:34
l[0] 27/08/2012 14:13:38

In [35]: l = ['davin', 1, False]

In [36]: l[0]
Out[36]: 'davin'

In [37]: l[1]
Out[37]: 1

In [38]: l[2]
Out[38]: False
27/08/2012 14:14:02
il existe aussi le slicing... 27/08/2012 14:14:15
c'est une notion pour retourne une "tranche" de valeurs... 27/08/2012 14:14:27
je vous laisse explorer seul, plus tard 27/08/2012 14:14:37
l[0:1] 27/08/2012 14:14:41

In [42]: l[0:2]
Out[42]: ['davin', 1]
27/08/2012 14:15:13
Itérations 27/08/2012 14:15:21
pour itérer, while existe 27/08/2012 14:15:32
mais c'est pas top 27/08/2012 14:15:38
exemple : 27/08/2012 14:15:42

In [43]: annee = 2012

In [44]: while annee <= 2015:
....: print annee
....: annee = annee + 1
....: 
....: 
2012
2013
2014
2015
27/08/2012 14:16:17
rappel : pas d'accolade {} pour le bloc... indenter 27/08/2012 14:16:41
le top = for 27/08/2012 14:16:58
pour itérer 27/08/2012 14:17:01

In [47]: for i in range(2012, 2016):
....: print i
....: 
....: 
2012
2013
2014
2015
27/08/2012 14:17:49
remarquez la beauté du in 27/08/2012 14:18:02
"in" 27/08/2012 14:18:06
ça se lit : pour chaque élément dans le conteneur itérable... fait ceci (ici = print) 27/08/2012 14:18:29
le "in" existe aussi dans un autre contexte 27/08/2012 14:18:46
pour tester l'appartenance à un ensemble 27/08/2012 14:18:57
je veux dire... une collection (pas nécessaire un set() ) 27/08/2012 14:19:15

In [48]: l = [1,2,3]

In [49]: 2 in l
Out[49]: True

In [50]: 5 in l
Out[50]: False
27/08/2012 14:19:37
ahaha! 27/08/2012 14:19:39
ça commence à être génial comme syntaxe! 27/08/2012 14:19:48
ce qui nous amène au conditionnel pour tester ça 27/08/2012 14:20:05
les conditionnel... pas grand chose à dire : 27/08/2012 14:20:12
if, elif et else 27/08/2012 14:20:19
encore une fois, pas de {} 27/08/2012 14:20:25
et pas de endif non plus 27/08/2012 14:20:32

In [51]: liste = range(6)

In [52]: if 5 in liste:
....: print 'hourra 5'
....: elif 4 in liste:
....: print 'hourra 4'
....: else:
....: print 'pas hourra'
....: 
hourra 5
27/08/2012 14:20:57
on peut tester la valeur de range(6) tout seul... dans interpréteur : 27/08/2012 14:21:19

In [53]: range(6)
Out[53]: [0, 1, 2, 3, 4, 5]
27/08/2012 14:21:32
range est utilisé notamment pour contrôler nombre itération dans des for... 27/08/2012 14:21:58
... mais ici je l'utilise juste pour me faire une liste rapido 27/08/2012 14:22:09
on voit que 5 est dans la liste créée par range(6) 27/08/2012 14:22:25
donc le test "5 in liste" retourne vrai 27/08/2012 14:22:40
Fichiers 27/08/2012 14:23:00
c'est très facile d'ouvrir un fichier et parser son contenu en python 27/08/2012 14:23:17
créer un fichier dans le répertoire où vous avez lancé votre terminal 27/08/2012 14:23:34
(dans votre home, par exemple) 27/08/2012 14:23:44
un fichier texte qu'on va appeller 'texte.txt' 27/08/2012 14:23:57
entre des lignes de texte... 27/08/2012 14:24:04
moi j'ai ça : texte.txt
J'aime Python
et la communauté tech
de l'AUF.
27/08/2012 14:24:44
pour parser les lignes de ce fichier : 27/08/2012 14:24:59

In [56]: for line in f.readlines():
print line,
f.close()
....: 
....: 
J'aime Python
et la communauté tech
de l'AUF.


27/08/2012 14:25:45
on voit que chacune des lignes a été imprimée... 27/08/2012 14:26:04
hey... vous comprenez la puissance du truc? 27/08/2012 14:26:14
si vous avez des données .csv, à tout hasard... 27/08/2012 14:26:26
et que vous faites une split sur a ligne et unpackez dans les variables 27/08/2012 14:26:48
on essaie? 27/08/2012 14:26:58
go... 27/08/2012 14:27:06
contenu de texte.txt :
'Davin', 'Baragiotta'
'Victor', 'Bruneau'
'Franck', 'Kouyami' 27/08/2012 14:27:45
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
des questions? 27/08/2012 14:29:08
(pendant qu'on cherche solutionnaire  ) 27/08/2012 14:29:20
ok... pas de question 27/08/2012 14:30:56
solution :
In [60]: f = open('texte.txt')

In [61]: for line in f.readlines():
....: prenom, nom = line.split()
....: 
....: print prenom
....: print nom
....: 
....: 
'Davin',
'Baragiotta'
'Victor',
'Bruneau'
'Franck',
'Kouyami'
27/08/2012 14:31:00
au lieu de printer la ligne comme on faisait, on la split 27/08/2012 14:31:15
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
ensuite j'imprime les variables 27/08/2012 14:31:50
Formattage de chaine 27/08/2012 14:31:55
on pourrait faire un truc plus joli avec les chaines 27/08/2012 14:32:06
lui dire bonjour 27/08/2012 14:32:17
voici la syntaxe : 27/08/2012 14:32:21
"Bonjour %s %s" % (prenom, nom.upper()) 27/08/2012 14:32:50
%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
%d = entier 27/08/2012 14:33:32
on voit qu'on a 2 %s dans "Bonjour %s %s" 27/08/2012 14:33:49
ensuite on a un % seul 27/08/2012 14:33:54
ça se lit ainsi : 27/08/2012 14:34:01
prend les valeurs à droite de % 27/08/2012 14:34:10
pour les mettre dans le string de gauche 27/08/2012 14:34:16
chaque variable, dans l'ordre, va remplacer la frime dans le placeholder 27/08/2012 14:34:39
en fait, je m'attends à avoir : 27/08/2012 14:34:49
"Bonjour Davin BARAGIOTTA" 27/08/2012 14:34:56
preuve : 27/08/2012 14:34:58

In [65]: f = open('texte.txt')

In [66]: for line in f.readlines():
prenom, nom = line.split()
print "Bonjour %s %s" % (prenom, nom.upper())
....: 
....: 
Bonjour 'Davin', 'BARAGIOTTA'
Bonjour 'Victor', 'BRUNEAU'
Bonjour 'Franck', 'KOUYAMI' 27/08/2012 14:35:53
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
on pourrait utiliser .trim() 27/08/2012 14:36:34
des questions avant d'aller plus loin? 27/08/2012 14:36:39
eddy.andriamanantena a quitté la salle 14:36    
eddy.andriamanantena a rejoint le salon 14:37   
moussa.nombre a rejoint le salon 14:37  

arnaud.amelina@auf.org 27/08/2012 14:38:00
Oui     

davin.baragiotta 27/08/2012 14:38:03
ok, on termine aevc l'écriture de script
ah? 27/08/2012 14:38:04
j'écoute 27/08/2012 14:38:06
 
arnaud.amelina@auf.org 27/08/2012 14:38:33
C'est bon tu as répondu dans l'autre espace     

davin.baragiotta 27/08/2012 14:38:37
ok      

arnaud.amelina@auf.org 27/08/2012 14:38:37
Continue donc   

davin.baragiotta 27/08/2012 14:38:44
un script
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
on vient de faire du code python... mais dans l'interpréteur 27/08/2012 14:39:13
s'agit de retranscrire le code intéressant qu'on vient de découvrir interactivement grace à introspection 27/08/2012 14:39:45
dans le support à l'atelier, je donne un exemple de script plus complet 27/08/2012 14:40:01
mais codons simplement ce qu'on vient de faire 27/08/2012 14:40:11
créons un fichier : script.py 27/08/2012 14:40:22
à côté de texte.txt (sur votre home, en principe) 27/08/2012 14:40:36
voici mon code : 27/08/2012 14:41:16
script.py :
f = open('texte.txt')

for line in f.readlines():
prenom, nom = line.split()
print "Bonjour %s %s" % (prenom, nom.upper()) 27/08/2012 14:41:23
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
ce script aurait pu faire plein de truc : stocker les noms dans une DB, par exemple 27/08/2012 14:42:14
mais essayons maintenant d'exécuter ce script 27/08/2012 14:42:25
ipython :
run script 27/08/2012 14:42:34
ou 27/08/2012 14:42:36

run script.py 27/08/2012 14:42:40
python :
$ python script.py 27/08/2012 14:42:53
(dépendamment de votre interpréteur) 27/08/2012 14:43:03
on y va 27/08/2012 14:43:27
voici : 27/08/2012 14:43:28

In [69]: run script
Bonjour 'Davin', 'BARAGIOTTA'
Bonjour 'Victor', 'BRUNEAU'
Bonjour 'Franck', 'KOUYAMI'
27/08/2012 14:43:39
tadaaaaaaaaaaaaaaaam! 27/08/2012 14:43:43
voici votre premier script python 27/08/2012 14:43:50
(ou peut-être pas  ) 27/08/2012 14:43:53
questions? 27/08/2012 14:44:13
 
doan.manh.ha 27/08/2012 14:44:17
ah oui
ça marche 27/08/2012 14:44:28
 
davin.baragiotta 27/08/2012 14:44:34
génial!
sérieusement... vous êtes maintenant très puissant 27/08/2012 14:44:44
pourquoi? 27/08/2012 14:44:47
car vous avez un langage de "haut niveau" 27/08/2012 14:45:01
qui peut donc faire des traitements plus complexes que bash mais de manière plus lisible 27/08/2012 14:45:23
attention : 27/08/2012 14:45:29
continuez d'utiliser bash partout où il fait bien le boulot 27/08/2012 14:45:41
mais pour des trucs de plus haut niveau, vous avez Python 27/08/2012 14:46:04
ce qui nous reste à voir 27/08/2012 14:46:10
en 10 minutes max : 27/08/2012 14:46:16
fonctions et import 27/08/2012 14:46:27
fonctions : je vous laisse voir à partir de la doc de l,atelier et doc officielle 27/08/2012 14:46:47
en fait, fait juste savoir c'est quoi une fonction en informatique 27/08/2012 14:46:59
ce qui est particulier, et cool en Python 27/08/2012 14:47:07
c'est les *args et **kwargs : 27/08/2012 14:47:16
des varaibles spéciales dans la déclaration de la fonction 27/08/2012 14:47:28
pour "ramasser" tous les paramètres qu'on pourrait lui passer 27/08/2012 14:47:41
ce qui donner des trucs comme : 27/08/2012 14:47:55
coucou('Paul') 27/08/2012 14:48:08
coucou('Paul', 'Lemay') 27/08/2012 14:48:16
et c'est légal... 27/08/2012 14:48:21
du polymorphisme de fonction, en quelque sorte 27/08/2012 14:48:30
import 27/08/2012 14:48:34
c'est là que ça se joue 27/08/2012 14:48:39
vous en voulez pas réinventer la roue 27/08/2012 14:48:49
vous voulez.... importer le code des autres 27/08/2012 14:48:57
voire le vôtre 27/08/2012 14:49:00
allez voir la doc de la librairie standar, pour le plaisir 27/08/2012 14:49:16
pour voir tous les modules qui s'offre à vous (sans rien à avoir à installer... ça vient avec Python) 27/08/2012 14:49:35
ça ferait l,objet d'une atelier plus avancé : 27/08/2012 14:49:51
http://wiki.auf.org/wikiteki/Ateliers/ 27/08/2012 14:50:04
http://wiki.auf.org/wikiteki/Ateliers/2012-02-24/Python 27/08/2012 14:50:10
vous y verrez des exemples (venant de JC) pour l'admin système 27/08/2012 14:50:26
mais pour de plus amples discussions : Python vs Bash... rendez-vous sur liste tech avec JC 27/08/2012 14:50:43
(moi je ne suis pas admin syst) 27/08/2012 14:50:48
27/08/2012 14:50:49
conclusion : 27/08/2012 14:50:56
avec les import... vous êtes royal 27/08/2012 14:51:08
import urlllib 27/08/2012 14:51:12
vous accédez au web 27/08/2012 14:51:18
pour importer vos propres trucs 27/08/2012 14:51:36
shafeek.sumser a quitté la salle 14:51  

davin.baragiotta 27/08/2012 14:51:50
lisez la section "modules" de l,atelier et expériementer dans l'interpréteur    
tran.xuan.huy a quitté la salle 14:51   

davin.baragiotta 27/08/2012 14:51:57
vous importez vos fonctions
vous codez une fois... et utilisez N fois 27/08/2012 14:52:06
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
vous avez un exemple à la fin de cet atelier 27/08/2012 14:52:45
on vous demander de parser un flux RSS 27/08/2012 14:52:52
essayez-le 27/08/2012 14:53:00
un petit tour sur le web et on trouve feedparser 27/08/2012 14:53:09
on lit sa doc 27/08/2012 14:53:14
on expérimente dans interpréteur 27/08/2012 14:53:20
on trouve notre solution 27/08/2012 14:53:24
... 27/08/2012 14:53:25
on la code dans un script et le tour est joué 27/08/2012 14:53:32
tran.xuan.huy a rejoint le salon 14:53  

davin.baragiotta 27/08/2012 14:53:41
c'est comme ça qu'on travaille avec Python
fin de la fin... pour stocker dans une DB comme un pro 27/08/2012 14:53:58
regardez : 27/08/2012 14:54:03
import sqlite3 27/08/2012 14:54:08
ça vient avec python 27/08/2012 14:54:13
http://docs.python.org/library/ 27/08/2012 14:54:32
vous trouverez donc dans library 27/08/2012 14:54:37
http://docs.python.org/library/sqlite3.html 27/08/2012 14:54:49
tadam... 27/08/2012 14:54:52
27/08/2012 14:54:55
mais vite, vous voudrez faire plus... 27/08/2012 14:55:04
et Django est là pour vous 27/08/2012 14:55:10
l'équipe SI aussi d,ailleurs 27/08/2012 14:55:20
je vous laisse regarder l'horaire pour les ateliers Django 27/08/2012 14:55:30
 
arnaud.amelina@auf.org 27/08/2012 14:55:33
Il reste 5 mn   

davin.baragiotta 27/08/2012 14:55:37
et je suis là opur vos questions
----------- FIN ATELIER : QUESTIONS ------------ 27/08/2012 14:55:55
 
arnaud.amelina@auf.org 27/08/2012 14:56:10
Formidable
Darvin Legrand 27/08/2012 14:56:20
Merci torrent applaudissement !!! 27/08/2012 14:56:45
 
davin.baragiotta 27/08/2012 14:56:53
ahaha   

arnaud.amelina@auf.org 27/08/2012 14:57:44
On a eu 28 Participants 29 y compris Formateur  

davin.baragiotta 27/08/2012 14:57:56
génial  

tran.xuan.huy 27/08/2012 14:58:11
je me demande si python est utile pour les techniciens de l'auf?        

davin.baragiotta 27/08/2012 14:58:12
j'en profite (avant d'aller au petit coin) pour faire la pub du prochain atelier :
Git : versionner votre code source... donc vos scripts python 27/08/2012 14:58:25
 
arnaud.amelina@auf.org 27/08/2012 14:58:26
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  

davin.baragiotta 27/08/2012 14:58:34
ahaha
-------------- FIN ATELIER Python ------------------- 27/08/2012 14:58:46

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

Ateliers/Python/Base/2012-08-27 (dernière édition le 2012-08-29 19:19:46 par DavinBaragiotta)