« Tutorial python » : différence entre les versions
Aller à la navigation
Aller à la recherche
(Page créée avec « ==Info== Ceci est une introduction simple au language python en vue de programer un bot Wikipast. Ce tutoriel sera mis à jour au fur et à mesure du cours pour facilite... ») |
|||
| (11 versions intermédiaires par le même utilisateur non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
==Info== | ==Tutorial sur la base: Info== | ||
Ceci est une introduction simple au language python en vue de | Ceci est une introduction simple au language python en vue de programmer un bot Wikipast. | ||
Le fichier "Lexique381.txt" peut être téléchargé à l'adresse http://www.lexique.org/telLexique.php. | |||
==Tutorial sur la base: Code== | |||
<nowiki> | <nowiki> | ||
################################################## | ################################################## | ||
#### 1. Commentaires et chaine de charactères #### | #### 1. Commentaires et chaine de charactères #### | ||
################################################## | ################################################## | ||
# Ce court tutorial utilise la version 3 de python | |||
# Un commentaire est une ligne de code commençant par le charactère "#", il ne sera pas interprété par python | # Un commentaire est une ligne de code commençant par le charactère "#", il ne sera pas interprété par python | ||
| Ligne 33 : | Ligne 28 : | ||
correspond plutôt à la création | correspond plutôt à la création | ||
d'une longue chaine de caractère | d'une longue chaine de caractère | ||
celle-ci est attribuée à la variable x | |||
''' | ''' | ||
# Une chaine de charactère est généralement | # print est une fonction qui permet de visualiser la variable passée en paramètre (avec formatage) | ||
# Une chaine de charactère est généralement déclarée avec ' ou " avant et après la chaine en question | |||
# il est bien sur possible d'échapper le caractère avec \ | |||
x='mon prénom est "Vincent"' | |||
print(x) | |||
x="mon prénom est 'Vincent'" | |||
print(x) | |||
x='mon prénom est \'Vincent\'' | |||
print(x) | |||
# Ces chaines peuvent être concaténées grâce à l'opérateur + | |||
y_1="\nCeci est un exemple d'" | |||
y_2='une chaine de charactère' | y_2='une chaine de charactère' | ||
y_3=' (ou "string")' | |||
y=y_1+y_2+y_3 | |||
print(y) | |||
y=y_1+y_2+'\n'+y_3 | |||
print(y) | |||
# l'opérateur * permet de multiplier le "pattern" de la chaine de charactère | |||
x='\n'+'1e poussin fait '+'piou'*2+'\n' | |||
print(x) | |||
# | # une chaîne peut être séparée par un caractère quelquonque | ||
# via la fonction split qui donne une list d'élément | |||
x='piou-piou' | |||
print(x.split('-')) | |||
# inversément une liste peut être concaténée par un caractère quelquonque | |||
# via la fonction join qui donne une chaîne en sortie | |||
x=['piou','piou'] | |||
print('-'.join(x)) | |||
# l'opération * multiplie aussi le patern dans une liste | |||
x=['piou']*2 | |||
print('-'.join(x)) | |||
# en combinant les expressions | |||
# | x='\n'+'1e poussin fait '+'-'.join(['piou']*2)+'\n' | ||
print(x) | print(x) | ||
# Un nombre réel ou entier peut également être converti en string via la fonction str | |||
# Un nombre réel ou entier peut être converti en string via la fonction str | |||
x=1000 | x=1000 | ||
y=str(x) | y=str(x) | ||
print('voici un nombre converti en string (fonction str) : '+y) | |||
print('\n'+'-'*50+'\n') | print('\n'+'-'*50+'\n') | ||
################################### | ################################### | ||
#### 2. Modules et importation #### | #### 2. Modules et importation #### | ||
| Ligne 70 : | Ligne 87 : | ||
# Une fois le module XXX installé on utilise "import XXX" dans le script python pour pouvoir utiliser | # Une fois le module XXX installé on utilise "import XXX" dans le script python pour pouvoir utiliser | ||
# les fonctionalités du module. | # les fonctionalités du module. | ||
import | |||
import urllib.request | |||
# la fonction dir permets de retrouver les caractéristiques et méthodes rattachés au module | |||
dir(urllib.request) | |||
# On peut aussi utiliser "from XXX import YYY" pour importer la fonction YYY du module XXX. | |||
from urllib.request import urlopen | |||
# la fonction dir peut aussi être appliquée à une fonction | |||
dir(urlopen) | |||
print(urlopen.__doc__) | |||
# certain modules sont déjà pré-installé, d'autres nécessite l'installation via pip install | # certain modules sont déjà pré-installé, d'autres nécessite l'installation via pip install | ||
# d'autres modules plus spécifiques doivent éventuellement être | # d'autres modules plus spécifiques doivent éventuellement être installés manuellement selon | ||
# des instructions particulières. | # des instructions particulières. certains modules requierent la présence d'autres modules. | ||
import requests | import requests | ||
# si le module n'est pas installé, tapez "pip install request" dans une console de votre portable | |||
print('\n'+'-'*50+'\n') | |||
############################################################ | ############################################################ | ||
#### 3. déclaration de variables et opéarations simples #### | #### 3. déclaration de variables et opéarations simples #### | ||
| Ligne 100 : | Ligne 130 : | ||
print('conversion en float : '+str(x_float)) | print('conversion en float : '+str(x_float)) | ||
print('conversion en int : '+str(y_int)) | print('conversion en int : '+str(y_int)) | ||
# la fonction type permet d'afficher le type de variable | # la fonction type permet d'afficher le type de variable | ||
| Ligne 109 : | Ligne 138 : | ||
# Attention de mauvaises surprises peuvent subvenir quand on oublie le type de la variable | # Attention de mauvaises surprises peuvent subvenir quand on oublie le type de la variable | ||
# et que l'on mélange des variables de type différent | # et que l'on mélange des variables de type différent (seulement en python 2) | ||
x=4/3 | x=4/3 | ||
print('4/3 ='+str(x)) | print('4/3 ='+str(x)) | ||
| Ligne 120 : | Ligne 149 : | ||
x=1.0*(4/3) | x=1.0*(4/3) | ||
print('1.0*(4/3) ='+str(x)) | print('1.0*(4/3) ='+str(x)) | ||
print( | |||
print(str(x)) | |||
print(int(x)) | |||
print(float(x)) | |||
# Une astuce rapide consiste en cas de doute à multiplier une variable entière ou réelle | # Une astuce rapide consiste en cas de doute à multiplier une variable entière ou réelle | ||
| Ligne 128 : | Ligne 160 : | ||
print('Exposant : 4**2 = '+str(4**2)) | print('Exposant : 4**2 = '+str(4**2)) | ||
print('Modulo : 4.4%2 = '+str(4.4%2)) | print('Modulo : 4.4%2 = '+str(4.4%2)) | ||
print(int(4.4)+(4.4%2)) | |||
# des fonctions mathematiques | # des fonctions mathematiques simples | ||
import math | import math | ||
x=2*math.pi | |||
x_sqrt=math.sqrt(x) | x_sqrt=math.sqrt(x) | ||
e_exp_x=math.exp(x) | e_exp_x=math.exp(x) | ||
cos_x=math.cos(x) | |||
print(x,x_sqrt,e_exp_x,cos_x) | |||
print('\n'+'-'*50+'\n') | print('\n'+'-'*50+'\n') | ||
####################### | ####################### | ||
#### 4. conditions #### | #### 4. conditions #### | ||
| Ligne 175 : | Ligne 209 : | ||
print(x<y and y<z) | print(x<y and y<z) | ||
print(x<y or y<z) | print(x<y or y<z) | ||
print(x<=y) | |||
print(x<=x) | |||
print(x<x) | |||
print('\n'+'-'*50+'\n') | |||
################################# | ################################# | ||
#### 5. boucles for et while #### | #### 5. boucles for et while #### | ||
| Ligne 191 : | Ligne 230 : | ||
# un élément de la liste (la première position est l'indice 0) | # un élément de la liste (la première position est l'indice 0) | ||
print(liste[0]) | |||
print(liste[2]) | print(liste[2]) | ||
# la longeur de la liste est données par la fonction "len" | # la longeur de la liste est données par la fonction "len" | ||
print(len(liste)) | print(len(liste)) | ||
# le dernier élément de la liste | |||
print(liste[len(liste)-1]) | |||
print(liste[-1]) | |||
# extraire plusieurs éléments de la liste | |||
print(liste[2:4]) | |||
print(liste[:4]) | |||
print(liste[2:]) | |||
print(liste[-3:]) | |||
print(liste[:-3]) | |||
print(liste[-3:-1]) | |||
# boucle "for" | # boucle "for" | ||
for i in range(3): | |||
print(liste[i]) | |||
for i in range(len(liste)): | for i in range(len(liste)): | ||
print(liste[i]) | print(liste[i]) | ||
| Ligne 203 : | Ligne 258 : | ||
print(element) | print(element) | ||
# boucle "while" | # boucle "while" | ||
compteur=0 | compteur=0 | ||
while compteur<len(liste): | while compteur<len(liste): | ||
print liste[compteur] | print(liste[compteur]) | ||
compteur+=1 | compteur+=1 | ||
print('\n'+'-'*50+'\n') | |||
############################## | ############################## | ||
#### 6 functions creation #### | #### 6 functions creation #### | ||
| Ligne 219 : | Ligne 274 : | ||
while compteur<compteur_max: | while compteur<compteur_max: | ||
if compteur%2==0: | if compteur%2==0: | ||
print compteur | print(compteur) | ||
compteur+=1 | compteur+=1 | ||
ma_fonction() | ma_fonction() | ||
print('\n'+'-'* | print('\n'+'-'*10+'\n') | ||
def ma_fonction_param(compteur_max=20,modulo=3): | def ma_fonction_param(compteur_max=20,modulo=3): | ||
| Ligne 229 : | Ligne 284 : | ||
while compteur<compteur_max: | while compteur<compteur_max: | ||
if compteur%modulo==0: | if compteur%modulo==0: | ||
print compteur | print(compteur) | ||
compteur+=1 | compteur+=1 | ||
ma_fonction_param() | ma_fonction_param() | ||
print('\n'+'-'* | print('\n'+'-'*10+'\n') | ||
ma_fonction_param(40) | ma_fonction_param(40) | ||
print('\n'+'-'* | print('\n'+'-'*10+'\n') | ||
ma_fonction_param(40,10) | ma_fonction_param(40,10) | ||
print('\n'+'-'*50+'\n') | print('\n'+'-'*50+'\n') | ||
################################ | ################################ | ||
#### | #### 7 read and write files #### | ||
################################ | ################################ | ||
# read | # read | ||
# à vous de remplacer le path par le votre | |||
text=fichier.read( | path='C:/Users/buntinx/Dropbox/DHBachelor2019/tutorial_python/' | ||
nom_fichier='Lexique381.txt' | |||
fichier=open(path+nom_fichier,'r') | |||
text=fichier.read() | |||
fichier.close() | fichier.close() | ||
text=text.split('\n') | text=text.split('\n') | ||
| Ligne 258 : | Ligne 315 : | ||
for i in range(30,60): | for i in range(30,60): | ||
print(text[i][0]+' / '+text[i][3]) | print(text[i][0]+' / '+text[i][3]) | ||
print('\n'+'-'* | print('\n'+'-'*10+'\n') | ||
for i in range(60,30,-1): | for i in range(60,30,-1): | ||
print(text[i][0]+' / '+text[i][3]) | print(text[i][0]+' / '+text[i][3]) | ||
print('\n'+'-'* | print('\n'+'-'*10+'\n') | ||
for i in range(59,29,-1): | for i in range(59,29,-1): | ||
| Ligne 272 : | Ligne 329 : | ||
fichier=open('monlexique.txt', "w") | fichier=open('monlexique.txt', "w") | ||
for i in range(len(text)): | for i in range(len(text)): | ||
fichier.write(text[i][0] | fichier.write(text[i][0]+' / '+text[i][3]+'\n') | ||
fichier.close() | fichier.close() | ||
def fct_write(name): | def fct_write(name): | ||
| Ligne 300 : | Ligne 354 : | ||
x=fct_read('exercice.txt') | x=fct_read('exercice.txt') | ||
print(x) | print(x) | ||
</nowiki> | |||
==Tutorial sur la programmation de bot: Info== | |||
Ceci est une introduction à la programation d'un bot Wikipast. Il s'agit ici d'ajouter et de modifier le contenu des pages "Madame X" et "Monsieur Y", créées uniquement dans le but de servir de page "bac à sable" pour exercer les scripts de bots sans conséquences sur Wikipast. | |||
==Tutorial sur la programmation de bot: Code== | |||
<nowiki> | |||
import requests | |||
from bs4 import BeautifulSoup | |||
user='testbot' | |||
passw='dhbot2017' | |||
baseurl='http://wikipast.epfl.ch/wikipast/' | |||
summary='Wikipastbot update' | |||
names=['Madame X','Monsieur Y'] | |||
# | # Login request | ||
payload={'action':'query','format':'json','utf8':'','meta':'tokens','type':'login'} | |||
r1=requests.post(baseurl + 'api.php', data=payload) | |||
# | #login confirm | ||
login_token=r1.json()['query']['tokens']['logintoken'] | |||
payload={'action':'login','format':'json','utf8':'','lgname':user,'lgpassword':passw,'lgtoken':login_token} | |||
r2=requests.post(baseurl + 'api.php', data=payload, cookies=r1.cookies) | |||
#get edit token2 | |||
params3='?format=json&action=query&meta=tokens&continue=' | |||
r3=requests.get(baseurl + 'api.php' + params3, cookies=r2.cookies) | |||
edit_token=r3.json()['query']['tokens']['csrftoken'] | |||
edit_cookie=r2.cookies.copy() | |||
edit_cookie.update(r3.cookies) | |||
# 1. retrouver le contenu et l'imprimer | |||
for name in names: | |||
result=requests.post(baseurl+'api.php?action=query&titles='+name+'&export&exportnowrap') | |||
soup=BeautifulSoup(result.text, "lxml") | |||
code='' | |||
for primitive in soup.findAll("text"): | |||
code+=primitive.string | |||
print(code) | |||
# 2. changer le contenu | |||
# écraser le contenu précédent: | |||
for name in names: | |||
content='==Contenu==\nVoici un contenu qui a écrasé le précédent\n' | |||
payload={'action':'edit','assert':'user','format':'json','utf8':'','text':content,'summary':summary,'title':name,'token':edit_token} | |||
r4=requests.post(baseurl+'api.php',data=payload,cookies=edit_cookie) | |||
print(r4.text) | |||
# rajouter du contenu: | |||
for name in names: | |||
content='\n==Contenu rajouté==\nVoici du contenu rajouté\n' | |||
content+='abcdef' | |||
payload={'action':'edit','assert':'user','format':'json','utf8':'','appendtext':content,'summary':summary,'title':name,'token':edit_token} | |||
r4=requests.post(baseurl+'api.php',data=payload,cookies=edit_cookie) | |||
print(r4.text) | |||
# exercice: Faire un bot qui rajoute des commentaires sur les pages "Madame X" et "Monsieur Y" ou bien en change son contenu | |||
# exemple: remplacement de mots par d'autres, inversions de majuscules et minuscules, etc.... | |||
import requests | |||
import | |||
from bs4 import BeautifulSoup | from bs4 import BeautifulSoup | ||
user='testbot' | |||
passw='dhbot2017' | |||
baseurl='http://wikipast.epfl.ch/wikipast/' | |||
summary='Wikipastbot update' | |||
user=' | |||
passw= | |||
baseurl='http://wikipast. | |||
summary=' | |||
names=['Madame X','Monsieur Y'] | names=['Madame X','Monsieur Y'] | ||
# Login request | # Login request | ||
r1=requests.post(baseurl+'api.php' | payload={'action':'query','format':'json','utf8':'','meta':'tokens','type':'login'} | ||
r1=requests.post(baseurl + 'api.php', data=payload) | |||
#login confirm | #login confirm | ||
login_token=r1.json()['query']['tokens']['logintoken'] | |||
r2=requests.post(baseurl+'api.php' | payload={'action':'login','format':'json','utf8':'','lgname':user,'lgpassword':passw,'lgtoken':login_token} | ||
r2=requests.post(baseurl + 'api.php', data=payload, cookies=r1.cookies) | |||
#get edit token2 | #get edit token2 | ||
params3='?format=json&action=query&meta=tokens&continue=' | params3='?format=json&action=query&meta=tokens&continue=' | ||
r3=requests.get(baseurl+'api.php'+params3,cookies=r2.cookies) | r3=requests.get(baseurl + 'api.php' + params3, cookies=r2.cookies) | ||
edit_token=r3.json()['query']['tokens']['csrftoken'] | edit_token=r3.json()['query']['tokens']['csrftoken'] | ||
| Ligne 454 : | Ligne 445 : | ||
edit_cookie.update(r3.cookies) | edit_cookie.update(r3.cookies) | ||
def minuscule(name): | |||
result=requests.post(baseurl+'api.php?action=query&titles='+name+'&export&exportnowrap') | result=requests.post(baseurl+'api.php?action=query&titles='+name+'&export&exportnowrap') | ||
soup=BeautifulSoup(result.text, | soup=BeautifulSoup(result.text, "lxml") | ||
content='' | content='' | ||
for primitive in soup.findAll("text"): | for primitive in soup.findAll("text"): | ||
content+=primitive.string | content+=primitive.string | ||
content=content.lower() | |||
payload={'action':'edit','assert':'user','format':'json','utf8':'','text':content,'summary':summary,'title':name,'token':edit_token} | |||
r4=requests.post(baseurl+'api.php',data=payload,cookies=edit_cookie) | |||
content | |||
payload={'action':'edit','assert':'user','format':'json','text':content,'summary':summary,'title':name,'token':edit_token} | |||
r4=requests.post(baseurl+'api.php' | |||
print(r4.text) | print(r4.text) | ||
def majuscule(name): | |||
result=requests.post(baseurl+'api.php?action=query&titles='+name+'&export&exportnowrap') | result=requests.post(baseurl+'api.php?action=query&titles='+name+'&export&exportnowrap') | ||
soup=BeautifulSoup(result.text, | soup=BeautifulSoup(result.text, "lxml") | ||
content='' | content='' | ||
for primitive in soup.findAll("text"): | for primitive in soup.findAll("text"): | ||
content+=primitive.string | content+=primitive.string | ||
content=content. | content=content.upper() | ||
payload={'action':'edit','assert':'user','format':'json','utf8':'','text':content,'summary':summary,'title':name,'token':edit_token} | |||
r4=requests.post(baseurl+'api.php',data=payload,cookies=edit_cookie) | |||
payload={'action':'edit','assert':'user','format':'json','text':content,'summary':summary,'title':name,'token':edit_token} | |||
r4=requests.post(baseurl+'api.php' | |||
print(r4.text) | print(r4.text) | ||
majuscule('Monsieur Y') | |||
minuscule('Monsieur Y') | |||
majuscule('Madame X') | |||
</nowiki> | </nowiki> | ||
Dernière version du 19 mars 2019 à 09:40
Tutorial sur la base: Info
Ceci est une introduction simple au language python en vue de programmer un bot Wikipast. Le fichier "Lexique381.txt" peut être téléchargé à l'adresse http://www.lexique.org/telLexique.php.
Tutorial sur la base: Code
##################################################
#### 1. Commentaires et chaine de charactères ####
##################################################
# Ce court tutorial utilise la version 3 de python
# Un commentaire est une ligne de code commençant par le charactère "#", il ne sera pas interprété par python
# Un commentaire sur plusieurs ligne peut être effectué à l'aide de la chaine de caractères ''' avant
# et après le block à commenter. Cependant ce n'est pas le rôle principal de ''' dont le but est plutôt
# de déterminer une longue chaine de caractère
'''
Ceci est un commentaire en bloc
Ce commentaire s'étend
sur trois lignes
'''
x='''
En réalité, cette façon de faire
correspond plutôt à la création
d'une longue chaine de caractère
celle-ci est attribuée à la variable x
'''
# print est une fonction qui permet de visualiser la variable passée en paramètre (avec formatage)
# Une chaine de charactère est généralement déclarée avec ' ou " avant et après la chaine en question
# il est bien sur possible d'échapper le caractère avec \
x='mon prénom est "Vincent"'
print(x)
x="mon prénom est 'Vincent'"
print(x)
x='mon prénom est \'Vincent\''
print(x)
# Ces chaines peuvent être concaténées grâce à l'opérateur +
y_1="\nCeci est un exemple d'"
y_2='une chaine de charactère'
y_3=' (ou "string")'
y=y_1+y_2+y_3
print(y)
y=y_1+y_2+'\n'+y_3
print(y)
# l'opérateur * permet de multiplier le "pattern" de la chaine de charactère
x='\n'+'1e poussin fait '+'piou'*2+'\n'
print(x)
# une chaîne peut être séparée par un caractère quelquonque
# via la fonction split qui donne une list d'élément
x='piou-piou'
print(x.split('-'))
# inversément une liste peut être concaténée par un caractère quelquonque
# via la fonction join qui donne une chaîne en sortie
x=['piou','piou']
print('-'.join(x))
# l'opération * multiplie aussi le patern dans une liste
x=['piou']*2
print('-'.join(x))
# en combinant les expressions
x='\n'+'1e poussin fait '+'-'.join(['piou']*2)+'\n'
print(x)
# Un nombre réel ou entier peut également être converti en string via la fonction str
x=1000
y=str(x)
print('voici un nombre converti en string (fonction str) : '+y)
print('\n'+'-'*50+'\n')
###################################
#### 2. Modules et importation ####
###################################
# python permet d'installer facilement divers modules via la console cmd.exe ou un terminal mac
# en tapant directement la commande "pip install XXX" ou XXX est le module désiré.
# Une fois le module XXX installé on utilise "import XXX" dans le script python pour pouvoir utiliser
# les fonctionalités du module.
import urllib.request
# la fonction dir permets de retrouver les caractéristiques et méthodes rattachés au module
dir(urllib.request)
# On peut aussi utiliser "from XXX import YYY" pour importer la fonction YYY du module XXX.
from urllib.request import urlopen
# la fonction dir peut aussi être appliquée à une fonction
dir(urlopen)
print(urlopen.__doc__)
# certain modules sont déjà pré-installé, d'autres nécessite l'installation via pip install
# d'autres modules plus spécifiques doivent éventuellement être installés manuellement selon
# des instructions particulières. certains modules requierent la présence d'autres modules.
import requests
# si le module n'est pas installé, tapez "pip install request" dans une console de votre portable
print('\n'+'-'*50+'\n')
############################################################
#### 3. déclaration de variables et opéarations simples ####
############################################################
# Déclaration d'un entier
x=4
print('voici un nombre entier : '+str(x))
# Déclaration d'un réel
y=4.4
print('voici un nombre réel : '+str(y))
#opération simples
z=x+y
print("voici le résultat de l'addition : "+str(z))
# Attention la variable x à été convertie automatiquement en variable réelle
# La conversion "propre" s'obtient à l'aide des fonctions suivantes
x_float=float(x)
y_int=int(y)
print('conversion en float : '+str(x_float))
print('conversion en int : '+str(y_int))
# la fonction type permet d'afficher le type de variable
print(type(x))
print(type(x_float))
print(type(y))
print(type(y_int))
# Attention de mauvaises surprises peuvent subvenir quand on oublie le type de la variable
# et que l'on mélange des variables de type différent (seulement en python 2)
x=4/3
print('4/3 ='+str(x))
x=4/3.0
print('4/3.0 ='+str(x))
x=1.0*4/3
print('1.0*4/3 ='+str(x))
x=(1.0*4)/3
print('(1.0*4)/3 ='+str(x))
x=1.0*(4/3)
print('1.0*(4/3) ='+str(x))
print(str(x))
print(int(x))
print(float(x))
# Une astuce rapide consiste en cas de doute à multiplier une variable entière ou réelle
# par le nombre réel 1.0, ce qui rend en sortie une variable réelle de même valeur
# Exposant et modulo
print('Exposant : 4**2 = '+str(4**2))
print('Modulo : 4.4%2 = '+str(4.4%2))
print(int(4.4)+(4.4%2))
# des fonctions mathematiques simples
import math
x=2*math.pi
x_sqrt=math.sqrt(x)
e_exp_x=math.exp(x)
cos_x=math.cos(x)
print(x,x_sqrt,e_exp_x,cos_x)
print('\n'+'-'*50+'\n')
#######################
#### 4. conditions ####
#######################
x=5
y='5'
z=int(float(x))
x==y
x==z
x==y and x==z
x==y or x==z
condition=x==y
if condition:
print('yes')
else:
print('non')
condition=x==z
if condition:
print('yes')
else:
print('non')
x=5.5
y=5.55
z=5.45
print(x<y)
print(y<z)
print(x<y<z)
print(z<x<y)
print(x<y and y<z)
print(x<y or y<z)
print(x<=y)
print(x<=x)
print(x<x)
print('\n'+'-'*50+'\n')
#################################
#### 5. boucles for et while ####
#################################
liste=[]
print(liste)
liste.append(5)
liste.append(2.45)
liste.append('un')
liste.append('une')
liste.append('des')
print(liste)
# un élément de la liste (la première position est l'indice 0)
print(liste[0])
print(liste[2])
# la longeur de la liste est données par la fonction "len"
print(len(liste))
# le dernier élément de la liste
print(liste[len(liste)-1])
print(liste[-1])
# extraire plusieurs éléments de la liste
print(liste[2:4])
print(liste[:4])
print(liste[2:])
print(liste[-3:])
print(liste[:-3])
print(liste[-3:-1])
# boucle "for"
for i in range(3):
print(liste[i])
for i in range(len(liste)):
print(liste[i])
for element in liste:
print(element)
# boucle "while"
compteur=0
while compteur<len(liste):
print(liste[compteur])
compteur+=1
print('\n'+'-'*50+'\n')
##############################
#### 6 functions creation ####
##############################
def ma_fonction():
compteur_max=10
compteur=1
while compteur<compteur_max:
if compteur%2==0:
print(compteur)
compteur+=1
ma_fonction()
print('\n'+'-'*10+'\n')
def ma_fonction_param(compteur_max=20,modulo=3):
compteur=1
while compteur<compteur_max:
if compteur%modulo==0:
print(compteur)
compteur+=1
ma_fonction_param()
print('\n'+'-'*10+'\n')
ma_fonction_param(40)
print('\n'+'-'*10+'\n')
ma_fonction_param(40,10)
print('\n'+'-'*50+'\n')
################################
#### 7 read and write files ####
################################
# read
# à vous de remplacer le path par le votre
path='C:/Users/buntinx/Dropbox/DHBachelor2019/tutorial_python/'
nom_fichier='Lexique381.txt'
fichier=open(path+nom_fichier,'r')
text=fichier.read()
fichier.close()
text=text.split('\n')
for i in range(len(text)):
text[i]=text[i].split('\t')
text=text[:(len(text)-1)]
for i in range(30,60):
print(text[i][0]+' / '+text[i][3])
print('\n'+'-'*10+'\n')
for i in range(60,30,-1):
print(text[i][0]+' / '+text[i][3])
print('\n'+'-'*10+'\n')
for i in range(59,29,-1):
print(text[i][0]+' / '+text[i][3])
# write
fichier=open('monlexique.txt', "w")
for i in range(len(text)):
fichier.write(text[i][0]+' / '+text[i][3]+'\n')
fichier.close()
def fct_write(name):
fichier=open(name, "w")
for i in range(100):
if i%5==0:
fichier.write(str(i)+'\n')
fichier.close()
def fct_read(name):
fichier=open(name, 'r')
text=fichier.read()
fichier.close()
text=text.split('\n')
text=text[:(len(text)-1)]
nombre=[]
for i in range(len(text)):
if i%2==0:
nombre.append(int(text[i]))
return nombre
fct_write('exercice.txt')
x=fct_read('exercice.txt')
print(x)
Tutorial sur la programmation de bot: Info
Ceci est une introduction à la programation d'un bot Wikipast. Il s'agit ici d'ajouter et de modifier le contenu des pages "Madame X" et "Monsieur Y", créées uniquement dans le but de servir de page "bac à sable" pour exercer les scripts de bots sans conséquences sur Wikipast.
Tutorial sur la programmation de bot: Code
import requests
from bs4 import BeautifulSoup
user='testbot'
passw='dhbot2017'
baseurl='http://wikipast.epfl.ch/wikipast/'
summary='Wikipastbot update'
names=['Madame X','Monsieur Y']
# Login request
payload={'action':'query','format':'json','utf8':'','meta':'tokens','type':'login'}
r1=requests.post(baseurl + 'api.php', data=payload)
#login confirm
login_token=r1.json()['query']['tokens']['logintoken']
payload={'action':'login','format':'json','utf8':'','lgname':user,'lgpassword':passw,'lgtoken':login_token}
r2=requests.post(baseurl + 'api.php', data=payload, cookies=r1.cookies)
#get edit token2
params3='?format=json&action=query&meta=tokens&continue='
r3=requests.get(baseurl + 'api.php' + params3, cookies=r2.cookies)
edit_token=r3.json()['query']['tokens']['csrftoken']
edit_cookie=r2.cookies.copy()
edit_cookie.update(r3.cookies)
# 1. retrouver le contenu et l'imprimer
for name in names:
result=requests.post(baseurl+'api.php?action=query&titles='+name+'&export&exportnowrap')
soup=BeautifulSoup(result.text, "lxml")
code=''
for primitive in soup.findAll("text"):
code+=primitive.string
print(code)
# 2. changer le contenu
# écraser le contenu précédent:
for name in names:
content='==Contenu==\nVoici un contenu qui a écrasé le précédent\n'
payload={'action':'edit','assert':'user','format':'json','utf8':'','text':content,'summary':summary,'title':name,'token':edit_token}
r4=requests.post(baseurl+'api.php',data=payload,cookies=edit_cookie)
print(r4.text)
# rajouter du contenu:
for name in names:
content='\n==Contenu rajouté==\nVoici du contenu rajouté\n'
content+='abcdef'
payload={'action':'edit','assert':'user','format':'json','utf8':'','appendtext':content,'summary':summary,'title':name,'token':edit_token}
r4=requests.post(baseurl+'api.php',data=payload,cookies=edit_cookie)
print(r4.text)
# exercice: Faire un bot qui rajoute des commentaires sur les pages "Madame X" et "Monsieur Y" ou bien en change son contenu
# exemple: remplacement de mots par d'autres, inversions de majuscules et minuscules, etc....
import requests
from bs4 import BeautifulSoup
user='testbot'
passw='dhbot2017'
baseurl='http://wikipast.epfl.ch/wikipast/'
summary='Wikipastbot update'
names=['Madame X','Monsieur Y']
# Login request
payload={'action':'query','format':'json','utf8':'','meta':'tokens','type':'login'}
r1=requests.post(baseurl + 'api.php', data=payload)
#login confirm
login_token=r1.json()['query']['tokens']['logintoken']
payload={'action':'login','format':'json','utf8':'','lgname':user,'lgpassword':passw,'lgtoken':login_token}
r2=requests.post(baseurl + 'api.php', data=payload, cookies=r1.cookies)
#get edit token2
params3='?format=json&action=query&meta=tokens&continue='
r3=requests.get(baseurl + 'api.php' + params3, cookies=r2.cookies)
edit_token=r3.json()['query']['tokens']['csrftoken']
edit_cookie=r2.cookies.copy()
edit_cookie.update(r3.cookies)
def minuscule(name):
result=requests.post(baseurl+'api.php?action=query&titles='+name+'&export&exportnowrap')
soup=BeautifulSoup(result.text, "lxml")
content=''
for primitive in soup.findAll("text"):
content+=primitive.string
content=content.lower()
payload={'action':'edit','assert':'user','format':'json','utf8':'','text':content,'summary':summary,'title':name,'token':edit_token}
r4=requests.post(baseurl+'api.php',data=payload,cookies=edit_cookie)
print(r4.text)
def majuscule(name):
result=requests.post(baseurl+'api.php?action=query&titles='+name+'&export&exportnowrap')
soup=BeautifulSoup(result.text, "lxml")
content=''
for primitive in soup.findAll("text"):
content+=primitive.string
content=content.upper()
payload={'action':'edit','assert':'user','format':'json','utf8':'','text':content,'summary':summary,'title':name,'token':edit_token}
r4=requests.post(baseurl+'api.php',data=payload,cookies=edit_cookie)
print(r4.text)
majuscule('Monsieur Y')
minuscule('Monsieur Y')
majuscule('Madame X')