Python 2015 BM
Python 2015 BM
Python 2015 BM
5- Compilation et interprtation
Il existe deux techniques pour effectuer la traduction d'un programme source en code binaire excutable par la
machine : l'interprtation et la compilation.
Dans la technique dinterprtation, le logiciel interprteur doit tre utilis chaque fois que l'on veut faire
fonctionner le programme.
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).
Chacune de ces deux techniques 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, Par contre, lorsqu'un projet
comporte des fonctionnalits complexes qui doivent s'excuter rapidement, la compilation est prfrable
1
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
Les avantages de cette mthode sont apprciables : Le fait de disposer en permanence d'un interprteur
permet de tester et vrifier le bon fonctionnement de chaque composant d'une application au fur et mesure de
sa construction. Le bytecode est portable.
Programme : un programme est la traduction dun algorithme en un langage compilable ou interprtable par un
ordinateur.
6- Installation de python on va utiliser la distribution pizzo http://www.pyzo.org/
Les deux modes dexcution dun code Python
Soit on enregistre un ensemble dinstructions Python dans un fichier grce un diteur (on parle alors dun script
Python)
soit on utilise linterprteur Python embarqu qui excute la boucle dvaluation
2
Il sagit de raliser une saisie au clavier : la fonction input() interrompt le programme, affiche une ventuelle
invite lcran et attend que lutilisateur entre une donne au clavier (affiche lcran) et la valide par Entre
La fonction standard input() effectue toujours une saisie en mode texte (la valeur retourne est une chane) dont
on peut ensuite changer le type (on dit aussi transtyper) :
>>> f1 = input("Entrez un >>> f2= float(input("Entrez un autre flottant >>> f1 = int(input("Entrez un entier :
flottant : ") : ")) "))
Entrez un flottant : 12.345 Entrez un autre flottant : 12.345 Entrez un entier : 12
>>> type(f1) >>> type(f2) >>> type(f1)
<class 'str'> <class 'float'> <class 'int'>
7.8- Oprations
les oprations classiques +,-,*
// division entire
/ division relle
% reste de la division entire
divmod(x,y) quotient et reste de la division
abs(x) valeur absolue
pow(x,y) ou x**y puissance
3
TPN1 : prise en main python
Tableau 1 : premires commandes python
instruction taper rsultat obtenu + commentaire ou explication
20+1
20/3
20//3
20%3
5.45*10
2**4
(3+2)*5
3+2*5
"bonjour "*5
Astuce : pour viter d'avoir retaper toute une ligne, utilisez la flche haut du clavier pour vous positionner sur
cette ligne, puis tapez Entre : la ligne est recopie aprs l'invite de commande et vous pouvez la modifier
avant de taper nouveau Entre.
Tableau 2 : premiers messages d'erreur
Certaines instructions ne sont pas acceptes par l'interprteur python et provoquent l'affichage d'un message
d'erreur. Il faut lire attentivement tous les messages d'erreur (mme s'ils sont en anglais) car ces messages nous
apprennent comment fonctionne le langage et nous aident corriger nos instructions et nos programmes. Tapez
les instructions suivantes, observez les erreurs obtenues et analysez-les :
20/0
20@3
"bonjour"/3
"bonjour" + 5
(3+2))*5
(3+2*5
type(3)
type(1.5)
type("bonjour")
4
type("3")
type(3+1.5)
+
*
/
//
%
**
Pour les chanes de caractres, l'oprateur + s'appelle la concatnation (il fusionne bout bout deux chanes de
caractres)
Tableau 4 : transtypage
On peut parfois transformer une donne d'un certain type, en une donne d'un autre type. Cela s'appelle le
transtypage (ou cast en anglais).
donne de de quel type est la instruction taper type du rsultat obtenu et/ou commentaire
dpart donne de dpart ?
3.0 int(3.0)
3.5 int(3.5)
3 float(3)
4 str(4)
"3" int("3")
"3.5" float("3.5")
"3.5" int("3.5")
"bonjour" int("bonjour")
5
instruction taper quelle est la Quelle est la donne (ou est De quel type est cette
variable ? le rsultat de l'valuation de donne (ou ce rsultat) ?
la partie droite) ?
age = 20
age = 30
prenom="Ali"
taille_m = 1.75
taille_cm=
100*taille_m
age = age + 3
phrase1 ="bonjour"+
prenom
phrase1 = phrase1 +
" !"
phrase2 = prenom +"
a " +str(age)+"
ans."
Pour afficher le contenu d'une variable dans l'interprteur python, il suffit de taper le nom de cette variable.
Taper les instructions suivantes et complter :
instruction taper quelle valeur contient
age
prenom
prenom="Ali"
prenom
age = 40
age
age = 22
age
age = age + 1
age
phrase1
phrase2
6
instruction taper commentaire
numero=input("entrez un
chiffre entre 1 et 5 : ")
type(numero)
numero = numero + 1
numero = int(numero)
type(numero)
numero = numero + 1
Tableau 7 : boolens
1 == 1
1 == 3
1 != 3
1 == 1.0
(3+7) == (5*2)
(1 == 1) and (2<2)
(1 == 1) and
(2<=2)
(2 == 15) or (3>2)
1 < 4 < 15
valeur = (1==1)
type(valeur)
not(valeur)
True or False
7
CHAPITRE 2 : Les structures conditionnelles
1- Test simple
Une instruction conditionnelle nest excute que si une condition donne est vrifie. Pour traduire cela, on
utilise linstruction if, qui a en Python la syntaxe suivante :
Syntaxe :
if condition: Exemple :
bloc dinstructions si condition vrifis note=float(input("Note sur 20 : ")
#suite du programme if note>=10.0 :
print(" jai la moyenne ")
print("fin du programme ")
2- Indentation signifiante
un bloc est une suite dinstructions qui sexcutent les unes aprs les autres. Pour
identifier sans ambigut les instructions appartenant au bloc du if, il est ncessaire de
les indenter. Indenter signifie ajouter un mme nombre despaces devant chacune des
lignes dfinissant les instructions.
3- Test alternatif
Syntaxe
if condition: Exemple :
bloc dinstructions si la condition est vrifie note=float(input("Note sur 20 : ")
else: if note>=10.0 :
bloc dinstructions si la condition nest pas vrifie print(" jai la moyenne ")
#suite du programme else :
print("C'est en dessous de la moyenne")
5- L'instruction elif
8
Une instruction elif (contraction de else if) est toujours associe une instruction if
Syntaxe
if condition 1:
bloc d'instructions 1
elif condition 2:
bloc d'instructions 2
elif condition 3:
bloc d'instructions 3
else:
bloc d'instructions 4
# suite du programme
Si condition 1 est vraie alors le bloc d'instructions 1 est excut, et on passe la suite du programme.
Si condition 1 est fausse alors on teste l'expression 2 :
si condition 2 est vraie on excute le bloc d'instructions 2, et on passe la suite du programme.
si condition 2 est fausse alors on teste la condition 3, etc.
Le bloc d'instructions 4 est donc excut si toutes les conditions sont fausses (c'est le bloc "par dfaut").
Parfois il n'y a rien faire.
Dans ce cas, on peut omettre l'instruction else :
if condition 1:
bloc d'instructions 1
elif condition 2:
bloc d'instructions 2
elif condition 3:
bloc d'instructions 3
# suite du programme
Exemple
note = float(input("Note sur 20 : "))
if note == 0.0:
print("C'est en dessous de la moyenne")
print("... lamentable !")
elif note == 20.0:
print("J'ai la moyenne")
print("C'est mme excellent !")
elif note < 10.0 and note > 0.0: # ou bien : elif 0.0 < note < 10.0:
print("C'est en dessous de la moyenne")
elif note >= 10.0 and note < 20.0: # ou bien : elif 10.0 <= note < 20.0:
print("J'ai la moyenne")
else:
print("Note invalide !")
print("Fin du programme")
9
Tp N2 : les structures conditionnelles
10
-Tout le monde commence 85 ans desprance de vie ............
-Si la personne fume, elle perd 10 ans desprance de vie ............
-Si la personne a une pression sanguine suprieure ............
120 mm, elle perd 2 ans desprance pour chaque ............
tranche complte de 20 mm en haut de 120. Par exemple, ............
une personne qui fait 142 mm de pression perd 2 ans, une ............
personne qui fait 152 mm perd 2 ans aussi, 160 mm : 4 ............
ans, etc. ............
- Si la personne mange un nombre pair de kilos de bleuets ............
(Plante fleurs bleues) par anne, elle gagne 2 ans ............
crire un programme python qui demande lutilisateur ............
les informations ncessaires, et ensuite afficher ............
lesprance de vie de la personne. ............
............
............
............
............
............
............
............
11
CHAPITRE 3 : Les structures itratives en python (Les boucles)
1- Boucle while (tant que)
Syntaxe :
While (condition) :
Instructions
Exemple :
x=1
While x<10 :
Print ("x a pour valeur" ,x)
x=x*2
Print("fin")
12
Tp N3 : les boucles
1-crire un programme python qui demande 10 entiers,
compte le nombre dentiers positifs saisis ............
............
............
............
............
............
............
13
6-Nombres parfaits : Un nombre est parfait sil est gal ............
la somme de ses diviseurs stricts (diffrents de lui-mme). ............
Ainsi par exemple, lentier 6 est parfait car 6 = 1 + 2 + 3. ............
crire un programme python permettant de dterminer si ............
un entier naturel est un nombre parfait. ............
............
............
............
14
CHAPITRE 4 : Les Listes
Les listes
Une liste est une collection dlments spars par des virgules, lensemble tant entre crochets *+.
Le premier lment dune liste possde lindice 0. Dans une liste on peut avoir des lments de plusieurs types
Cration dune liste
on peut crer une liste en la dclarant et en lui affectant directement une liste de donnes :
s=*lundi , mardi , 230 , dimanche,True]
il est possible de dclarer une liste vide :s=[]
Extraction de sous-listes :
Soit lst une liste quelconque.
lst[p] renvoie l'lment d'indice p de lst.
lst[p:n] renvoie une nouvelle liste constitue des lments de lst d'indice p inclus n exclu.
lst[p:n:pas] renvoie une nouvelle liste constitue des lments de lst d'indice p inclus n exclu, tous les pas.
lst[:] renvoie une nouvelle liste constitue de tous les lments de lst.
lst[p:] renvoie une nouvelle liste constitue de tous les lments de lst partir de l'lment d'indice p inclus.
lst[:n] renvoie une nouvelle liste constitue de tous les lments de lst depuis le premier jusqu' l'lment
d'indice n exclu.
lst[::pas] renvoie une nouvelle liste constitue des lments de lst, tous les pas.
Exemple : s=*lundi , mardi , 230 , dimanche+
Taper les lignes suivantes dans lenvironnement IDLE et commentez les rsultats obtenus
a. Accs aux lments dune liste
15
b. Oprations sur les listes
N.B En tapant help(list) dans l'interprteur python, on obtient toutes ces fonctions ainsi que beaucoup d'autres.
Tout comme pour les chanes de caractres, on peut concatner deux listes avec l'oprateur + et rpliquer
plusieurs fois le contenu d'une liste avec l'oprateur de multiplication * et un entier .
c. liste de listes
instruction taper rsultat obtenu + commentaire ou explication
var=[[1,2,3],[4,5,6]]
var[0]
var[1]
var[0][0]
var[0][1]
var[0][2]
d. Parcourir ou remplir une liste avec une boucle for
On peut parcourir une liste avec une boucle for de 2 faons :
- soit en parcourant les indices de la liste :
for indice in range(len(lst)):
- soit en parcourant directement la liste :
for element in lst:
16
CHAPITRE 5 : Les chanes de caractres
Les chanes de caractres fonctionnent peu prs comme des listes de caractres, mais elles ne sont pas
modifiables : on ne peut donc pas leur ajouter des caractres ou en enlever, ni trier leurs caractres par ordre
croissant, ni modifier les caractres un par un.
En revanche, on peut accder aux caractres d'une chane par leurs indices dans la chane, et extraire des sous-
chanes d'une chane de la mme faon que pour les listes.
N.B :Nous avons tudi jusqu'ici deux types de donnes composites : les chanes, qui sont composes de
caractres, et les listes, qui sont composes d'lments de n'importe quel type. Vous devez vous rappeler une
autre diffrence importante entre chanes et listes : il n'est pas possible de changer les caractres au sein d'une
chane existante, alors que vous pouvez modifier les lments d'une liste. En d'autres termes, les listes sont des
squences modifiables, alors que les chanes sont des squences non-modifiables
b- manipuler les chanes de caractres
instruction taper rsultat obtenu + commentaire ou explication
len(s1)
s1[:3]
s1[2]="z"
17
o in s1
S1.capitalize()
S1.center(18)
S1.count(o)
S1.find(b)
S1.replace("o","f")
S1.split()
S1.upper()
S1.lower()
print("vive\n l'informa\ntique")
"ara"=="zygomatique"
"ara"<"zygomatique"
"ara">"zygomatique"
"abscisse"<"zbu"
"abscisse"=="zbu"
"abscisse">"zbu"
Un tuple est une liste qui ne peut pas tre modifie, ils utilisent les parenthses au lieu des crochets
a- Crer un tuple
Pour crer un tuple, vous pouvez utiliser la syntaxe suivante: t = ()
Pour crer un tuple avec des valeurs, vous pouvez le faire de cette faon: t = (1, "tsi", "123")
Afficher une valeur d'un tuple
b- Operations sur les tuples
Les oprations que l'on peut effectuer sur des tuples sont syntaxiquement similaires celles que l'on effectue sur
les listes, si ce n'est que les tuples ne sont pas modifiables
t[0]=23 #non autoris
c- A quoi sert un tuple alors?
Le tuple permet une affectation multiple:
>>> v1, v2 = 11, 22
>>> v1
11
>>> v2
22
Il permet galement de renvoyer plusieurs valeurs lors d'un appel d'une fonction:
On utilisera un tuple pour dfinir des sortes de constantes qui n'ont donc pas vocation changer.
18
CHAPITRE 7:Les dictionnaires
Un dictionnaire en python est une sorte de liste mais au lieu d'utiliser des index, on utilise des cls, c'est dire
des valeurs autres que numriques.
Comment crer un dictionnaire?
Pour initialiser un dictionnaire, on utile la syntaxe suivante: >>> dct = {}
Comment ajouter des valeurs dans un dictionnaire? Rcuprer une valeur dans un dictionnaire
Pour ajouter des valeurs un dictionnaire il faut La mthode get vous permet de rcuprer une valeur
indiquer une cl ainsi qu'une valeur: dans un dictionnaire
>>> dct = {} >>> dct = {"prenom": "Med", "age": 40}
>>> dct["un"] = "one" >>> dct.get("prenom")
>>> dct["deux"] = "two" 'Med'
>>> dct
{'un': 'one', 'deux': 'two'}
Vous pouvez utiliser des cls numriques comme dans
la logique des listes.
Supprimer une entre de dictionnaire Rcuprer les cls par une boucle
Il est possible de supprimer une entre en indiquant sa Pour rcuprer les cls on utilise la mthode keys
cl, comme pour les listes: >>> dict = {"un":"one","deux":"two", "trois" :
>>> del dct["prenom"] "three","quatre" : "four "}
>>> dct >>> for cle in dict.keys():
{'age': 40} ... print (cle)
...
Un
Trois
quatre
deux
Rcuprer les valeurs par une boucle Rcuprer les cls et les valeurs par une boucle
Pour cela on utilise la mthode values Pour rcuprer les cls et les valeurs en mme temps,
>>> dict = {"un":"one","deux":"two", "trois" : on utilise la mthode items qui retourne un tuple.
"three","quatre" : "four "} >>> dict = {"un":"one","deux":"two", "trois" :
>>> for valeur in dict.values(): "three","quatre" : "four "}
... print (valeur) >>> for cle, valeur in dict.items():
... ... print (cle, valeur)
One ...
three un one
four trois three
two quatre four
deux two
Utiliser des tuples comme cl Crer une copie indpendante d'un dictionnaire
Une des forces de python est la combinaison >>> d = {"k1":"med", "k2":"mohamed"}
tuple/dictionnaire qui fait des merveilles dans certains >>> e = d
cas comme lors de l'utilisation de coordonnes. >>> d["k1"] = "Mohamed"
>>> b = {} >>> e
>>> b[(3,2)]=12 {'k2': mohamed, 'k1': mohamed}
>>> b[(4,5)]=13 Pour crer une copie indpendante vous pouvez
>>> b utiliser la mthode copy:
{(4, 5): 13, (3, 2): 12} >>> d = {"k1":"med", "k2":"mohamed"}
>>> e = d.copy()
>>> d["k1"] = "mohamed"
>>> e
{'k2': 'med', 'k1': 'mohamed'}
19
Tp
20
CHAPITRE 8:Les ensembles
Qu'est-ce qu'un ensemble ?
Un ensemble en Python est une collection d'objets sans rptition et sans ordre. On les note comme en maths
avec des accolades {...}. Les lments sont de types quelconques.
Exemples : {5,3,-8,2} {'o','e','y','u','a','i'} {5,'foo',(3,-2),7.4}
L'ensemble vide se note set() et non {} qui cre un dictionnaire !
>>> type({'prix':50, 'nom':'Eska'})
dict
>>> type({2,6,1}
Set
Accs aux lments d'un ensemble
Les lments d'un ensemble ne sont pas numrots. On ne peut pas utiliser une notation comme e[i] puisque parler de
l'lment numro i n'a pas de sens !
L'oprateur in permet de savoir si un objet appartient un ensemble
>>>s={1,2,3,4,3,4,4,5}
>>>s
{1,2,3,4,5}
>>> 2 in {1,2,3,4}
True
L'oprateur < permet de savoir si un ensemble d objet appartient un ensemble
.>>> {2,4} < {1,2,3,4}
True
Axiome du choix : il est possible d'obtenir un lment d'un ensemble E et de le supprimer en mme temps avec la
mthode pop().
>>> E = {5,2,3,1}
>>> x = E.pop()
>>> (x, E) (1, {2,3,5})
donc un ensemble est mutable !
Comment construire un ensemble ?
En extension :
>>> E = {5,2,3,1}
>>> E {1, 2, 3, 5}
Avec la fonction set(...)
>>> E = set('aeiouy')
>>> E {'o', 'i', 'e', 'a', 'y', 'u'}
>>> E = set([5,2,5,6,2])
>>> E {2, 5, 6}
En ajoutant un lment un ensemble E avec la mthode E.add(x)
>>> E = {5,3,2,1}
>>> E.add(8)
>>> E {8,1,2,3,5}
Le nombre d'lments d'un ensemble
On parle du cardinal d'un ensemble (fini). Il s'agit de la fonction len.
>>> E = {5,2,3,1}
>>> len(E) 4
Oprations sur les ensembles
L'ensemble vide se note set()
La runion E U F = ,x : x E ou x F} se note E | F en Python.
>>> {3,2,5,4} | {1,7,2,5}
{1, 2, 3, 4, 5, 7}
L'intersection E F = ,x : x E et x F} se note E & F en Python.
>>> {3,2,5,4} & {1,7,2,5} {2, 5}
La diffrence E - F = {x : x E et x F} se note E - F en Python.
>>> {3,2,5,4} - {1,7,2,5} {3, 4}
Ne pas confondre E - {x} qui construit un nouvel ensemble, avec la mthode E.remove(x) qui supprime x de l'ensemble E.
21
Tp
22
Tp N4
1-crire un programme python qui lit une phrase et
compte le nombre de voyelles quelle contient ............
Exemple : bonjour ............
contient 3 voyelles ............
crire un programme python qui lit une phrase et compte ............
le nombre doccurrence des voyelles quelle contient ............
Exemple : bonjour ............
a e o u i y ............
0 0 21 0 0
2- Un palindrome est un mot ou une phrase qui se lit ............
indiffremment dans les 2 sens (ex : 'bob', 'radar' ou 'Engage le ............
jeu que je le gagne'. crire un programme python qui test si ............
une phrase est palindrome ou non ............
............
............
............
............
23
CHAPITRE 8:Les fonctions
24
Exemple 1: Exemple 2 : Exemlpe 3 :
def masque(): def masque(): def monter():
p = 20 global p global a
print (p, q) p = 20 a = a+1
p, q = 15, 38 print (p, q) print (a)
>>> masque() p, q = 15, 38 >>> a = 15
20 38 >>> masque() >>> monter()
>>> print (p, q) 20 38 16
15 38 >>> print (p, q) >>> monter()
20 38 17
Exemple 1 :
def cube(x):
return x*x*x
L'instruction return dfinit ce que doit tre la valeur renvoye par la fonction. Dans notre exemple il s'agit du cube de
l'argument qui a t transmis lors de l'appel de la fonction.
>>> b = cube(9) # lappel de la fonction
>>> print (b) #ou print(cube(9))
729
RM : lappel de la fonction avec return ce fait par une variable
Exemple 2 :
def table(base):
result = [] # result est une liste vide
n=1
while n < 11:
b = n * base
result.append(b) # ajout d'un terme la liste
n = n +1
return result
>>> ta9 = table(9)
Ainsi nous affectons la variable ta9 les dix premiers termes de la table de multiplication par 9, sous la forme d'une liste :
>>> print (ta9)
[9, 18, 27, 36, 45, 54, 63, 72, 81, 90]
>>> print( ta9[0])
9
>>> print (ta9[3])
36
>>> print (ta9[2:5])
[27, 36, 45]
Exemple 3 :
def cube(n):
return n**3
def volumeSphere(r):
return 4 * 3.1416 * cube(r) / 3
25
Paramtres des fonctions
Appel dsordonn
Cela vous permet de donner les arguments d'une fonction dans n'importe quel ordre, il suffit de prciser le nom des
arguments que l'on donne aux fonctions :
Exemple1 : Exemple2 :
def puissance(nombre, puissance = 2) : def operations(nombre, plus = 2, moins = 2, divise = 3, multiplie = 5) :
return nombre ** puissance return nombre+plus, nombre-moins, nombre/divise, nombre*multiplie
appel de la fonction appel de la fonction
print(puissance(puissance = 4, nombre = 3)) print(operations())# erreur vous devez mentionner nombre car il ne
contient aucune valeur par dfaut
TypeError Traceback (most recent call last)
<ipython-input-90-07ad72224df3> in <module>()
----> 1 print(operations())
TypeError: operations() missing 1 required positional argument: 'nombre'
print(operations(1)
>>>(3, -1, 0.3333333333333333, 5)
print(operations(4,4, divise = 6, multiplie = 8))
>>>(8, 2, 0.6666666666666666, 32)
RM : Les arguments s'crivent dans l'ordre suivant dans la dclaration d'une fonction : les arguments obligatoires, les
arguments avec valeur par dfaut (facultatifs) et enfin des arguments supplmentaires si ncessaires.
Nombre indfini d'arguments
Arguments anonymes
Ceci est raliser par une squence (liste, tuple ou chane de caractres) comme argument, ceci se prcise par l'utilisation
de l'oprateur '*' juste avant le nom de l'argument :
Exemple1 :
def fonction(*args) :
for elt in args :
print(elt)
appel de la fonction:
fonction(43, 38, "Peuh !", True) >>> (43, 38, 'Peuh !', True)
appel de la fonction par une chaine de caractre: fonction(bonjour tsi))
>>> bonjour tsi
appel de la fonction par * : fonction(*'abcdef')
a
b
c
e
f
RM :Si vous n'utilisez pas l'oprateur '*', votre squence sera alors considre comme n'tant qu'un seul argument ! Cela
est d au typage dynamique, donc '*' prcise que chaque lment de la squence est un argument part entire.
26
Arguments avec cl
Si vous voulez associer une cl chacun des arguments que vous donnez en supplment une fonction, il va falloir utiliser
un dictionnaire. c'est l'oprateur '**' qui sera utilis.
def fonction(**args) :
for cle in args :
print(cle,args[cle])
appel de la fonction
fonction(arg1 = 'Peuh !', arg2 = 38)
>>> arg1 Peuh !
arg2 38
RM:pour convertir un dictionnaire non pas en un seul argument mais en une suite d'arguments, il faut utiliser l'oprateur
'**' devant le dictionnaire pass en argument.
def fonction(**args) :
for cle in args :
print(cle,args[cle])
appel de la fonction
fonction(**dict(arg1 = 'Peuh !', arg2 = 38))
Fonctions anonymes en Python (ou lambda)
Il nexiste aucune opration quon fasse avec une fonction anonyme quon ne puisse faire avec une fonction normale. On
utilise les fonctions anonymes par got, pour des raisons de style. En effet, les lambdas sont trs pratiques pour crer des
fonctions jetables, que lon ne va lutiliser quune seule fois
Prsentation des fonctions lambda
def f(x):
return x*2
f(3)
6 Voici une fonction lambda qui fait la mme chose que la fonction ordinaire prcdente. Notez la
g = lambda x: x*2 syntaxe condense et le mot-cl return, Remarquez que la fonction na pas de nom, mais quelle
g(3) peut tre appele travers la variable laquelle elle est assigne.
6 Vous pouvez utiliser une fonction lambda sans lassigner une variable. Ce nest pas forcment
(lambda x: x*2)(3) trs utile, mais cela dmontre quune fonction lambda est simplement une fonction en ligne
6
Les limites des lambdas
On ne peut les crire que sur une ligne.
On ne peut pas avoir plus dune instruction dans la fonction.
Les modules, qu'est-ce que c'est ?
Il sagit dune sorte de bibliothque (un regroupement de fonctions prdfinies) qui une fois importe permet daccder
de nouvelles fonctions. Il en existe beaucoup. On peut citer :
Le module math
Cest un module qui permet davoir accs aux fonctions mathmatiques : cos, sin, la racine carre (sqrt), nombre (pi) ..
>>> import math # importation du module >>> math.fabs(-3) # Valeur absolue :3
>>> math.sqrt(25) # racine carre >>> math.ceil(2.3) # Renvoie le plus petit entier >= 2.3 :3
>>> math.pow(5, 2) # 5 au carr(5**2) >>> math.floor(5.8) # Renvoie le plus grand entier <= 5.8 : 5
>>> math.exp(5) # Exponentielle >>> math.trunc(9.5) # Tronque 9.5 :9
Le module random
Ce module va nous permettre dutiliser des fonctions gnrant des nombres alatoires.
- random.random() qui renvoie un nombre alatoire entre 0 et 1,
- random.randint(vi,vf) qui renvoie un nombre alatoire entre vi inclus et vf inclus
- random.randrange(vi, vf,p) qui renvoie un nombre alatoire entre vi inclus et vf exclue avec un pas de p
- choice(liste) qui choisit au hasard un nombre dans une liste donne.
import random liste = ['Pierre', 'Paul', 'Jacques']
x=random.random() x=random.choice(liste)
print(x) print(x)
random.randrange(5, 10, 2) L = [7, 3, 8, 5, 6]
random.randint(1, 6) x=random.choice(L)
print(x)
27
Tp 5
1-Ecrire une fonction MIN et une fonction MAX qui
dterminent le minimum et le maximum de deux ............
nombres rels. ............
1- crire des fonctions voyelles et consonnes, prenant en ............
argument une chane de caractres et ............
renvoyant respectivement le nombre de voyelles et le ............
nombre de consonnes prsentes dans cette ............
chane. ............
28
Tp supplmentaire:
Brins dADN Cet exercice sintresse la manipulation des chanes de caractres et aborde notamment lopration de
dcoupage ainsi que la notion de fonctions partielles vues en cours. Un brin dADN (acide dsoxyribonuclique) est une
molcule prsente dans tout organisme vivant et caractrise en gnral par une squence de bases azotes. Il existe 4
bases diffrentes : ladnine, la thymine, la cytosine, et la guanine. Ces quatre bases jouent un rle important chez les
organismes vivants puisque cest leur agencement (cest dire leur ordre dans la squence) qui dtermine le rle du brin
dADN. Dans cet exercice, les 4 bases seront reprsentes par les 4 caractres A, T, C et G et les brins dADN par
des chanes de caractres. Ainsi un brin dADN qui prsente la squence adnine, adnine, cytosine, guanine sera
reprsent par la chane de caractre AACG
Question 1 Chacune des quatre bases possde une base dite complmentaire avec laquelle elle est capable de sapparier.
Ainsi ladnine et la thymine sont complmentaires et la cytosine et la guanine sont complmentaires.
Donner une dfinition de la fonction base_comp qui, tant donne une base azote, renvoie la base complmentaire.
Par exemple :
Question 2 Par extension le brin complmentaire dun brin dADN est constitu dune squence de bases de mme
longueur mais contenant les bases complmentaires de celui-ci. Donner une dfinition de la fonction brin_comp qui, tant
donn un brin dADN, renvoie le brin dADN complmentaire.
Par exemple :
Question 3 Donner une dfinition test_comp qui, tant donns deux brins dADN, teste si ces deux brins sont
complmentaires. On notera quune condition minimale pour quils soient complmentaires est quils aient la mme
longueur.
Par exemple :
test_comp('','') True
29
Question 4 : Sous-squence et dcoupage de chanes Une des problmatiques importantes dans le domaine de lanalyse
des molcules dADN est la recherche de squences spcifiques. Dans cette question, on cherche crire une fonction qui
teste si un brin dADN est une sous-squence du second, cest dire si sa squence apparat dans le second brin. Pour cela,
on exploitera lopration de dcoupage des chanes de caractres vu en cours. La solution consiste, tant donn un premier
brin b1 de longueur n, tester toutes les sous-chanes de longueur n dun second brin b2. Si lune de ces sous-chaines est
identique b1, alors b1 est une sous-squence de b2. Par convention, la squnce vide est sous-squence de toute
squence. Donner une dfinition de la fonction test_sous_sequence qui tant donns deux brins dADN, teste si le premier
est une sous-sequence du second.
Par exemple :
Question 5 : Fonctions partielles Outre le fait de savoir si une squence apparat dans un brin dADN, on aimerait
galement connatre sa position dans le brin. Sur le principe, cest une simple variation du problme prcdent dans lequel
on renvoie un entier (lindice du dbut de la squence dans le brin) au lieu dun boolen. Mais une difficult apparat ici
puisque si le premier brin nest pas une sous-squence du second, alors il ny a pas dindice renvoyer. On exploitera donc
la solution vue en cours qui sappuie sur les fonctions partielles. Donner une dfinition de la fonction
recherche_sous_sequence qui tant donns deux brins dADN b1 et b2, renvoie lindice de b2 correspondant au dbut de
b1 si b1 est une sous-squence de b2 et ne renvoie rien (None) sinon.
Par exemple :
>>> recherche_sous_sequence('','') 0
>>> recherche_sous_sequence('','ATCG') 0
>>> recherche_sous_sequence('ATCG','')
>>> recherche_sous_sequence('CATA','TAACGGCATACATAACGCGA') 6
30
Chapitre9 : Programmation Oriente Objet
Avant-propos
En programmation structur un programme est form de la runion de diffrentes procdures et de diffrentes structures
de donnes gnralement indpendantes de ces procdures.
On a un dcoupage net entre donnes et traitement (Procdure).
Traitement 1
Donnes
Traitement 2
En P.O.O un programme met en uvre diffrents objets, chaque objet est associ des donnes et des mthodes agissant
sur ces derniers (On parle des mthodes plutt que procdures).
Alors en P.O.O un programme devient un ensemble des petites entits qui interagissent et communique par message.
Chacune de ces entits est autonome est comprend une partie traitement.
Donnes
Traitement
Les concepts:
Objet : cest une entit cohrente rassemblant des donnes et des codes (mthodes) travaillant sur ces donnes.
Objet: Variable Classe: Type
Classe : les concepts classe correspond simplement la gnralisation de la notion type dans les langues classique, en effet
une classe nest rien dautre que la description dun ensemble dobjet ayant une structure de donnes communs et dispose
des mmes mthodes.
Alors comme des variables dun type classe, en P.O.O en dis aussi quun objet est une instance de la classe.
Linstanciation : Cest la cration dun objet partir dune classe.
Lhritage : Il permet de dfinir une nouvelle classe partir dune classe existant lappelle on ajoute des nouvelles
donnes et des nouvelles mthodes.
Donc lhritage facilite largement la rutilisation des codes.
Encapsulation des donnes : Ce la signifi quil nest pas possible dagir directement sur les donnes dun objet, il est
ncessaire de passer par des mthodes qui joue ainsi le rle dinterface obligatoire.
Dfinition dune classe en python:
Syntaxe # Dfinition des mthodes: Exemples1 :
class nom_de_classe(object) : def mthode(self) : class voiture():
attribut1 = valeur1 instruction1 marque = "Ford"
couleur = "Noir"
attributN = valeurN instructionN prix = 168000.00
def afficher(self):
print("Marque : ", self.marque)
print("Couleur: ", self.couleur)
print("Prix : ", self.prix)
Exemples2 :
class point(object):
x=0
y=0
def saisir(self) :
self.x = float(input(Entrer labscisse : ))
self.y = float(input(Entrer lordonne : ))
def afficher(self):
print("(",self.x,",",self.y,")")
RM:Le paramtre (facultatif) object reprsente la classe anctre (voir section hritage) de toutes les classes.
Le paramtre Self reprsente l'instance de l'objet en cours, et possde donc le mme type que lui.
31
Instanciation
Aprs la dfinition des classes prcdentes, on peut crer des objets (ou instances) de ces classes comme suit :
>>> v = voiture() # v est une instance de la classe voiture
>>> v.afficher() # on appelle la mthode afficher de lobjet v
>>> A = point() # A est un point
>>> A.saisir() # permet dentrer les coordonnes de A
>>> A.afficher() # les affiche
Notion de constructeur(initialiseur)
Le constructeur est une mthode spciale dune classe qui est appele automatiquement la cration dun objet. Il sagit
donc de la premire mthode excute pour un objet et elle constitue de ce fait lendroit idal pour initialiser les donnes
de lobjet.
En Python, cette mthode doit obligatoirement avoir le nom __init__
Exemple
class point():
def __init__(self):
self.x = 0.0
self.y = 0.0
def saisir(self):
self.x = float(input(Entrer labscisse : ))
self.y = float(input(Entrer lordonne : ))
def afficher(self):
print("(",self.x,",",self.y,")")
Constructeur avec arguments (ou paramtres) Valeurs par dfaut des arguments :
def __init__(self, abs, ord) : def __init__(self, abs=0.0, ord=0.0) :
self.x = abs self.x = abs
self.y = ord self.y = ord
Instanciation : A = point(1.0, 0.5) Instanciation : A = point(1.0, 0.5) ou A = point()
La notion dencapsulation
Le concept dencapsulation est un concept trs utile de la POO. Il permet en particulier dviter une modification par erreur
des donnes dun objet. En effet, il nest alors pas possible dagir directement sur les donnes dun objet ; il est ncessaire
de passer par ses mthodes qui jouent le rle dinterface obligatoire.
32
Dfinition dattributs privs
On ralise la protection des attributs de notre classe Point grce lutilisation dattributs prives. Pour avoir des attributs
privs, leur nom doit dbuter par __ (deux fois le symbole underscore _, qui est le tiret sur la touche 8).
class Point:
def __init__(self, x, y):
self.__x = x
self.__y = y
Il nest alors plus possible de faire appel aux attributs __x et __y depuis lextrieur de la classe Point.
>>> p = Point(1, 2)
>>> p.__x
Traceback (most recent call last):
File "<pyshell#9>", line 1, in
p.__x
AttributeError: Point instance has no attribute '__x'
Il faut donc disposer de mthodes qui vont permettre par exemple de modifier ou dafficher les informations associes
ces variables.
class Point: a = Point(2, 4)
def __init__(self, x, y): a.affiche()
self.__x = x a.deplace(1, 3)
self.__y = y a.affiche()
def affiche(self):
print("abscisse =", self.__x, "ordonnee =", self.__y)
Accesseurs et mutateurs
Parmi les diffrentes mthodes que comporte une classe, on a souvent tendance distinguer :
les constructeurs ;
les accesseurs (en anglais accessor) qui fournissent des informations relatives ltat dun objet, cest--dire aux valeurs de
certains de ses attributs (gnralement privs) sans les modifier ;
les mutateurs (en anglais mutator) qui modifient ltat dun objet, donc les valeurs de certains de ses attributs.
On rencontre souvent lutilisation de noms de la forme get_XXXX() pour les accesseurs et set_XXXX()pour les mutateurs,
Par exemple, pour la classe Point sur laquelle nous avons dj travaill on peut dfinir les mthodes suivantes :
Exemple :
class Point: a = Point(3, 7)
def __init__(self, x, y): print("a : abscisse =", a.get_x())
self.__x = x print("a : ordonnee =", a.get_y())
self.__y = y a.set_x(6)
def get_x(self): a.set_y(10)
return self.__x print("a : abscisse =", a.get_x())
def get_y(self): print("a : ordonnee =", a.get_y())
return self.__y
def set_x(self, x):
self.__x = x
def set_y(self, y):
self.__y = y
Hritage
Lhritage offre la possibilit de crer une classe partir dune autre. Cela signifie que la nouvelle classe (classe drive)
bnficie des attributs et mthodes de la classe dont elle drive (classe de base ou classe mre).
33
Exemple
Un Atome est un objet constitu dun certain nombre de protons, dlectrons et de neutrons :
class Atome(object):
def __init__(self,e,p,n): # premier constructeur
self.nbre_electrons=x
self.nbre_protons=p
self.nbre_neutrons=n
def afficher(selef) :
print("Je contiens:\n\t",self.nbre_electrons," lctrons,")
print("\t", self.nbre_protons," protons,")
print("\t", self.nbre_neutrons," neutrons.")
Un Ion est un Atome qui possde, en plus des proprits dun atome, une charge :
class Ion(Atome):
def __init__(self, e,p,n,c) :
Atome.__init__(e,p,n)
self.charge = c
def afficher(self) :
Atome.afficher()
print("Ma charge est",self.charge)
Polymorphisme
Le polymorphisme traite de la capacit de l'objet possder plusieurs formes: poly comme plusieurs et morphisme comme
forme. Le polymorphisme, en d'autres termes, est donc la capacit du systme choisir dynamiquement la mthode qui
correspond au type rel de l'objet en cours. Ainsi, si l'on considre un objet Vhicule et ses descendants Bateau, Avion,
Voiture possdant tous une mthode Avancer, le systme appellera la fonction Avancer spcifique suivant que le vhicule
est un Bateau, un Avion ou bien une Voiture.
TP1:
Crer la classe salarier celle-ci les proprits suivantes : Crer la classe commerciale drive de la classe salarier.
Salarier Commercial, Attributs privs: Commission,Taux
Attributs privs:Mat,Nom,,Service,Sal Mthodes: Affiche(),Saisie(),Calculsalaire()
Mthodes suivantes : saisie () qui permet de saisir les (Calculsalaire() de la classe commerciale)= (Calculsalaire()
attribues, de la classe salarier)+taux .commission/100
afficher () qui permet dafficher les informations sur salari
et calcul salaire() fonction qui calcul de salaire annuel,
les get pour afficher et set pour modifier les attributs privs
de la classe salarier
Tp2:
Crer une classe Point permettant de reprsenter des comparer: vrifie si deux points sont identiques
points dans un plan caractris par deux coordonnes x et y symtrique: renvoie le symtrique dun point
Dfinir les fonctions membres suivantes : distance: calcule la distance entre deux points
constructeur dinitialisation rotation: effectue au point une rotation d'un angle A par
affiche: se contentant d'afficher les coordonnes rapport lorigine.
cartsiennes du point. Ecrire une classe permettant de reprsenter des cercles qui
translation: effectue une translation dfinie par un se caractrisent par un rayon et un centre de type point Les
argument oprations possibles sur un cercle sont :
positionner: positionne le point aux coordonnes mthode affiche():laffichage des caractristiques du cercle
cartsiennes passes en paramtre l'obtention de son rayon,
positionner: positionne le point aux coordonnes dun autre le changement de son rayon,
point l'obtention de son centre,
milieu: renvoie le point milieu du segment compos du la translation de son centre,
point courant et d'un autre point. le calcul de sa surface,
le calcul de son primtre,
le test de l'galit du cercle avec un autre cercle,
la vrification de l'appartenance d'un point au cercle,
34
Chapitre10 : les exceptions
Les exceptions sont les oprations queffectue un interprteur ou un compilateur lorsqu' une erreur est dtecte au cours
de lexcution dun programme. En gnrale, lexcution du programme est alors interrompue, et un message derreur plus
ou moins explicite est affich.
Exemple :
>>> print(7/0)
ZeroDivisionError: int division or modulo by zero
Propagation des exceptions
Lorsquune exception est dclenche, le droulement normal de la fonction en cours dexcution est interrompu, et
lexception est transmise (ou propage) la fonction appelante, etc ...
Cette propagation peut cependant tre stoppe par un traitement appropri quon nomme parfois aussi rcupration.
Rcupration dune exception
Rcuprer une exception revient prciser le traitement quil convient deffectuer dans cette situation exceptionnelle.
En Python, la syntaxe dune rcupration dexception est de la forme
try:
# Test d'instruction(s)
except TypeDInstruction:
# Traitement en cas d'erreur
except TypeDInstruction:
# Traitement en cas d'erreur
else :
# Traitement en cas ou aucune erreur ne survient dans le bloc
finally:
# Instruction(s) excute(s) qu'il y ait eu des erreurs ou non
Quelques exceptions en Python
ZeroDivisionError : dclenche lors NameError : dclenche lorsquun ValueError : dclenche lorsque dans
dune tentative de division par 0 identificateur inconnu est trouv une donne dun type correct ne
>>> 1 / 0 >>> print (timoleon) permet pas lvaluation dune
Traceback (most recent call last): Traceback (most recent call last): expression.
File "<stdin>", line 1, in <module> File "<stdin>", line 1, in <module> >>> int (' a 12')
ZeroDivisionError: division by zero NameError: name 'timoleon' is not Traceback (most recent call last):
defined File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with
base 10: ' A 12'
TypeError : dclenche lorsquune IndexError : dclenche lorsquun ImportError : dclenche lors dune
donne est dun mauvais type indice est hors dun intervalle autoris tentative dimportation dun module
>>> len (1) >>> l = [1,2,3] inexistant.
Traceback (most recent call last): >>> l[3] >>> import timoleon
File "<stdin>", line 1, in <module> Traceback (most recent call last): Traceback (most recent call last):
TypeError: object of type 'int' has no File "<stdin>", line 1, in <module> File "<stdin>", line 1, in <module>
len() IndexError: list index out of range ImportError: No module named
'timoleon'
FileNotFoundError : dclenche KeyError : dclenche lors dune RutimeError : dclenche lorsquune
lorsquune opration douverture de tentative daccs la valeur dun erreur est dtecte lexcution dun
fichier choue. dictionnaire avec une cl inexistante. programme, erreur qui chappe
>>> entree = open ('timoleon','r') >>> d = {} toutes les catgories prcdentes.
Traceback (most recent call last): >>> d['timoleon'] >>> from factorielle import fact
File "<stdin>", line 1, in <module> Traceback (most recent call last): >>> fact (1000)
FileNotFoundError: [Errno 2] No such File "<stdin>", line 1, in <module> ...
file or directory: 'timoleon' KeyError: 'timoleon' RuntimeError: maximum recursion
depth exceeded in comparison
35
Exemple :
def division(x,y): Execution:
try: Division(5,2)
r=x/y Rsultat=2.5
except NameError: fin du programme
print("La variable x ou y n'a pas t dfinie.") Division(5,0)
except TypeError: La variable y est gale 0
print("type incompatible avec la division.") fin du programme
except ZeroDivisionError: Division(5,a)
print("La variable y est gale 0.") type incompatible avec la division
else: fin du programme
print("rsultat = ", r)
finally :
print("fin du programme")
Les assertions (assert)
Les assertions sont un moyen simple de s'assurer, avant de continuer, qu'une condition est respecte.
Exemple :
try:
n = float(input("Saisissez une note :"))
assert 20>=n>=0
except ValueError:
print("Vous n'avez pas saisi un nombre.")
except AssertionError:
print("svp une note entre 0 et 20.")
raise
annee = input("donner une anne")
try:
annee = int(annee)
if annee<=0:
raise Exception("l'anne saisie est ngative ou nulle")
except ValueError:
print("La valeur saisie est invalide.")
Vos propres exceptions
Pour des raisons pratiques, vous serez peut-tre amen(e) faire vos propres exceptions.
Nous allons comprendre comment le faire en analysant ce code :
class MonException(Exception):
def __init__(self,raison):
self.raison = raison
def __str__(self):
return self.raison
def multiplierpar5(n):
if n > 20:
raise MonException("Le nombre est trop grand !")
else:
return n * 5
Finalement, cette fonction utilise pourrait donner ceci :
try:
print multiplier_par_5(2)
print multiplier_par_5(21)
except MonException as e:
print (e)
Excution
10
Le nombre est trop grand !
36
Chapitre11 : les fichiers
Une manire de stocker des donnes de manire prenne est de les stocker dans des fichiers.
Les chemins absolus et relatifs sont deux moyens de dcrire le chemin menant des fichiers ou rpertoires.
Le chemin absolu
Quand on dcrit une cible (un fichier ou un rpertoire) sous la forme d'un chemin absolu, on dcrit la suite des
rpertoires menant au fichier. Sous Windows, on partira du nom de volume (C:\, D:\). Par exemple, sous
Windows, si on a un fichier nomm fichier.txt, contenu dans un dossier cpge, lui-mme prsent sur le disque C:,
le chemin absolu menant notre fichier sera C:\cpge\fichier.txt.
Le chemin relatif
Quand on dcrit la position d'un fichier grce un chemin relatif, cela veut dire que l'on tient compte du dossier
dans lequel on se trouve actuellement. Ainsi, si on se trouve dans le dossier C:\test et que l'on souhaite accder
au fichier fic.txt contenu dans ce mme dossier, le chemin relatif menant ce fichier sera tout simplement fic.txt.
Editer un fichier
Pour diter un fichier en python on utilise la fonction open.
Cette fonction prend en premier paramtre le chemin du fichier (relatif ou absolu) et en second paramtre le
type d'ouverture
La fonction open
Voici la syntaxe pour lire un fichier
fichier = open("data.txt", "r")
print fichier
<open file 'data.txt', mode 'r' at 0x7ff6cf3fe4b0>
On remarque que le deuxime paramtre est renseign par un r, ce paramtre indique une ouverture de
fichier en lecture.
37
Ecrire dans un fichier
On a : fichier=open(sortie.txt,w)
fichier.write(ch) : crit la chane ch dans fichier
fichier.writelines(list) : crit les chane de list dans fichier
A noter que pour le monde d'ouverture a, si vous voulez crire la ligne, vous pouvez utiliser le saut de ligne \n:
fichier = open("data.txt", "a")
fichier.write("\nBonjour monde")
fichier.close()
Exemple dutilisation des fichiers
fic1=open(source.txt,r)
fic2=open(but.txt,w)
ch=fic1.readline()
while ch!="":
fic2.write(ch)
ch=fic1.readline()
fic1.close() # Ne pas oublier ()
fic2.close()
Le mot cl with
Il existe une autre syntaxe plus courte qui permet de s'manciper du problme de fermeture du fichier: le mot
cl with.
Voici la syntaxe:
with open("data.txt", "r") as fichier:
print fichier.read()
Vous pouvez appeler mon_fichier.closed pour vrifier que le fichier est referm. Si le fichier est
ferm, mon_fichier.closed vaudra True.
RM:Il est inutile, par consquent, de fermer le fichier la fin du bloc with. Python va le faire tout seul
Module os
getcwd() : fournit le rpertoire courant
chdir(nomrep) : se place dans le rpertoire nomrep
rename(src,dest) : renomme src en dest
remove(chemin): supprime un fichier Exemple:
rmdir(chemin) : supprime un dossier vide import os as os
mkdir(chemin) : cre le rpertoire chemin >>> os.getcwd( ) : C :\Python32
listdir(chemin) : liste les fichiers de chemin >>> os.chdir(C :\ cpge \ informatique)
>>> os.getcwd( ) : C :\ cpge \ informatique
Module os.path import os.path as opa
Utilisation : from os.path import *, ou import os.path >>>print(opa.exists('test.txt')) : True
exists(chemin) : vrai si chemin existe >>>print(opa.isfile('test.txt')): True
isfile(chemin) : vrai si chemin est un fichier
isdir(chemin) : vrai si chemin est un rpertoire
Enregistrer des objets dans des fichiers
Grce au module pickle , on peut enregistrer n'importe quel objet et le rcuprer par la suite
Enregistrer un objet dans un fichier
Il nous faut naturellement d'abord importer le module pickle.
>>> import pickle
On va ensuite utiliser deux classes incluses dans ce module : la classe Pickler et la classeUnpickler.
Pour crer notre objet Pickler, nous allons l'appeler en passant en paramtre le fichier dans lequel nous allons
enregistrer notre objet.
>>> with open('donnees', 'wb') as fichier:
mon_pickler = pickle.Pickler(fichier)
38
Quand nous allons enregistrer nos objets, ce sera dans le fichier donnees, notez le mode d'ouverture : on ouvre
le fichier donnees en mode d'criture binaire. Il suffit de rajouter, derrire la lettre symbolisant le mode, la
lettre b pour indiquer un mode binaire.
RM:Le fichier que Python va crire ne sera pas trs lisible si vous essayez de l'ouvrir
Maintenant que notre pickler est cr, On utilise la mthode dump du pickler pour enregistrer l'objet:
Exemple :
score = { "joueur 1": 5, "joueur 2": 35, "joueur 3": 20, "joueur 4": 2}
with open('donnees', 'wb') as fichier:
mon_pickler = pickle.pickler(fichier)
mon_pickler.dump(score)
Si vous voulez enregistrer plusieurs objets, appelez de nouveau la mthode dump avec les objets enregistrer.
39
Tp :
Exercice 1:
1. Crer un fichier texte (via open en mode criture) et y crire un texte sur plusieurs lignes (rappelons que le
retour la ligne est cod par \n en Python). Bien. Maintenant, trouvez o Python a t fourrer votre fichier, soit
laide de la recherche Windows, soit laide de la commande getcwd du module os de Python, utilisez la
commande chdir de ce mme module os.
2. Lire le fichier que vous venez de crer avec la mthode readlines et afficher le rsultat.
3. crire un petit programme comptant le nombre de caractres de votre fichier texte.
4. crire une fonction comptant le nombre de e dans votre texte. crire une fonction crant une liste contenant
le nombre doccurrences de chaque lettre de lalphabet.
5. crire une fonction crant une copie de votre fichier texte o tous les caractres ont t mis en majuscules.
6. crire une fonction crant un nouveau fichier texte ne contenant que les lignes du fichier prcdent qui
commencent par un e. Mme chose avec les lignes commenant par une majuscule
7. crire une fonction affichant la phrase la plus longue de votre fichier.
8. crire une fonction recopiant le texte dans un nouveau fichier, mais format de faon contenir exactement
50 caractres par ligne.
Exercice 2:
crire une fonction qui recopie le fichier source.txt dans le fichier but.txt en supprimant toutes les lignes qui
commencent par le symbole #.
Exercice 3:
utilisez le fichier :admissibles.txt , qui contient la liste des candidats un concours rcent, avec les quatre champs
suivants : numro de candidat, Nom (en majuscules) et prnom (en minuscules), rsultat lcrit du concours,
puis srie doral pour les admissibles. Ces quatre champs sont spars par des tabulations, le nom et le prnom
par un simple espace
1. Compter le nombre total de candidats, puis le nombre de candidats admissibles.
2. Crer quatre nouveaux fichiers texte contenant la liste des candidats de chaque srie doral (uniquement nom
et prnom).
3. Compter le nombre de candidats dont le prnom commence par chacune des lettres de lalphabet.
4. Crer un copie du fichier de candidats o ces derniers sont classs par ordre de numro et non par ordre
alphabtique (ou par ordre alphabtique des prnoms si vous prfrez)
40
CHAPITRE12 : les tris
41
Programme en Python :
def triBulles(a):
for i in range(len(a)-1, 0, -1):
# positionner le prochain plus grand lment
for j in range(i):
# changer les lments adjacents s'ils sont dans un mauvais ordre relatif
if a[j] > a[j+1]:
a[j], a[j+1] = a[j+1], a[j]
print(a)
return a
print(triBulles([20, 115, 30, 63, 47, 101]))
4- Recherche squentielle
consiste parcourir squentiellement la liste jusqu' atteindre l'lment cherch. Si l'lment recherch est
trouv, sa position dans la liste est, dans ce cas, retourne par l'algorithme.
Programme python:
def RechercheSeq(l, c):
position = -1
i=0
while i < len(l):
if l[i] == c:
position = i
break
else:
i += 1
return position
rech=RechercheSeq([4,8,5,99,45,6,3],9)
if rech==-1:
print('n\'existe pas')
else:
print('existe en position:',rech)
42
Partie 3:ingnierie numrique et simulation (partie 1)
CHAPITRE1 : manipulation des vecteurs avec les listes
1- Ecrire une fonction qui permet la lecture des lments d'un tableau a une dimension
2- Ecrire une fonction qui permet l'affichage des lments d'un tableau a une dimension
3- Ecrire une fonction qui permet de calculer la somme des lments de deux tableaux a une dimension
4- Ecrire une fonction qui permet de calculer le produit des lments de deux tableaux a une dimension
5- Ecrire une fonction qui permet de chercher le maximum des lments d'un tableau a une dimension
6- Ecrire une fonction qui permet de chercher le minimum des lments d'un tableau a une dimension
7- Ecrire une fonction qui permet de dterminer l'existence d'un lment dans d'un tableau
43
CHAPITRE2 : manipulation des vecteurs avec numpy
Pourquoi numpy?
Numpy est un package pour Python spcialis dans la manipulation des tableaux (array), pour nous essentiellement les
vecteurs et les matrices
Les tableaux numpy ne gre que les objets de mme type
Le package propose un grand nombre de routines pour un accs rapide aux donnes (ex. recherche, extraction), pour les
manipulations diverses (ex. tri), pour les calculs (ex. calcul statistique)
44
Conversion dune collection (type standard Python) en Redimensionnement explicite
type array de numpy a = np.array([1,2,3])
#liste de valeurs #redimensionnement
lst = [1.2,3.1,4.5] #1 valeur pour vecteur, couple de valeurs pour matrice
print(type(lst)) #<class list> a.resize(new_shape=5)
#conversion partir d'une liste print(a) #[1 2 3 0 0], les nouvelles cases mises 0
a = np.asarray(lst,dtype=float) Concatnation de 2 vecteurs
print(type(a)) #<class numpy.ndarray> concatenation 2 vecteurs
print(a) #[1.2 3.1 4.5] x = np.array([1,2,5,6])
Redimensionnement y = np.array([2,1,7,4])
Rajouter une valeur en dernire position z = np.append(x,y) print(z) #[1 2 5 6 2 1 7 4]
#vecteur de valeurs Suppression dune valeur via son indice
a = np.array([1.2,2.5,3.2,1.8]) #suppression via indice
#ajouter une valeur, place en dernire position b = np.delete(a,2) #une plage dindices est aussi possible
a = np.append(a,10) print(b) #[1.2 2.5 1.8 10.]
print(a) #[1.2 2.5 3.2 1.8 10.]
EXTRACTION DES VALEURS :Accs indic , Plages dindices , v = np.array([1.2,7.4,4.2,8.5,6.3])
45
CALCULS SUR LES VECTEURS
Principe : Les calculs se font lment par lment (elemenstwise) entre vecteurs numpy
v = np.array([1.2,7.4,4.2,8.5,6.3])
#moyenne x = np.array([1.2,1.3,1.0])
print(np.mean(v)) # 5.52 y = np.array([2.1,0.8,1.3])
#mdiane #produit scalaire
print(np.median(v)) # 6.3 z = np.vdot(x,y)
#variance print(z) # 4.86
print(np.var(v)) # 6.6856 #ou lquivalent calcul
#quantile print(np.sum(x*y)) # 4.86
print(np.percentile(v,50)) #6.3 (50% = mdiane) #norme d'un vecteur
#somme n = np.linalg.norm(x)
print(np.sum(v)) # 27.6 print(n) # 2.03
#somme cumule #ou lquivalent calcul
print(np.cumsum(v)) # [1.2 8.6 12.8 21.3 27.6] import math
Calculs entre vecteurs Le principe elementwise print(math.sqrt(np.sum(x**2))) # 2.03
#calculs entre vecteurs Oprations ensemblistes
x = np.array([1.2,1.3,1.0]) Principe : Un vecteur de valeurs (surtout entires) peut tre
y = np.array([2.1,0.8,1.3]) considr comme un ensemble de valeurs.
#multiplication #oprations ensemblistes
print(x*y) # [2.52 1.04 1.3] x = np.array([1,2,5,6])
#addition y = np.array([2,1,7,4])
print(x+y) # [3.3 2.1 2.3] #intersection
#multiplication par un scalaire print(np.intersect1d(x,y)) # [1 2]
print(2*x) # [2.4 2.6 2. ] #union attention, ce nest pas une concatnation
#comparaison de vecteurs print(np.union1d(x,y)) # [1 2 4 5 6 7]
x = np.array([1,2,5,6]) #diffrence c.-d. qui sont dans x et pas dans y
y = np.array([2,1,7,4]) print(np.setdiff1d(x,y)) # [5 6]
b=x>y
print(b) # [False True False True]
#oprations logiques
a = np.array([True,True,False,True],dtype=bool)
b = np.array([True,False,True,False],dtype=bool)
#ET logique
np.logical_and(a,b) # [True False False False]
#OU exclusif logique
np.logical_xor(a,b) # [False True True True]
46
CHAPITRE3 : manipulation des matrices avec les listes
1- Ecrire une fonction qui permet la lecture des lments d'une matrice
2- Ecrire une fonction qui permet l'affichage des lments d'une matrice
3- Ecrire une fonction qui permet de calculer la somme des lments de deux matrices
4- Ecrire une fonction qui permet de calculer le produit des lments de deux matrices
def lireMat(t,n):
for i in range(n):
for j in range(n):
try:
t[i][j]=int(input('donner t[%d,%d]:' % (i,j)))
except ValueError:
print("entier svp.")
return(t)
def afficherMat(t):
for i in range(len(t)):
for j in range(len(t)):
print('t[%d,%d]:' % (i,j),t[i][j])
def sommeMat(t1,t2):
t3=[[0,0,0],[0,0,0],[0,0,0]]
for i in range(len(t1)):
for j in range(len(t1)):
t3[i][j]=t1[i][j]+t2[i][j]
return t3
def produitMat(t1,t2):
t3=[[0,0,0],[0,0,0],[0,0,0]]
for i in range(len(t1)):
for j in range(len(t1)):
t3[i][j]=0
for k in range(len(t1)):
t3[i][j]=t3[i][j]+t1[i][k]*t2[k][j]
return t3
#appel
t=[[0,0,0],[0,0,0],[0,0,0]]
t1=lireMat(t,3)
afficherMat(t1)
t=[[0,0,0],[0,0,0],[0,0,0]]
t2=lireMat(t,3)
som=sommeMat(t1,t2)
afficherMat(som)
prod=produitMat(t1,t2)
afficherMat(prod)
47
CHAPITRE4 : manipulation des matrices avec numpy
Chargement partir dun fichier #charger partir d'un fichier, typage explicite
Les donnes peuvent tre stockes dans un fichier texte #sparateur de colonne = tabulation \t
(loadtxt pour charger, savetxt pour sauver) a = np.loadtxt("matrice.txt",delimiter="\t",dtype=float)
print(a)
48
Conversion dune collection (type standard Python) en #ajouter une colonne
type array de numpy d = np.array([[7.8],[6.1],[5.4]])
#liste de valeurs print(np.append(a,d,axis=1))
lst = [1.2,3.1,4.5,6.3] Accoler le vecteur d en tant que nouvelle colonne (axis = 1)
print(type(lst)) # <class list> de la matrice a
#conversion partir d'une liste : 2 tapes asarray() et
reshape()
a = np.asarray(lst,dtype=float).reshape(2,2)
print(a) Insertion de b en tant que nouvelle ligne (axis = 0) la
position n1
#insertion
Redimensionnement print(np.insert(a,1,b,axis=0))
a=
49
Tri et recherche
V= Parcours dune matrice : les itrateurs
v=
V=
#boucles indices
s = 0.0 Matrice particulire:
for i in range(0,v.shape[0]): np.zero(n):matrice null
for j in range(0,v.shape[1]): np.ones(n):matrice avec des 1
print(v[i,j]) np.eye(n): matrice avec des 1 diagonale et des 0 ailleurs
s = s + v[i,j] np.diag(v):matrice avec la diagonale le vecteur v
print("Somme = ",s)
50
Calculs Sur Les Matrices
Solution de Y.a = z
V= #rsolution d'quation
z = np.array([1.7,1.0])
print(np.linalg.solve(y,z)) # [0.8195 -0.0261]
Principe : les calculs sont raliss selon un axe (0 : On peut faire a = Y-1.z
traitement des valeurs en ligne pour chaque colonne, 1 : #vrification
inversement) print(np.dot(np.linalg.inv(y),z)) # [0.8195 -0.0261]
#moyenne des lignes pour chaque colonne #matrice symtrique avec XTX
print(np.mean(v,axis=0)) # [1.833 2.867] s = np.dot(np.transpose(x),x)
#moyenne des colonnes pour chaque ligne print(s)
print(np.mean(v,axis=1)) # [1.85 2.5 2.7]
#somme cumule des valeurs en ligne pour chaque
colonne
print(np.cumsum(v,axis=0)) #val. et vec. propres d'une matrice symtrique
print(np.linalg.eigh(s))
#matrice de corrlation
#rowvar = 0 pour indiquer que les variables
#sont organiss en colonnes
m = np.corrcoef(v,rowvar=0)
print(m)
Fonctions matricielles
X= y=
#transposition
print(np.transpose(x))
#multiplication
print(np.dot(x,y))
#dterminant
print(np.linalg.det(y)) # 4.21
#inversion
print(np.linalg.inv(y))
51
Td sur numpy:
Importer le package numpy sous le nom np
Question de cours
1. Crer un vecteur nul de la taille 10, mais la cinquime valeur qui est 1
2. Crer un vecteur nul de la taille 10
3. Crer un vecteur avec des valeurs allant de 10 49
4. Inverser un vecteur (premier lment devient dernier)
5. Trouvez des indices d'lments non nuls de [1,2,0,0,4,0]
6. Crer une matrice d'identit 3x3
7. Crer une matrice 3x3 avec des valeurs allant de 0 8
8. Crer un tableau de 10x10 avec des valeurs alatoires et trouver les valeurs minimales et
maximales
9. Crer un vecteur alatoire de taille 30 et trouver la valeur moyenne
10.Crer une matrice de 5x5 avec des valeurs 1,2,3,4 juste au-dessous de la diagonale
11.Crer une matrice de 5x5 avec des valeurs de ligne allant de 0 4
12.Crer un vecteur alatoire de taille 10 et le tri
13.Multiplier une matrice 5x3 par une matrice 3x2 (produit de la matrice relle)
52
.Elments de Correction des exercices.
Question de cours # un petit programme test
1)Z = np.zeros(10) T=np.array([[1,2,3],[2,5,9],[6,-2,0]])
Z[4] = 1 print(somme_triangle(T))
print(Z) 4)import numpy as np
2) Z = np.zeros(10) def maximum(T):
print(Z) n,m=np.size(T,0),np.size(T,1)
3) Z = np.arange(10,50) M=T[0,0]
print(Z) for i in range(n):
4) Z = np.arange(50) for j in range(m):
Z = Z[::-1] if T[i,j]>M:
Print(Z) M=T[i,j]
5) nz = np.nonzero([1,2,0,0,4,0]) return M
print(nz) # un petit programme test
6) Z = np.eye(3) T=np.array([[1,2,3],[2,5,9],[6,-2,0]])
print(Z) print(maximum(T))
7) Z = np.arange(9).reshape(3,3) 5) import numpy as np
print(Z) def test_valeur(T,x):
8) Z = np.random.random((10,10)) m,n=np.size(T,0),np.size(T,1)
Zmin, Zmax = Z.min(), Z.max() i=0
print(Zmin, Zmax) j=0
9) Z = np.random.random(30) while i<m:
m = Z.mean() if T[i,j]==x :
print(m) return True
10) Z = np.diag(1+np.arange(4),k=-1) j=j+1
print(Z) if j==n:
11) Z = np.zeros((5,5)) j=0
Z += np.arange(5) i=i+1
print(Z) return False
12) Z = np.random.random(10) # un petit programme test
Z.sort() T=np.array([[1,2,3],[2,5,9],[6,-2,0]])
print(Z) print(test_valeur(T,2))
13) Z = np.dot(np.ones((5,3)), np.ones((3,2))) print(test_valeur(T,7))
print(Z) 6)import numpy as n
Exercices def produit(A,B):
1) import numpy as np m,n,p=np.size(A,0),np.size(A,1),np.size(B,1)
def somme_diag(T): C=np.zeros([n,p])
n=np.size(T,0) for i in range(n):
S=0 for j in range(p):
for i in range(n): for k in range(m):
S+=T[i,i] C[i,j]+=A[i,k]*B[k,j]
return S return C
# un petit programme test # Un petit programme test.
T=np.array([[1,2,3],[2,5,9],[6,-2,0]]) A=np.array([[1,2,3],[5,4,6],[0,2,5]])
print(somme_diag(T)) B=np.array([[1,1,-1],[1,1,1],[1,1,1]])
2) import numpy as np print(produit(A,B))
def somme(T): print(produit(B,A))
n,m=np.size(T,0),np.size(T,1) 7) import numpy as n
S=0 def tri_bulle(L):
for i in range(n): n=len(L)
for j in range(m): for i in range(n-1):
S+=T[i,j] for j in range(1,n-i):
return S if L[j-1]>L[j]:
# un petit programme test L[j],L[j-1]=L[j-1],L[j]
T=np.array([[1,2,3],[2,5,9],[6,-2,0]]) return L
print(somme(T)) def Class_Col(T):
3) import numpy as np m,n=np.size(T,0),np.size(T,1)
def somme_triangle(T): for j in range(n):
n=np.size(T,0) T[:,j]=tri_bulle(T[:,j])
S=0 return T
for i in range(n): # Un petit programme test.
for j in range(i,n): T=np.array([[1,2,3],[5,4,6],[0,2,5]])
S+=T[i,j] print(Class_Col(T))
return S
53
CHAPITRE 5:Trac de courbes
Pour tracer des courbes, Python nest pas suffisant et nous avons besoin des bibliothques NumPy et matplotlib
Cration dune courbe
Utilisation de plot()
Linstruction plot() permet de tracer des courbes qui relient des
points dont les abscisses et ordonnes sont fournies dans des
tableaux.
Exemple 1
import numpy as np
import matplotlib.pyplot as plt
x = np.array([1, 3, 4, 6])
y = np.array([2, 3, 5, 1])
plt.plot(x, y)
plt.show() # affiche la figure l'ecran
Exemple 2
Dans cet exemple, nous allons tracer la fonction cosinus.
Syntaxe standard import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2*np.pi, 30)
y = np.cos(x)
plt.plot(x, y)
plt.show() # affiche la figure l'ecran
Exemple 2
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2*np.pi, 30)
y = np.cos(x)
plt.plot(x, y)
plt.ylim(-2, 2)
plt.show()
54
Ajout dun titre - title()
On peut ajouter un titre grce linstruction title().
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2*np.pi, 30)
y = np.cos(x)
plt.plot(x, y)
plt.title("Fonction cosinus")
plt.show()
Ajout dune lgende - legend()
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2*np.pi, 30)
y = np.cos(x)
plt.plot(x, y, label="cos(x)")
plt.legend()
plt.show()
RM: Pour faire afficher le label, il ne faut pas oublier de faire
appel linstruction legend().
Labels sur les axes - xlabel() et ylabel()
Des labels sur les axes peuvent tre ajouts avec les
fonctions xlabel() et ylabel().
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2*np.pi, 30)
y = np.cos(x)
plt.plot(x, y)
plt.xlabel("abscisses")
plt.ylabel("ordonnees")
plt.show()
55
Formats de courbes
Il est possible de prciser la couleur, le style de ligne et de symbole (marker) en ajoutant une chane de
caractres de la faon suivante :
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2*np.pi, 30)
y1 = np.cos(x)
y2 = np.sin(x)
plt.plot(x, y1, "r--", label="cos(x)")
plt.plot(x, y2, "b:o", label="sin(x)")
plt.legend()
plt.show()
Style de ligne
Les chanes de caractres suivantes permettent de dfinir le
style de ligne :
Chane - -- : -.
Effet ligne continue tirets ligne en pointill tirets points
RM:Si on ne veut pas faire apparatre de ligne, il suffit dindiquer un symbole sans prciser un style de ligne.
Exemple
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2*np.pi, 20)
y = np.sin(x)
plt.plot(x, y, "o-", label="ligne -")
plt.plot(x, y-0.5, "o--", label="ligne --")
plt.plot(x, y-1, "o:", label="ligne :")
plt.plot(x, y-1.5, "o-.", label="ligne -.")
plt.plot(x, y-2, "o", label="pas de ligne")
plt.legend()
plt.show()
Symbole (marker)
Les chanes de caractres suivantes permettent de
dfinir le symbole (marker) :
Chane . , o v ^ < >
Effet point pixel circle Triangle Triangle Triangle Triangle
marker marker marker down marker up marker left marker right marker
Chane s p * h H + x D d
Effet square pentagon star hexagon1 hexagon2 plus x diamond thin_diamond
marker marker marker marker marker marker marker marker marker
Couleur
Les chanes de caractres suivantes permettent de dfinir la couleur :
Chane b g r c m y k w
Couleur bleu vert rouge cyan magenta jaune noir blanc
Largeur de ligne
Pour modifier la largeur des lignes, il est possible de changer la valeur de largument linewidth.
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2*np.pi, 30)
y1 = np.cos(x)
y2 = np.sin(x)
56
plt.plot(x, y1, label="cos(x)")
plt.plot(x, y2, label="sin(x)", linewidth=4)
plt.legend()
plt.show()
On peut bien entendu crer une fonction autre que celles qui existent
dj dans numpy pour la tracer.
Exemple :
import numpy as np
import matplotlib.pyplot as plt
def f(x) :
return(np.log(x + np.sqrt(x**2 + 1)))
x = np.linspace(-10, 10, 10000)
plt.plot(x, f(x))
plt.show()
import numpy as np
import matplotlib.pyplot as plt
def g(x):
if x<0:
return 0
else:
return 1.5
x=np.linspace(-3,3,100)
plt.plot(x,np.exp(-x**2),'b-')
plt.plot(x,[g(xi) for xi in x],'r-')
plt.legend(["f","g"])
plt.xlabel("x")
plt.ylabel("y")
plt.show()
import numpy as np
import matplotlib.pyplot as plt
w_0=1e4
xi=0.5
A=1
w_a=w_0*np.sqrt(1-xi**2)
T=2*np.pi/w_0
t=np.linspace(0,4*T,100)
plt.plot(t,A*np.cos(w_a*t)*np.exp(-xi*w_0*t),'b-')
plt.plot(t,A*np.exp(-xi*w_0*t),'r--')
plt.plot(t,-A*np.exp(-xi*w_0*t),'r--')
plt.xlabel("t (s)")
plt.ylabel("u_c (V)")
plt.title("Regime pseudoperiodique")
plt.show()
57
CHAPITRE6 : manipulation des polynomes avec numpy
Les polynmes sont manipuls avec la classe poly1d() du package numpy.
La cration d'un objet (polynme) de la classe poly1d se fait Les coefficients du polynme sont obtenus par P[i]
par la commande suivante : >>> P=np.poly1d([1, 1, 5, 7, 8, 9])
>>> import numpy as np 1
>>> P=np.poly1d([1,2,4]) >>> for i in range(6):
>>> print(P) print(P[i])
1 x2 + 2 x + 4 9
La liste L=[1,2,4] est donc la liste des coefficients du 8
polynme classs par degr dcroissant. 7
On peut rentrer un polynme en spcifiant ses racines : 5
>>> Q=np.poly1d([1,1],True) 1
>>> print(Q) 1
1 x2 - 2 x + 1 Exercice : Programmer une fonction calculant QoP pour la
On peut changer le nom de la variable : composition des polynmes.
>>> Q=np.poly1d([1,2,1],False,'t') def compo(P,Q):
>>> print(Q) q=Q.order
2
1t +2t+1 print(q)
L'valuation consiste calculer le polynme sur une valeur S=np.poly1d([0])
donne : for i in range(q+1):
>>> Q(1) print(i)
4 S=S+Q[i]*P**i
>>> Q(-1) return(S)
0 Modification de la variable utilise pour l'inconnue
On peut spcifier des coefficients complexes : >>> = np.poly1d([1,2,3], variable='z')
>>> R=np.poly1d([1,1j,2*1j]) >>> print P
>>> print(R) 1 z2 + 2 z + 3
2
1 x + 1j x + 2j Division euclidienne des polynmes : le rsultat est un
Recherche des racines : couple de polynmes (Quotient,Reste).
>>> P=np.poly1d([1,0,1]) >>> P/Q
>>> print(P) (poly1d([ 0.42857143, -0.04081633]), poly1d([-1.59183673,
2
1x +1 2.16326531]))
>>> P.r On peut rcuprer sparment le quotient et le reste :
array([ 0.+1.j, 0.-1.j]) >>> (quo,res)=P/Q
Quelques mthodes de la classe poly1d >>> quo
Liste des coefficients : P.c , Degr du polynme: P.order poly1d([ 0.42857143, -0.04081633])
>>> P=np.poly1d([1,1,5,7,8,9]) Intgration et drivation :
>>> P.coeffs >>> P=np.poly1d([1,1,5,7,8,9])
array([1, 1, 5, 7, 8, 9]) >>> P.deriv()
>>> P.order poly1d([ 5, 4, 15, 14, 8])
5 >>> P.integ()
Multiplication /Addition/Puissance poly1d([ 0.16666667, 0.2 , 1.25 , 2.33333333, 4. ,
>>> Q=np.poly1d([4,2,1]) 9. , 0. ])
>>> print(Q)
4 x2 + 2 x + 1
>>> Q+P
poly1d([ 1, 1, 5, 11, 10, 10])
>>> print(Q+P)
1 x5 + 1 x4 + 5 x3 + 11 x2 + 10 x + 10
>>> Q*P
poly1d([ 4, 6, 23, 39, 51, 59, 26, 9])
>>> print(Q**3)
64 x6 + 96 x5 + 96 x4 + 56 x3 + 24 x2 + 6 x + 1
58
CHAPITRE6 : manipulation des polynomes avec numpy
Polynmes La classe Polynomial du module numpy.polynomial.polynomial permet de travailler avec des polynmes.
from numpy.polynomial import Polynomial
Pour crer un polynme, il faut lister ses coefficients par ordre de degr croissant.
Par exemple, pour le polynme 3 + 2 3,
p = Polynomial([-3, 2, 0, 1])
On peut alors utiliser cette variable comme une fonction pour calculer, en un point quelconque, la valeur de la fonction
polynme associe. Cette fonction peut agir galement sur un tableau de valeurs, elle calcule alors la valeur de la fonction
polynme en chacun des points indiqus.
p(0)
-3.0
p([1, 2, 3])
array([ 0., 9., 30.])
Lattribut coef donne accs aux coefficients ordonns par degr croissant ; ainsi p.coef[i] correspond au coefficient du
terme de degr i.
La mthode degree renvoie le degr du polynme
La mthode roots calcule ses racines.
p.coef array([-3., 2., 0., 1.])
p.coef[1]
2.0
p.degree()
3
p.roots()
array([-0.5-1.6583124j, -0.5+1.6583124j, 1.0+0.j ])
La mthode deriv renvoie un nouveau polynme, driv du polynme initial. Cette mthode prend en argument facultatif
un entier positif indiquant le nombre de drivations effectuer.
La mthode integ intgre le polynme, elle prend un paramtre optionnel supplmentaire donnant la constante
dintgration utiliser, ce paramtres peut tre une liste en cas dintgration multiple ; les constantes dintgration non
prcises sont prises gales zro.
p.deriv().coef array([ 2., 0., 3.])
p.deriv(2).coef array([ 0., 6.])
p.deriv(5).coef array([-0.])
p.integ().coef array([ 0. , -3. , 1. , 0. , 0.25])
p.integ(1, 2).coef # intgrer une fois avec la constante 2
array([ 2. , -3. , 1. , 0. , 0.25])
p.integ(2, [1, 2]).coef # intgrer deux fois
array([ 2. , 1. , -1.5 , 0.33333333, 0. , 0.05 ])
Les oprateurs +, -, * permettent dadditionner, soustraire et multiplier des polynmes. Ils fonctionnent galement entre
un polynme et un scalaire.
Loprateur ** permet dlever un polynme une puissance entire positive.
a = Polynomial([1, 2, 1])
b = Polynomial([5, 3])
p = 2*a * b + Polynomial([-7, 2])
p.coef array([ 3., 28., 22., 6.])
(p**2).coef array([ 9., 168., 916., 1268., 820., 264., 36.])
Loprateur / permet de diviser un polynme par un scalaire.
Pour diviser deux polynmes il faut utiliser loprateur // qui renvoie le quotient ;
Loprateur % calcule le reste.
(p / 2).coef array([ 1.5, 14. , 11. , 3. ])
q = p // a
r = p % a q.coef array([ 10., 6.])
r.coef array([-7., 2.])
(q * a + r).coef array([ 3., 28., 22., 6.])
59
CHAPITRE7 : Recherche des racines dune fonction (zro d'une fonction)
Objectifs
valuer numriquement une solution dquation de la forme f (x) = 0 avec f une fonction valeurs relles, Le but est donc
de trouver une solution approche avec une bonne approximation, plusieurs mthodes peuvent tre utilises dont la
recherche par dichotomie, la mthode de Newton et la mthode de Lagrange.
Mthode dichotomique
Le principe est de diviser lintervalle en deux parts gales, de conserver la partie contenant la racine et dy reproduire
lopration jusqu ce que le critre de convergence soit satisfait. A partir dun intervalle donn *a, b+, encadrant une racine
de la fonction f tudie :
calculer le point c milieu de lintervalle : c = a + b
valuer p = f(a). f(c) puis test :
si p > 0, il ny a pas de racine dans lintervalle [a, c]. La racine est dans lintervalle *c, b+. On donne alors a la valeur de c
si p < 0, la racine est dans [a, c]. On donne alors b la valeur de c
si p = 0, alors la racine est c.
test darrt : Evaluer le critre de convergence
recommencer si le critre de convergence nest pas satisfait
Mthode par dichotomie pour la fonction f sur *a, b+ avec une tolrance :
Exemple : Approximation de 2
Soit f une fonction dfinie par f x x 2 2 continue sur lintervalle [1, 2], valeurs relles
60
o Mthode de Lagrange ( Mthode de la corde )
Le principe de la mthode de la corde est de diviser lintervalle en deux, de conserver la partie contenant la racine et dy
reproduire lopration jusqu ce que le critre de convergence soit satisfait. Au lieu de diviser en deux parts gales, on
cherche le point c (diviseur de lintervalle intersection de laxe des abscisses et de la droite passant par les points
A = (a, f(a)) et B = (b, f(b)). Lquation de la corde est donne par:
A partir dun intervalle donn *a, b+, encadrant une racine de la fonction f tudie :
calculer le point c sur la corde et sur laxe des abscisses :
Exemple : Approximation de 2
Mthode de Newton
Les mthodes de Schrder sont bases sur les n premires drives dune fonction f pour une mthode dordre n + 1.
Dans le cas de la mthode de Newton, on nutilise que la drive premire.
RAPPEL Si la fonction est de classe C 1 sur lintervalle *a, b+ alors, le dveloppement de Taylor lordre 1 donne:
f(b) = f(a) + f (a).(b a) + o(b a) A partir dun point x0, la mthode consiste rechercher le point suivant x1 en le
supposant racine de la fonction et en ngligeant le terme o(b a) dans le dveloppement de Taylor lordre 1.
Ainsi:
61
Mthode de Newton pour la fonction f sur *a, b+ avec une tolrance :
Exemple : Approximation de 2
62
CHAPITRE8 : Rsolution numrique des quations diffrentielles
Introduction :
Le but de ce chapitre est dtudier la rsolution dun problme dynamique une dimension, linaire ou non, conduisant
la rsolution approche dune quation diffrentielle ordinaire par la mthode dEuler. En dautre terme, on veut trouver
une solution une quation diffrentielle de la forme :
y ' t F t , y (t )
y t 0 y 0
Mthode dEuler
On considre une quation diffrentielle dordre 1 avec condition initiale (problme de Cauchy) :
y ' t F t , y (t )
y t 0 y 0
quoi sert la mthode dEuler ? dterminer approximativement les
valeurs prises par y en des instants t0, t1, . . . , tN-1.
Nous utiliserons les notations suivantes :
y(t0), y(t1), . . . , y(tN-1) sont les valeurs exactes (on connat seulement y(t0))
y0, y1, . . . , yN-1 sont les valeurs approches fournies par la mthode
dEuler. On a gnralement,
pour tout i [2,N -2], ti+1=ti+t avec t un nombre fix assez petit .
Quel est le principe du calcul ? On pose y0 =y(t0)
et on construit ensuite yi+1 partir de yi pour tout i [0,N -2].
Plus prcisment, on choisit yi+1 tel que
Avec PYTHON, nous utiliserons des listes
t = [t0, t1, . . . , tN-1] et y= [y0, y1, . . . , yN-1].
On dfinira donc y[i +1] en posant :
i [0,N -2], y[i +1] = y[i ]+(t [i +1]-t [i ])*F(y[i ], t [i ])
Remarque : la commande y=[0]*N cre une liste y de taille N ne contenant que des 0.
Exemple Python. On considre lquation y'=y avec la condition initiale y(0) =1. La solution est la fonction exponentielle, ce
qui permet de comparer les rsultats obtenus. On va travailler sur lintervalle *0,1+ en considrant tout dabord un pas de
0.25 puis un pas de0.1. La fonction exponentielle est reprsente en pointills pour comparer.
63
Equation diffrentielle d'ordre 2
Python ne dispose pas de fonctions pour rsoudre numriquement une quation diffrentielle d'ordre 2. Cependant, une
telle quation diffrentielle peut toujours tre transforme en un systme d'quation diffrentielle d'ordre 1.
Modules utiles
Importer les modules suivants :
import numpy as np
import scipy.integrate
import matplotlib.pyplot as plt
Une quation dordre 1
Nous allons tudier lquation diffrentielle (E1) :(E1) y = 2xy2 avec la condition initiale y(0) = 0.2 sur le segment I = [0, 2]
Cration dune subdivision
Nous allons crer une subdivision quirpartie du segment [0, 2]. Le but est de crer le tableau detype numpy.ndarray
array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ,1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2. ])
numpy offre deux solutions :
La fonction np.linspace dont la syntaxe est np.linspace (debut inclus, fin incluse, nombre de points)
Ici lappel correspondant est np.linspace (0, 2., 21).
La fonction np.arange dont la syntaxe est np.arange (debut inclus, fin exclue, pas)
Affecter la variable x cette subdvision.
Rcriture de l'quation
Nous allons rcrire lquation diffrentielle sous la forme y = f(y, x)
Crer la fonction f approprie :
def f (y, x) :
return (2 * x * y**2)
Rsolution approche avec la mthode dEuler
Soit n tel que x soit la subdivision [x0, . . . , xn] (sur notre exemple n vaut 20). Soient a et b tels que I = [a, b] (sur notre
exemple a = 0. et b = 2.)
Posons h =(b a)/n
(Cest la distance entre deux valeurs conscutives de la subdivision). Sur notre exemple, h = 0.1
Notons y la solution de (E1). Nous ne cherchons pas calculer explicitement y. Il sagit de crer la liste [y0, . . . , yn] ou pour
tout i [[0, n]], yi est une valeur approche de y(xi).
Rappelons le schma dEuler (explicite) :
(y0 = 0.2 (valeur initiale)
k [[1, n]], yk = yk1 + hf(yk1, xk1)
Programmer le calcul de cette liste et la mmoriser dans une variable nomme ye (comme yEuler).
Vous pouvez a votre convenance gnrer une liste classique ou un objet de type np.ndarray
64
Vrification : y20 doit tre ` peu prs gal 0.658
Rsolution avec la fonction prprogramme odeint
La fonction odeint du module scipy.integrate a pour syntaxe :
scipy.integrate.odeint (fonction f, valeur initiale en a, subdivision de [a, b])
La valeur de retour est une matrice colonne forme des valeurs y0, . . . , yn.
Excuter la ligne : ys = scipy.integrate.odeint (f, 0.2, x)
Afficher ensuite la valeur de ys avec une instruction print.
Reprsentation simultane
Pour obtenir laffichage de la fentre graphique correspondante il faut aprs linstruction plt.plot excuter linstruction
plt.show ()
Nous allons tracer simultanment sur le mme schma la courbe donne par le schma dEuler explicite et la courbe
donne par lusage de la fonction odeint. Excuter les instructions :
plt.plot (x, ys)
plt.plot (x, ye, linestyle=--) # trace en trait discontinu
plt.xlabel (Axe des abscisses) # annotation de laxe des abscisses
plt.ylabel (Solutions directe et approche) # annotation axe des ordonnes
plt.show ()
Equation dordre 2
Nous allons maintenant nous intresser une quation dordre 2 :
(E2) y'' + y' y = x2 4 sin(x) avec
(y(0) = 1
Y'(0) = 2)
La fonction odeint ne permet de rsoudre que des quations dordre 1. Le truc cest de transformer l'quation dordre 2
en une quation dordre 1 en considrant que linconnue nest pas la fonction y mais le couple z = (y, y').
On calculer alors z'= (y', y'') = (y',-y' + y + x2 4 sin(x)) = f(z) ou f est une fonction que lon peut dfinir :
def f (z, x) :
(y, dy) = z # on rcupre les deux composantes
return ([dy, -dy + y + x**2 - 4*np.sin(x)])
La condition initiale est z0=[1., 2.]
Rsolution
Dfinir la fonction comme cidessus.
Rsoudre ensuite lquation diffrentielle sur lintervalle *0, 4+ :
x = np.linspace (0., 4., 100)
z0 = [1., 2.]
z = scipy.integrate.odeint (f, z0, x)
Regarder la valeur de z : cest la matrice **y(x0), y'(x0)], . . . , [y(xn1), y'(xn1)]] o [x0, . . . , xn] est le tableau des abscisses.
Extraction de la valeur de y et trac
Pour effectuer le trac il faut extraire la premire colonne de la matrice z. Cest ici que les matrices numpy montrent leur
puissance :
y = z[:, 0]
Effectuer ensuite le trac :
plt.plot (x, y)
plt.show ()
Pour ne pas trop craser la figure, il est possible de fixer lchelle sur laxe des ordonnes en insrant
linstruction plt.ylim (0., 10.) entre plt.plot(x,y) et plt.show(). Il existe aussi bien sur une mthode xlim pour laxe des
abscisses.
Exercice1:
65
Exercice 2
On considre lquation diffrentielle du second ordre : x''(t )(1x2)x'(t )+x(t ) = 0
On pose y = x'.
Vrifier que (x, y) est solution dun systme de deux quations diffrentielles du premier ordre.
Tracer les trajectoires pour les conditions initiales (x(0), y(0)) = (1,0) et (x(0), y(0)) =(3,0) sur lintervalle *0, 20+
Exercice 3
rsoudre sur lintervalle *0,10+ le problme de Cauchy : y''+3y'+2y=2cos(t ), y(0)=1,y'(0)=0
Le nouveau systme en posant z = y :y'=z, z'=-3z-2y+2cos(t ) , y(0) = 1, z(0) = 0
La fonction F associe au systme avec X =[ ]
66