Professional Documents
Culture Documents
But de ce cours
! Connatre et utiliser des schmas algorithmiques simples (parcours, recherches, ...) dans des structures de donnes diffrentes (tableaux et
fichiers)
Python
langage de programmation
Valrie Bellynck (2009), daprs un diaporama dAlain Bozzi (2008), lui-mme venant de celui de Bob Cordeau (2008)
! Connatre le langage de programmation Python ! Savoir utiliser les algorithmes de base et les adapter nimporte quel langage
Programme - Script
programme
ou un
script est
! une suite dinstructions s'enchanant de manire squentielle pour rsoudre un problme donn.
instruction est
! Une instruction est compose dun ou plusieurs mots cls du langage pour effectuer une partie de la tche globale. ! Une instruction respecte une grammaire et une syntaxe.
Compilation et interprtation
! Le programme est crit l'aide d'un logiciel est appel
Interprtation
! Dans la technique appele interprtation, le logiciel interprteur doit tre utilis chaque fois que l'on veut faire fonctionner le programme. ! Dans cette technique en effet, chaque ligne du programme source analys est traduite au fur et mesure en quelques instructions du langage machine, qui sont ensuite directement excutes.
diteur
! Il existe deux techniques principales pour effectuer la traduction d'un programme source en code binaire excutable par la machine :
la compilation et l'interprtation
Compilation
! La compilation consiste traduire la totalit du texte source en une fois. ! Le logiciel compilateur lit toutes les lignes du programme source et produit une nouvelle suite de codes que l'on appelle programme objet (ou code objet). ! Celui-ci peut dsormais tre excut indpendamment du compilateur et tre conserv tel quel dans un fichier, cest un fichier excutable.
Compilation et interprtation
Chacune de ces deux techniques a ses avantages et ses inconvnients :
! L'interprtation est idale lorsque l'on est en phase d'apprentissage du langage, ou en cours d'exprimentation sur un projet. ! Avec cette technique, on peut en effet tester immdiatement toute modification apporte au programme source, sans passer par une phase de compilation qui demande toujours du temps.
Par contre, lorsqu'un projet comporte des fonctionnalits complexes qui doivent s'excuter rapidement, la compilation est prfrable.
! Un programme compil fonctionnera toujours nettement plus vite que son homologue interprt, puisque dans cette technique l'ordinateur n'a plus (re)traduire chaque instruction en code binaire avant qu'elle puisse tre excute.
8
Compilation et interprtation
Certains langages modernes tentent de combiner les deux techniques afin de retirer le meilleur de chacune. C'est le cas de Python et aussi de Java.
! Lorsque vous lui fournissez un programme source, Python commence par le compiler ! pour produire un code intermdiaire, similaire un langage machine, que l'on appelle bytecode, ! lequel sera ensuite transmis un interprteur pour l'excution finale.
if(a == 10): print "a gal 10" else: print "a diffrent de 10"!
11
Les erreurs
1. Lerreur de syntaxe
! Python ne peut excuter un programme que si sa syntaxe est parfaitement
correcte. d'erreur.
! Dans le cas contraire, le processus s'arrte et vous obtenez un message ! Le terme syntaxe se rfre aux rgles que les auteurs
10
12
Notion dalgorithme
Mthode de conception dun algorithme
1/ la prparation du traitement : recherche des donnes dentres et sorties ncessaires la rsolution du problme. 2/ le traitement : rsolution pas pas du problme pos, aprs une dcomposition en plusieurs tapes lmentaires que lon sait rsoudre. 3/ ldition des rsultats : affichage du traitement afin que lutilisateur puisse en prendre connaissance et traitement des erreurs.
13
Notion dalgorithme
Dmarche analytique 1/ prparation du traitement : quelles sont les donnes ?
! pi est une *constante elle ne sera pas demande lutilisateur. ! Les rayons rExt et rInt, variable dun disque lautre, il faut les demander lutilisateur. Ce sont les entres.
*constante : variable dont le contenu de change pas pendant toute la dure dexcution du programme.
15
Notion dalgorithme
Etude dun exemple
Une machine dcoupe dans une plaque, des disques circulaires de rayon rExt, percs dun trou circulaire de rayon rInt < rExt et ne dbordant pas du disque. Quelle est la surface dun disque dcoup ?
Notion dalgorithme
! c) calculer la surface du trou : sDuTrou = pi * rInt * rInt ! d) calculer la surface du disque dcoup : surface = sGrandDisque sDuTrou
surface!
Surface calculer
14
16
! ! ! !
! !
! !
n = 9 # En voici un autre!
Exemple
! Variable : valMin ! Sous-programme : ecrireChaine()
17 19
Les variables
Variable = conteneur d'information qui porte un nom = rfrence une adresse mmoire (informatiquement)
Les noms des variables sont conventionnellement crits en minuscule. Ils commencent par une lettre ou le caractre _, puis ventuellement, des lettres, des chiffres. La casse est significative (les caractres majuscules et minuscules sont distingus). Ils doivent tre diffrents des mots rservs de Python.
n = 10
msg = "Bonjour"
euro = 6,55957
Oprateurs et expression
oprateurs = symboles spciaux utiliss pour reprsenter des oprations mathmatiques simples, telles l'addition ou la multiplication. oprandes = valeurs combines l'aide des oprateurs.
! Les oprateurs attendent des oprandes de certains types et seulement ceux-l
Le type entier
Un type caractrise
! la place mmoire ncessaire pour mmoriser les lments de ce type ! les oprations quon peut faire sur les lments de ce type Oprations arithmtiques
Exemple dexpression :
oprateur
2 <= 8
premier oprande deuxime oprande
! Les oprateurs Python ne sont pas seulement les quatre oprateurs mathmatiques de base. ! Il faut ajouter :
!!l'oprateur ** pour l'exponentiation, !!des oprateurs logiques, !!des oprateurs agissant sur les chanes de caractres, !!des oprateurs effectuant des tests d'identit ou d'appartenance, !!etc.
! ! ! ! !
! ! ! ! !
! ! ! ! ! !
20 20 20 20 20 20
+ 3 - 3 * 3 ** 3 / 3 % 3
# 23
! ! !
# 17 ! # 60
! !
21
2 ** 40 ! 3 * 72L !
Le type flottant
Le type flottant est la seule faon de mmoriser les nombres dcimaux et les nombres rels
! !
# False # True
! ! ! !
# True (ds le premier membre)
! !
! !
Les instructions
Instruction = action dun programme = opration de base dun langage de programmation Les actions courantes dpendent donc du langage et incluent (concernant Python)
! la dclaration de variables et l'attribution de valeurs (dfinition et affectation), ! le choix dexcuter une suite dinstructions ou une autre selon une condition, ! lexcution de boucles itratives ou conditionnelles, ! l'appel de procdures.
Laffectation (suite)
Affecter nest pas comparer !
laffectation a un effet mais na pas de valeur :
a = b ! ! !
! !
!
!
L'ordre dans lequel les instructions sont excutes dans un programme est appel flux de contrle ou flux d'excution.
Quand on met au point un programme parce quil ne fait pas ce quon veut, on simule le flux dexcution afin de reprer o ce que le programme fait faire est dcal par rapport ce quon aurait voulu.
a == b ! ! !
! !
!
!
Le flux de contrle varie chaque fois qu'un programme est excut, selon les valeurs dentre reues au moment de l'excution.
25
Laffectation
On affecte une valeur une variable en utilisant le signe
Dans une affectation, la partie de gauche reoit ou prend pour valeur la partie droite :
a = 4
! # forme de base !
! a += 2 ! # idem : a = a + 2 si a existe dj ! ! c = d = 8 ! # cibles multiples " ! ! # (affectation de droite gauche) ! ! e, f = 2.7, 5.1 # affectation de tuple (par position) ! ! e, f = f, e
# change les valeurs de e et f !
a = 2 ! ! !
! !
La valeur dune variable peut voluer au cours du temps (la valeur antrieure est perdue) :
! !
a = a + 1 ! a = a - 1 !
# 3 (incrmentation) # 2 (dcmentation) !
26
28
Les sorties
Linstruction print permet dafficher des sorties lcran :
!
2.45 !
! ! ! !
! ! ! !
! -29.55 ! 78.4!
34.45
29
31
Les entres
Linstruction raw_input() permet deffectuer une saisie. Le rsultat est toujours une chane de caractres que lon peut ensuite transtyper :
a1 = raw_input("Entrez un flottant : ") ! ! ! ! ! ! ! ! ! # a1 contient une chaine (ex :10.52)! a = float(a1) # transtypage en flottant ! # ou plus brivement : ! b = float(raw_input(" Entrez un autre flottant : "))!
30
32
Les modules
Le noyau de base de python contient des instructions et quelques fonctions de base, mais par exemple le calcul du sinus risque dtre compliqu Un module reprsente un ou des fichiers python (.py),
! il contient des instructions crites dans le langage Python. ! But : proposer des services comme la possibilit demployer :
!!des oprations mathmatiques (sin, cos, ...) !!ou des oprations graphiques (tracer une ligne,...) !!ou encore bien dautres oprations spcifiques (base de donnes, xml, ...)
33
Python
if (condition): code excut si condition est vraie else: code excut si condition est fausse instruction suivante
Observez!l'indentation!!!!
Oprateurs de comparaison
La condition value dans une action conditionnelle peut contenir les oprateurs de comparaison suivants : ! x == y # x est gal y ! x != y # x est diffrent de y ! x > y # x est plus grand que y ! x < y # x est plus petit que y ! x >= y # x est plus grand que, ou gal y ! x <= y # x est plus petit que, ou gal y
Que fait ce programme ?
Exemple
fumeur = raw_input("patient fumeur (oui ou non) ?") if fumeur == "oui": niveau_de_risque = 3 else: niveau_de_risque = 0 print niveau_de_risque
Oprateurs de comparaison
! Notez bien que l'oprateur de comparaison pour l'galit de deux
valeurs est constitu de deux signes gale et non d'un seul
else:
code excut si condition_1 ou condition_2 est fausse instruction suivante (aprs les conditions)
Observez!l'indentation!!!!
8
Actions itratives
(= rptitives)
Il sagit de rpter plusieurs fois la ou les mmes actions (cette squence dactions est appele un bloc!ou boucle)
n fois
et les actions effectuer sont lies tour tour chacun des lments de la liste
3.!
soit
11
Exemple
Que fait ce programme ?
if (fumeur == "oui"): facteur_f = 2 else : facteur_f = 0 if (age > 60): facteur_a = 1 else : facteur_a = 0 niveau_de_risque = facteur_f + facteur_a if niveau_de_risque == 0: print "Le risque est nul !" if niveau_de_risque != 0: print "Il y a un risque !" if niveau_de_risque >= 3: print "Risque lev !"
10
Actions itratives
(= rptitives)
En Python, il ny a pas dinstruction for avec directement le nombre doccurrence. Les instructions permettant de commander et contrler le nombre ditration sont
! for !while
! une initialisation
12
Instruction for
Linstruction for est utilise pour parcourir un tableau de valeurs : for variable in [0,1,2,3,4]:
action
Initialisation Condition Incrmentation
La fonction range() est utilise pour construire un tableau de valeurs : for variable in range(dbut,fin,pas):
action
Initialisation Condition Incrmentation
13
for i in range(5,55,5) :
# i prend successivement les valeurs 5, 10 55
# affichage de la valeur
print i
14
print "****** Affichage dune chaine *******" ch = raw_input("Saisir une chaine : ") lg = len(ch) # lg contient le nombre de caractres de la chane for i in range(lg) : print ch[i] # affichage du caractre
16
Actions itratives
for variable in range(dbut,fin,pas):
action Exemple 2 : print "****** Table de multiplication *******" mult = raw_input("Saisir la table afficher : ") for i in range(1,11) :
# i prend successivement les valeurs 1, 2 10
Instruction while
Linstruction while peut-tre utilise de manire plus sre, rpter un bloc dactions tant quune condition est vrifie :
V = V0 autres_initialisations
while condition_sur_V :
actions_ne_modifiant_pas_V
incrment_de_V
!!Linitialisation (ou le bloc dinitialisations) dfinit la variable contrle par la boucle en lui affectant une valeur (appele valeur initiale), et effectue ventuellement des initialisations dautres variables sur lesquelles ne portent pas la condition !!La condition ne prend en compte la valeur courante de la variable contrle !!Laction (ou le bloc dactions) modifie ventuellement les valeurs des variables pendant lexcution du bloc dinstructions, mais pas celle de la variable contrle !!Lincrment modifie la valeur de la variable contrle . Les valeurs contenue dans cette variable chaque boucle sont appeles les valeurs courantes 19
Instruction while
Linstruction while est utilise pour rpter un bloc dactions tant quune condition est vrifie:
initialisation
while condition :
action !!Linitialisation (ou le bloc dinitialisations) dfinit des variables et leur affecte des valeurs (appeles valeurs initiales) !!Laction (ou le bloc dactions) modifie les valeurs des variables pendant lexcution du bloc dinstructions, ces valeurs sont appeles les valeurs courantes !!La condition prend en compte les valeurs courantes des variables
18
Actions rptitives
a = raw_input("Choisir un nombre de 1 3 (zro pour quitter) >>> ") a = int(a) # transtypage (chane vers entier) while a != 0 : # l'oprateur != signifie "diffrent de" if a == 1 : print "Vous avez choisi un : " print "le premier, l'unique, l'unit ... " a = 0 # pour quitter la boucle elif a == 2 : print "Vous prfrez le deux : " print "la paire, le couple, le duo ... " a = 0 # pour quitter la boucle elif a == 3: print "Vous optez pour le plus grand des trois : " print "le trio, la trinit, le triplet ... " a = 0 # pour quitter la boucle else : print "Un nombre entre UN et TROIS, s.v.p. " a = raw_input("Choisir un nombre de 1 3 >>> ") a = int(a) # transtypage (chane vers entier)
21
Le module Turtle
Python
module Turtle
Le module Turtle contient des fonctions pour dplacer un curseur dans une fentre graphique en laissant une trace sous les endroits par lesquels il est pass. Pour utiliser le module turtle, on crit au dbut du programme :
Valrie Bellynck (2009), daprs un diaporama dAlain Bozzi (2008), lui-mme venant de celui de Bob Cordeau (2008)
1
reset()
# Aller l'endroit de coordonnes x, y
color(couleur) goto(x, y)
# Avancer d'une distance donne
write(texte)
# Tourner gauche d'un angle donn (exprim # dessine un cercle de rayon donn en degrs)
left(angle)
# Tourner droite
circle(radius)
forward(distance)
# Reculer
# efface le dessin
right(angle)
# Choisir l'paisseur du trac
reset() # ou clear()
# se dplace la coord. x spcifie
backward(distance)
# Relever le crayon (pour pouvoir avancer sans dessiner)
width(paisseur) up()
# Abaisser le crayon(pour recommencer dessiner)
# Remplir un contour ferm l'aide de la couleur slectionne
setx(integer)
# se dplace la coord. y spcifie
down()
3
fill(1)
sety(integer)
4
Python
Liste
dans le langage python on parle plutt de listes que de tableaux. suite de valeurs dont le type peut tre identique ou diffrent. chaque valeur et est repre par un indice.
maListe indice
5
0
3
1
8
2
4
3
9
4
Exemples :
maListe = [5,3,8,4,9] # 5 lments fruits = [pomme, orange, figue, raisin] listeDiverses = [toto, 5, fleurs, 32.50]
Valrie Bellynck (2009), daprs un diaporama dAlain Bozzi (2008), lui-mme venant de celui de Bob Cordeau1(2008)
!Exemple 2 :
maListe[5,8,12,4] maListe[1] = 3 # modification de la liste 8 -> 3 print maListe[1] # affiche 3
!Exemple 1 :
maListe[5,8,12,4] valeur = maListe[0] print valeur # affiche 5
3
valeur = int(raw_input("Saisir un entier ")) # on ajoute la valeur en fin de liste listeEntier.append(valeur) # affichage de la liste lg = len(listeEntier) for i in range(lg) : print listeEntier[i]
7 8
# longueur de la liste
5
0
3
1
8
2
4
3
9
4
!le parcours
while (indice < lg_maListe)
!laction conditionnelle
maListe[i] == elem
9
trouve = i < lg
trouve = i < lg
Les sous-programmes
sous-programme =
suite nomme dinstructions, que lon peut appeler chaque fois que ncessaire
Notions de modularit
Python
2 types de sous-programmes :
Les procdures
Dfinition dun sous-programme en Python
Les fonctions
Exemple 2 :
def carre(val): return val * val
Exemple 3 :
def estPair(val): return val % 2 ==0
un entier
Exemple 4 :
def messagerie(email,texte):
un boolen
une chane
+ texte + "</a>"
Ces sous-programmes contiennent linstruction return, ils retournent respectivement un entier pour lexemple 2, un boolen pour lexemple 3, une chane de caractre pour lexemple 4, ce sont donc des fonctions.
return val % 2 ==0 # rend vrai si la valeur est paire ,faux sinon # appel de la fonction dessineCarre(longueur) if(estPair(longueur)): write ("La surface du carr, " + carre(longueur) + ", est paire. " )
7 8
Les modules
!Contenu dun module
!Regroupement de variable et de fonctions. !Le but dun module est de proposer des oprations
sur des domaines diffrents.
Les modules
import nomFichier et from nomFichier import *
! import nomFichier ncessite de prfixer les fonctions, sinon il se produit une erreur NameError. ! Si dans le module mDessin on trouve la fonction carre(largCote), il faut lutiliser de la manire suivante : import mDessin mDessin.carre(100) ! Dans le cas de from mDessin import *, le prfixage nest plus ncessaire, on utilise le module de la manire suivante : from mDessin import * carre(100)
9 10
mNomFichier ou
Python
Les fichiers et le module OS
Valrie Bellynck (2009), daprs un diaporama dAlain Bozzi (2008), lui-mme venant de celui de Christophe Morvan (2006)
1
Les fichiers
Utilisation des fichiers
Pour manipuler les fichiers, il faut :
1. crer une variable logique de type fichier (descripteur de fichier) et ouvrir le fichier soit en mode lecture ou criture. 2. effectuer le traitement (copie dune liste dans le fichier, copie dun fichier dans une liste, ...) 3. fermer le fichier en fin de traitement
Les fichiers
1/ crer une variable logique de type fichier (descripteur de fichier) et ouvrir le fichier soit en mode lecture ou criture.
Les fichiers
2/ effectuer le traitement, comme ici : la copie du fichier dans une liste
maListe = [] # dclaration dune liste vide
f = open(futilisateur.txt,r) f : variable de type fichier, (typage automatique fait par python) open () : fonction qui permet :
# lecture de toutes les lignes du fichier (readlines avec un s) lesLignes = f.readlines() for i in lesLignes :
louverture dun fichier pass en paramtre : ici futilisateur.txt de spcifier par un mode les oprations qui seront permises ici : r pour read, on ne pourra donc que lire le fichier.
5
maListe.append(i)
Les fichiers
Remarques importantes :
Vous avez du observer que le fichier futilisateurs.txt ntait pas
utilis dans le traitement. On louvre et puis cest tout.
Les fichiers
Ecriture dune liste dans un fichier
noms = [nadge, ludo, marie, alain] # ouverture f = open(futilisateurs.txt, w) # traitement for i in noms : f.write(i)
*ATTENTION : comme ces fonctions sont natives dans le noyau de python, il ne faut pas faire limport du module os
7
Exemple
Que fait le script suivant ?
getcwd() # retourne le rpertoire courant chdir(rep) # se place dans le rpertoire rep rename(src,dest) # renomme src en dest remove(chemin) et rmdir(rep) # supprime le rpertoire rep mkdir(rep) # cre le rpertoire rep listdir(rep) # liste les chiers ou les rpertoires dans rep system(cde) # excute la commande cde
11
12
Exemple
Lister larborescence dun rpertoire avec listdir()
#! /usr/bin/python # -*- coding: UTF-8 -*from os import * rep = getcwd() # retourne le rpertoire courant print "Le rpertoire courant est : ", rep chdir(rep) # se place dans le rpertoire rep listRep = [] # liste les chiers ou les rpertoires dans rep listeRep = listdir(rep) for i in listeRep: print i
14
/plus/de/un/rep/unFichier
exists(chemin) # vrai si chemin existe isfile(chemin) # vrai si chemin est un chier isdir(chemin) # vrai si chemin est un rpertoire walk(chemin,fonc,arg)
La fonction os.walk(path) cre un gnrateur de triplets (root, dirs, files) dans l'arborescence de path. Un triplet est gnr par rpertoire visit. root reprsente le chemin d'accs du rpertoire visit. dirs est la liste des sousrpertoires du rpertoire root et files est la liste des fichiers du rpertoire root. Voir http://docs.python.org/library/os.html#os.walk
13
Exemple
Lister larborescence dun rpertoire avec os.walk()
Gadget
Utiliser le module time pour tester la rapidit de 2 fonctions import time def compare(arg): a = time.clock()
# premire fonction tester, avec arg comme paramtre
import os.path def listdirectory(path): fichier=[] for root, dirs, files in os.walk(path): for i in files: fichier.append(os.path.join(root, i)) return fichier
fonction1(arg) b = time.clock()
# deuxime fonction tester, avec arg comme paramtre
fonction2(arg) c = time.clock() return b-a, c-b print compare('c:/python24') # pour appel avec Rsultat, par exemple : (1.0782314512039937, 1.0392410208560028) ## : les 2 fonctions se valent...
15
arg='c:/python24'
16
Entres/sorties
raw_input(invite) n=int(ch) Affiche le texte contenu dans invite et rcupre la chane tape au clavier Met la conversion de la chane contenue dans ch dans un entier, puis cet entier dans la variable n
Chanes
len(ch) Rend un entier dont la valeur est le nombre de caractres de la chane ch
Turtle
forward(100) left(90) color(red) width(1) up() down() goto(-50,0) Avance de 100 Tourne gauche de 90 Passe en rouge la couleur de la trace Dfini lpaisseur du trait 1 pt Lve le crayon (dplacements ultrieurs sans laisser de trace) Baisse le crayon (dplacements ultrieurs avec trace) Dplace le curseur la position (-50,0) (lorigine du plan est au centre)
Listes
li.append(red) li.insert(i,red) li.sort() li.remove(red) li.reverse() len(li) range(4) Allonge la liste avec la chane red Insre (=ajoute) chane red la position i de la liste li Trie les lments de la liste li Supprime la valeur red des lments de la liste li Retourne lordre des lments de la liste li Rend un entier dont la valeur est le nombre dlments de la liste li Construit une liste avec les valeurs : 0, 1, 2, 3 (en sarrtant < 4)
Fichiers
f=open(nomfic,m) f.close() f.read(taille) f.readlines() f.readline() f.write(ch) Construit un descripteur f sur le fichier nomfic dans le mode m Ferme le fichier point par le descripteur f Lit taille caractres du fichier dcrit par f, et met la chane ainsi obtenue dans une chane Lit toutes les lignes du fichier dcrit par f, et les mets dans une liste de chanes Lit la ligne courante du fichier pointe par le descripteur f, et la met dans une chane Ecrit la chane ch (ou le convertit en chane si cest un nombre) dans le fichier dcrit par f