Exemples de scripts Python
Exemples de programmes écrits dans le langage de programmation Python dans sa version 2.5.
Exemples de codes représentatifs [modifier]
Une introduction [modifier]
ageDeEricPraline = 50 ageDeHenryWensleydale = 20 # Test if 0 > ageDeEricPraline > 150 or ageDeEricPraline > ageDeHenryWensleydale: print "l'age de Eric Praline est incorrect" #echange : swap ageDeHenryWensleydale, ageDeEricPraline = ageDeEricPraline,ageDeHenryWensleydale print "age de Henry Wensleydale = %d , age de Eric Praline = %d" %(ageDeHenryWensleydale,ageDeEricPraline) #>>> #l'age de Eric Praline est incorrect #age de Henry Wensleydale = 50 , age de Eric Praline = 20
Les structures de données en natif [modifier]
# Les listes : maListeDeMeubles = ['table','chaise','frigo'] maListeDeMeubles.sort() #Tri de la liste for unMeuble in maListeDeMeubles: print 'longueur de la chaîne ', unMeuble, '=', len(unMeuble) #les listes imbriquées: laListeDesNombresPairs = [ unNombre for unNombre in xrange(1000) if unNombre % 2 == 0] #Les dictionnaires : unAnnuaire = {'Laurent': 6389565, 'Paul': 6356785} for unNom, x in unAnnuaire.items(): print "le nom %s a pour numéro de téléphone %d" %(unNom, x) #Les tuples (n-uplet) : séquence constante Couleur = ('Rouge', 'Bleu', 'Vert') print Couleur[0], Couleur[1], Couleur[2] PointDeReference = (100, 200) print " x0 = %d y0 = %d " %(PointDeReference[0],PointDeReference[1])
Accès a une base de données [modifier]
# Avec MySql : import MySQLdb, pprint uneConnexionBDD = MySQLdb.connect(host ='192.32.12.10', user ='admin', passwd ='988', db ='uneBase') leCurseur = uneConnexionBDD.cursor() unAuteur = "'Zola'" leCurseur.execute(""" SELECT title, description FROM books WHERE author = %s """ % (unAuteur,)) pprint.pprint(leCurseur.fetchall()) leCurseur.query("update books set title='assommoir' where author='Zola'") uneConnexionBDD.commit()
# Par ODBC : import dbi, odbc connexion = odbc.odbc('mondsn/monlogin/monpassword') leCurseur = connexion.cursor() leCurseur.execute('select clientid, name, city from client') print leCurseur.fetchall()
Programmation réseau - Internet [modifier]
#Lire une page Web et afficher le source HTML import urllib print urllib.urlopen #Usage de FTP : démonstration des paramètres nommés import ftplib uneSessionFTP = ftplib.FTP( host = '198.12.45.123', user = 'MonLogin', passwd = 'MonMotDePasse') unFichier = open('monFichier.txt','rb') uneSessionFTP.storbinary( 'STOR monFichier.txt', unFichier ) #envoi du fichier unFichier.close() uneSessionFTP.quit()
Tracé de courbes avec matplotlib [modifier]
from pylab import plot, axis, savefig, show, title plot( [1,2,3,4], [1,4,9,16]) axis( [1, 4, 0, 16] ) title( 'ma courbe' ) savefig( 'uneCourbeSauvee.png' ) show()
Utilitaires de la bibliothèque standard [modifier]
#Encodage d'une image binaire sous forme de chaîne (Pour les protocoles qui n'acceptent que l'ASCII) lesDonneesImage = open('uneImage.gif','rb').read() laChaineZippee = lesDonneesImage.encode('zlib').encode('base64')
Jython : utilisation de Java en Python [modifier]
#Exemple d'une applet scripté from javax.swing import * class MyApplet( JApplet ): def init( self ): unLabel= JLabel("Jython améliore la productivité") self.getContentPane().add( unLabel )
Mail [modifier]
#Envoi par mail du contenu d'un fichier import smtplib from email.MIMEText import MIMEText IPduServeur = 'localhost' monFichierMail = open ('monMailAEnvoyer.txt', 'rb') # lecture du fichier leMessage = MIMEText ( monFichierMail.read() ) # création d'un message text/plain monFichierMail.close() leMessage['Subject'] = "Confirmation de l'exigence A441" leMessage['From'] = "expediteur@phales.com" leMessage['To'] = "destinataire@ecn.com" leServeurSMTP = smtplib.SMTP(IPduServeur) # envoi du messge leServeurSMTP.connect() leServeurSMTP.sendmail('expediteur@phales.com', 'destinataire@ecn.com', leMessage.as_string()) leServeurSMTP.quit()
Classe [modifier]
Exemple de classe (voir programmation orientée objet).
class Fruit : def __init__(self) : pass class Pomme(Fruit): """ Cette classe représente une pomme. """ Mangeurs = ["Jacques", "Nicolas","Virgile"] def __init__(self, couleur): """ Pour construire une Pomme, donnez sa couleur. """ Fruit.__init__(self) self._couleur = couleur def couleur(self): """ Retourne la couleur de la Pomme. """ return self._couleur def comestible(self, mangeur): """ Dit si la pomme est comestible ou non, en fonction du mangeur. """ if mangeur in self.Mangeurs: print mangeur, "mange des pommes" else: print mangeur, "n'aime pas les pommes" petitePomme = Pomme("verte") petitePomme.comestible("Pierre") # Pierre n'aime pas les pommes petitePomme.comestible("Nicolas") # Nicolas mange des pommes
On remarque notamment la présence de documentation (optionnelle bien sûr) directement dans le code. La commande help() permet d'obtenir, dans l'interpréteur Python, cette aide directement :
>>> help(Pomme)
donne :
Help on class Pomme in module __main__: class Pomme(Fruit) | Cette classe représente une pomme. | | Methods defined here: | | __init__(self, couleur) | Pour construire une Pomme, donnez sa couleur. | | comestible(self, mangeur) | Dit si la pomme est comestible ou non, | en fonction du mangeur. | | couleur(self) | Retourne la couleur de la Pomme. | | ---------------------------------------------------------------------- | Data and other attributes defined here: | | Mangeurs = ['Jacques', 'Nicolas', 'Virgile']
WMI (sous Windows 2000/XP) [modifier]
Lister les processus et leur nom
import wmi controler = wmi.WMI () for unProcessus in controler.Win32_Process (): print unProcessus.ProcessId, unProcessus.Name
Rebooter une machine à distance
import wmi controler = wmi.WMI (computer = "Nom_Machine_Distante", privileges = ["RemoteShutdown"] ) os = controler.Win32_OperatingSystem (Primary=1)[0] os.Reboot ()
Automation Win32 [modifier]
#Exemple de pilotage de CATIA par la technologie COM/DCOM import win32com.client catiaApplication = win32com.client.Dispatch("CATIA.Application") monDocument = catiaApplication.ActiveDocument.Product nombreDeProduit = monDocument.Products.Count for produits in range(nombreDeProduit): produits += 1 print monDocument.Products.Item(produits).Name #Exemple de pilotage du lecteur multimédia from win32com.client import Dispatch leMediaPlayer = Dispatch("WMPlayer.OCX") uneMorceauDeMusique = leMediaPlayer.newMedia("C:/mesDoc/monTitre.wma") # ou mp3 leMediaPlayer.currentPlaylist.appendItem(uneMorceauDeMusique) leMediaPlayer.controls.play() raw_input("appuyez sur la touche ENTRÉE pour arrêter la musique") leMediaPlayer.leMediaPlayer.stop()
ctypes [modifier]
ctypes permet d'accéder directement à des dll.
import ctypes # modification du fond d’écran de windows SPI_SETDESKWALLPAPER = 20 ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, "C:\\Mes documents\\Mes images\\maPhoto.bmp" , 0) # Resolution de l'écran SM_CXSCREEN = 0 SM_CYSCREEN = 1 taille_x = ctypes.windll.user32.GetSystemMetrics(SM_CXSCREEN) taille_y = ctypes.windll.user32.GetSystemMetrics(SM_CYSCREEN) print "La résolution d'écran est %d par %d" % (taille_x, taille_y)
Data Mining - Réseaux bayésiens avec reverend [modifier]
# les filtres Baysesiens permettent de classifier des données. # Exemple d'application : reconnaissance automatique de la langue, anti-Spam, cryptographie... from reverend.thomas import Bayes unReseauBayesiens = Bayes() uneListeDePropositions = [('math', 'on fait des calculs , des additions, des multiplications'), ('math', '3 + 4 = 7 ; 10 + 7 = 17 ; 99/11 = 9'), ('math', '12 + 10 -5 = 17 ; 70-10 = 60'), ('math', 'le carré des 2 cotés du triangle sont liés par une relation'), ('math', 'la fonction sinus ( sin ) sert à représenter les phénomènes cycliques'), ('math', 'sin (PI) = 3.14159 et cosinus (0) = 1' ), ('philosophie', 'je disserte sur le sens de la vie'), ('philosophie', 'être ou ne pas être, telle est la question'), ('philosophie', 'je sais que je ne sais rien'), ('philosophie', 'les phénomènes sont réels à condition que nous le souhaitions'), ('philosophie', 'la raison est-elle toujours raisonnable ?'), ('philosophie', 'le cerveau peut-il être compris ?'), ('philosophie', "l'univers peut-il être l'objet de connaissance ?"), ('philosophie', 'le calcul a-t-il des limites intrinsèques ?'), ('philosophie', "une relation peut être durable si l'homme la souhaite")] for uneCategorie, uneProposition in uneListeDePropositions: unReseauBayesiens.train( uneCategorie, uneProposition ) # entrainement du réseau phraseAnalyse1 = 'voici un résultat : 66/6 = 11 ' phraseAnalyse2 = "je ne saurais dire s'il pourra tout comprendre ... " phraseAnalyse3 = "le phénomène de la pluie pourrait être d'origine divine" phraseAnalyse4 = 'la représentation bourbakiste des chiffres assure leur détermination' for unePhrase in (phraseAnalyse1, phraseAnalyse2, phraseAnalyse3, phraseAnalyse4) : solutions = unReseauBayesiens.guess(unePhrase) # calculs de la catégorie categorie = solutions[0][0] probabilite = solutions[0][1] print "la phrase '%s' est de catégorie '%s' avec une probabilité de '%d /100' " %(unePhrase,categorie,probabilite *100) # Résultats : # la phrase 'voici un résultat : 66/6 = 11 ' est de catégorie 'math' avec une probabilité de '99 /100' # la phrase 'je ne saurais dire s'il pourra tout comprendre ... ' est de catégorie 'philosophie' avec une probabilité de '99 /100' # la phrase 'le phénomène de la pluie pourrait être d'origine divine' est de catégorie 'philosophie' avec une probabilité de '92 /100' # la phrase 'la représentation bourbakiste des chiffres assure leur détermination' est de catégorie 'philosophie' avec une probabilité de '55 /100'
Implémentation du crible d'Ératosthène [modifier]
Ce script calcule les nombres premiers inférieurs à 200 en appliquant la méthode du crible d'Ératosthène.
# calcul des nombres premiers inférieurs à N # initialisation #!/usr/bin/python # -*- coding: utf-8 -*- N = 200 liste = range(2, N) # liste de 2 à N nombre = 2 while nombre*nombre <= N: # tant que le nb premier < à la # racine carrée de N for i in liste[liste.index(nombre) + 1:]: # parcourt la liste à partir de ce nombre if i % nombre == 0: # un multiple du nombre est trouvé liste.remove(i) # ou "del liste[ liste.index(i) ]" : # on le raye de la liste nombre = liste[liste.index(nombre) + 1] # on prend le nombre suivant non rayé print liste # affichage du résultat
Voici une version algorithmiquement équivalente mais beaucoup plus rapide qui exploite la puissance du type liste de Python :
N = 1000 # on cherche les nombres premiers inférieurs à N liste = range(N+1) # création de la liste des entiers de 0 à N liste[1] = 0 # 1 n'est pas premier nombre = 2 while nombre ** 2 <= N: # tant que le nombre à examiner est inférieur à # la racine carrée de N liste[nombre*2 :: nombre] = [0] * ((N // nombre) - 1) # éliminer tous les # multiples du nombre # passer au nombre non examine suivant nombre += 1 while not liste[nombre]: nombre += 1 liste = filter (None, liste) print liste # et à la fin, on affiche le résultat
Que l'on peut enfin réduire à :
N, nombre = 1000, 2 liste, liste[1] = range(N+1), 0 while nombre**2 <= N: liste[nombre*2 :: nombre] = [0]*len( liste[nombre*2 :: nombre] ) nombre += 1 print filter(None, liste)
Les fonctions, les types et les classes sont des objets [modifier]
#Les fonctions sont des objets def uneFonction ( unEntier, uneChaine): "documentation de la fonction" print "unEntier : " + str( unEntier ) #Vous pouvez d'ailleurs ajouter des attributs à la fonction: uneFonction.compteur = 10 print "la fonction a pour nom :" + uneFonction.__name__ print "la fonction a pour documentation : " + uneFonction.__doc__ print uneFonction.compteur >>la fonction a pour nom :uneFonction la fonction a pour documentation : documentation de la fonction 10 #Les types de base sont des objets valeurOpposee = -25 .__neg__() # equivalent à - (-25) print "la valeur opposée de -25 est : " + str ( valeurOpposee ) #Les classes sont des objets class Insecte : pass # On definit une classe mère, qui ne fait rien pour l'instant class Fourmi(Insecte): # Definition d'une classe dérivée def marcher (self): print "je marche" print "la classe Fourmi a pour classe mère :" + str ( Fourmi.__bases__) #l'opposé de -25 est : 25 #la classe Fourmi a pour classe mère :(<class __main__.Insecte at 0x02B69A20>,)
Graphique [modifier]
Tkinter [modifier]
Cet exemple montre comment se servir de la bibliothèque Tkinter pour créer une interface graphique.
from Tkinter import * fen = Tk() text1 = Label(fen, text='Bonjour !') entr1 = Entry(fen) bout1 = Button(fen, text='Quitter', command=fen.quit) text1.grid( row=1, column=1) entr1.grid( row=1, column=2) bout1.grid( row=2, column=1) fen.mainloop()
WxPython [modifier]
Cet exemple crée en WxPython une fenetre et un boite modale sur appui bouton - l'utilisation d'editeur WYSIWYG comme glade ou boa constructor est recommandée pour les grandes applications
from wxPython.wx import * ID_OK_BOUTON=100 class PanneauPerso( wxPanel ): def __init__(self, parent, id): wxPanel.__init__(self, parent, id) self.unChampText = wxStaticText(self, -1, "TextAvantLeClic", wxPoint(5, 5)) self.unChampBouton = wxButton(self, ID_OK_BOUTON, "CliquerMoi", wxPoint(100, 5)) EVT_BUTTON(self, ID_OK_BOUTON, self.OnClick) #enregistrement de la callBack def OnClick(self,event): self.unChampText.SetLabel('ApresLeClic') #sur appui bouton, modifer le champ texte b = wxMessageDialog( self, "Une Boite de dialogue","titre", wxOK) b.ShowModal() #montrer un e boite de dialogue b.Destroy() monApplication = wxPySimpleApp() maFenetre = wxFrame(None, -1, "Titre de l Application") PanneauPerso ( maFenetre , -1) maFenetre.Show(1) monApplication .MainLoop()