Académique Documents
Professionnel Documents
Culture Documents
1
CPGE Informatique MPSI / 1TSI /PCSI
Lydex – Ben guerir Programmation Mr L. BOUHOU
Chap I
Les instructions de base
I.1. Notion de base
Un programme est un ensemble d’instructions écrites dans un ordre précis sous un langage de programmation dont le but de
les exécuter par la machine afin de résoudre un problème quelconque.
Dans ce qui suit, on développera, le langage de programmation Python, comme outil de vérification des algorithmes proposés
en cours d’Algorithmique, et non pas comme outil à étudier.
Un programme sous python doit respecter, lors de son écriture, la notion d’alignement d’instructions par bloc.
Chap II
Les instructions Alternatives
II.1.Definition
Il s’agit d’une instruction conditionnelle (if…) qui permet d’exécuter une action qui peut être une ou plusieurs instructions(bloc
d’instructions) en fonction de la valeur logique d’une condition.
II.2 . Conditionnel Simple:
Syntaxe : if (condtion) : « action »
- condition : comparaison entre deux membres dont l’un est souvent une variable ou une expression en fonction d’une variable.
- action: une instruction ou bloc d’instructions à encadrer par l’alignement.
Exemple1
NE=float(input(„‟Donner la note de l‟examen écrit :‟‟))
NO=float(input(„‟Donner la note de l‟examen oral :‟‟))
NTP=float(input(„‟Donner la note de l‟examen TP :‟‟))
M=(NE+NO+NTP)/3
if M>=10 : print(„‟condidat admis‟‟)
print(‟‟ok‟‟)
Exemple2
…
M=(NE+NO+NTP)/3
if M>=10 :
print(„‟condidat admis‟‟)
R=(NO+NTP)/2
print(„‟Resultat:‟‟)
print(„‟Exam Ecrit:‟‟,NE,‟‟\n Exam Oral+TP:‟‟,R)
print(„‟ok‟‟)
II.3 . Conditionnel avec un choix parmi deux:
Syntaxe : if (condtion) : « action1 »
else: « action2 »
Remarque: tenir compte de l’alignement des instructions des actions selon l’objectif souhaité.
Exemple1
NE=float(input(„‟Donner la note de l‟examen écrit :‟‟))
NO=float(input(„‟Donner la note de l‟examen oral :‟‟))
NTP=float(input(„‟Donner la note de l‟examen TP :‟‟))
M=(NE+NO+NTP)/3
if M>=10 : print(„‟condidat admis‟‟)
else:print(„‟condidat Non admis‟‟)
print(‟‟ok‟‟)
Exemple2
…
M=(NE+NO+NTP)/3
if M>=10 :
print(„‟condidat admis‟‟)
3
CPGE Informatique MPSI / 1TSI /PCSI
Lydex – Ben guerir Programmation Mr L. BOUHOU
R=(NO+NTP)/2
print(„‟Resultat:‟‟)
print(„‟Exam Ecrit:‟‟,NE,‟‟\n Exam Oral+TP:‟‟,R)
else:print(„‟condidat non admis‟‟)
print(„‟ok‟‟)
II.4 . Conditionnel avec un choix parmi deux: Syntaxe
Syntaxe :
if (condtion1) :
inst1
inst2
if (condition2):
insta
…
instx
else:
…
inst4
…
else:
inst1
if (condition3):
insta
instrb
…
instx
else: …
inst3
…
Exemple
NE=float(input(„‟Donner la note de l‟examen écrit :‟‟))
NO=float(input(„‟Donner la note de l‟examen oral :‟‟))
M=(NE+NO)/2
if M<=10 : print(„‟condidat Non admis‟‟)
else:
print(„‟condidat admis‟‟)
if M<12:print(„‟Mention : Passable‟‟)
else:
if M<14: print(„‟Mention : Assez Bien‟‟)
else:print(„‟Mention : Bien‟‟)
print(‟‟ok‟‟)
Remarque:
else : = elif <<cond>> : inst
if <<cond>> : inst
4
CPGE Informatique MPSI / 1TSI /PCSI
Lydex – Ben guerir Programmation Mr L. BOUHOU
Chap III
Les instructions Itératives
3.1. Définition
Il s’agit d’instructions qui permettent de répéter l’exécution d’une action qui peut être une ou plusieurs instructions.
3.2. la boucle « for… »
Pour l’instruction ‘’for’’, le nombre d’itération doit être déterminé et connu d’avance.
Syntaxe:
for compteur in range(VD,VF) :
inst 1
inst 2
……
instr n
Exemples:
1- for i in range(1,10): print(‘3*i)
2- for i in range(5,20):
R=i%2
if R!= 0:print(i)
Remarque 1 : On peut imbriquer deux boucles ‘’for’’ (ou plus).
Syntaxe:
for compteur1 in range(VD1,VF1):
Inst 1
Inst 2
for compteur2 in range(VD1 , VF2) :
Inst a
Inst b
…..
Inst x
Inst 4
Inst 5
…..
Inst n
fin
5
CPGE Informatique MPSI / 1TSI /PCSI
Lydex – Ben guerir Programmation Mr L. BOUHOU
3.3. la boucle « while… »
Pour l’instruction ‘’while’’, le nombre d’itération n’est pas déterminé(n’est pas connu d’avance). Ce nombre dépond d’une
condition.
Syntaxe: While « condition »:
inst 1
……
instr n
Exemple:
n=0
S1 = 0
While S<1500 :
N=float(input(„‟ prix du produit :‟‟))
S2 = S1
S1 = S1 + N
n=n+1
Print(„‟nombre d‟article sans dépasser la condition est :‟‟,n-1)
Print(„‟le montant correspondant est ;‟‟,S2)
Remarque :
On peut imbriquer :
- deux boucles while et plus
- une boucle while et une boucle for
While condition1 : While condition1 :
Inst1 Inst1
Inst2 Inst2
While condition2 : For compteur in range(VD,VF) :
Insta Insta
instb instb
…. ….
Inst4 Inst4
….. …..
For compteur in range(VD,VF) :
Inst1
Inst2
While condition1 :
Insta
Instb
….
Inst4
….
6
CPGE Informatique MPSI / 1TSI /PCSI
Lydex – Ben guerir Programmation Mr L. BOUHOU
Chap IV
Les fonctions
Chap V
Les chaines de caractères
5.1. Introduction
Jusqu’à présent nous n’avons manipulé que des nombres. Mais un programme d’ordinateur peut également traiter des
caractères alphabétiques, des mots, des phrases, ou des suites de symboles quelconques.
Dans la plupart des langages de programmation, il existe pour cet usage des structures de données particulières que l’on
appelle: ≪ chaines de caractères ≫.
les chaines sont des séquences de caractères, Chacun occupe une place précise dans la séquence. Sous Python, les
éléments d’une séquence sont toujours indicés (ou numéroté) de la même manière que les tableaux, c’est-a-dire à partir de zéro.
Pour extraire un caractère d’une chaine, il suffit d’accoler au nom de la variable qui contient cette chaine, son indice
entre crochets :
Exemple:
Ville = 'Marrakech'
print(Ville[1], Ville[3], Ville[5]) a r k
Dans cet exemple, la fonction intégrée int() convertit la chaîne en nombre entier. Il serait également possible de
convertir une chaîne de caractères en nombre réel, à l’aide de la fonction intégrée float().
5.3.4.Extraction de fragments de chaînes
L’extraction consiste a indiquer entre crochets les indices correspondant au début et a la fin de la ≪ tranche ≫ que l’on souhaite
extraire :
ch = "Juliette"
9
CPGE Informatique MPSI / 1TSI /PCSI
Lydex – Ben guerir Programmation Mr L. BOUHOU
ch[0:3] Jul
Dans la tranche [n,m], le n-ième caractère est inclus, mais pas le m-ième.
ch[3:7] iett
Les indices de découpage ont des valeurs par défaut : un premier indice non défini est considéré comme zéro, tandis que
le second indice omis prend par défaut la taille de la chaine complète :
ch[:3] Jul
ch[3:] iette
Les caractères accentues ne doivent pas faire problème :
ch = 'Adelaide'
print(ch[:3], ch[4:]) Ade aide
5.3.5.Les chaînes sont des séquences non modifiables
Vous ne pouvez pas modifier le contenu d’une chaine existante. Essayez par exemple :
salut = 'bonjour a tous'
salut[0] = 'B' erreur !!!!
print(salut) !!!!
10
CPGE Informatique MPSI / 1TSI /PCSI
Lydex – Ben guerir Programmation Mr L. BOUHOU
Chap VI
Les Listes
6.1. Présentation
On peut définir une liste comme une collection d’éléments séparés par des virgules, l’ensemble étant enfermé dans
des crochets. Exemple : Lst = ['lun','mar','mer',18,20.3,'jeu','ven’]
Dans cet exemple, la valeur de la variable Lst est une liste.
Les éléments individuels qui constituent une liste peuvent être de types variés. (nous verrons plus loin qu’un élément
d’une liste peut lui-même être une liste !).
Comme les chaines de caractères, les listes sont des collections ordonnées d’objets. Les divers éléments qui
constituent une liste sont en effet toujours disposes dans le même ordre, et l’on peut donc accéder a chacun d’entre
eux individuellement si l’on connait son index dans la liste.
Exemples :
Lst=['lun','mar','mer',18, 20.3,'jeu','ven']
Lst[2] mer
Lst[4] 20.3
A la différence de ce qui se passe pour les chaines, qui constituent un type de données non-modifiables, il est possible
de changer les éléments individuels d’une liste :
Lst=['lun','mar','mer',18, 20.3,'jeu','ven']
Lst[3] = Lst[3] +7
Lst ['lun','mar','mer',25,20.3,'jeu','ven']
On peut donc remplacer certains éléments d’une liste par d’autres, comme ci-dessous :
Lst=['lun','mar','mer',25, 20.3,'jeu','ven']
Lst[2] = 'Juillet'
Lst ['lun','mar','Juillet',25,20.3,'jeu','ven']
6.2.2. append(): qui signifie « ajouter » en anglais permet d’ajouter un élément, passé comme argument, à une liste:
Syntaxe : Liste.append(element)
Exemple :
Lst = ['lun','mar','mer','juillet',25, 'jeu','ven']
Liste.append(„sam‟)
Lst ['lun','mar','mer','juillet',25, 'jeu','ven', 'sam']
6.2.3. extend(): permet d'ajouter les éléments d'une liste 'L' à la liste à laquelle la méthode est appliquée.
Exemple :
11
CPGE Informatique MPSI / 1TSI /PCSI
Lydex – Ben guerir Programmation Mr L. BOUHOU
L1 = [1,2,3]
L2 = [4,5,6]
L1.extend(L2)
L1 [1, 2, 3, 4, 5, 6]
L2 [4,5,6]
6.2.5. remove(x): permet de supprimer la première occurrence d’un élément de la liste dont la valeur correspond à la
valeur de x.
Syntaxe : liste.remove(elt_à_supp)
Exemples :
L = [„ab‟, „ac‟, „ad‟, „bc‟, „ac‟, „bd‟]
L.remove(„ac‟)
L [„ab‟, „ad‟, „bc‟, „ac‟, „bd‟]
6.2.6. del() : permet de supprimer, d’une liste, un élément quelconque (en indiquant son index).
Syntaxe : del(liste[indexe_elt_à_supp])
Exemple :
L = ['lun','mar','mer','juillet',25, 'jeu','ven', 'sam']
del(L[2])
L ['lun','mar','Juillet',25,'jeu','ven„,‟sam‟]
6.2.7. pop(i) : permet de retirer l'élément figurant à l'index 'i' d'une liste et de le retourner.
Syntaxe : liste.pop(i) # i est l’index de l’élément à supprimer de la liste et de le renvoyer
Exemple :
L = ['a','b','c']
R=Lst.pop(1)
R 'b'
L ['a', 'c']
MaListe = [0,1,2,3,4,5]
MaListe.reverse()
MaListe -- [5, 4, 3, 2, 1, 0]
6.2.10. index(e): renvoie l'index du premier élément dont la valeur est 'e'. Si la valeur ne figure pas dans la liste, une
erreur est renvoyée.
Exemple :
MaListe = ['a','b','c']
MaListe.index('c') 2
6.3. Cas particulier: liste de valeurs Numérique
Initialisation d‟une liste par des valeurs numeriques
- Par des 0:NomListe=zeros(Nombres de cases)
Exemple: import numpy as np
L1=np.zeros(8) L1=[0,0,0,0,0,0,0,0]
- Par des 1: NomListe=ones(nombres de cases)
Exemple: L2=np.ones(8) L1=[1,1,1,1,1,1,1,1]
- Par différents valeurs: NomListe=[val1, val2, …, valn)
Exemple: L3=[4,26,9,11]
Déclaration
On ne peut appliquer aucune fonction prédéfinie, concernant les listes, à une variable que si cette variable est
initialisée par des valeurs ou au moins déclarée comme liste.
Déclaration: NomListe=[ ]
Exemple: L=[ ]
L.append(5) L=[5]
Lecture des éléments d’une liste de nombres :
NomListe=[]
NombreDeCases=int(input(„‟donner …. ‟‟))
for i in range( 1,NombreDeCases+1 ) :
print(„‟valeurs „‟,i,‟‟ : „‟)
x=…((input())
NomListe.append(x)
Exemple:
print("donner le nombre d'entier à manipuler:")
n=int(input())
T=[]
for i in range( 1,n +1) :
print(„‟Entier „‟,i,‟‟ : „‟)
13
CPGE Informatique MPSI / 1TSI /PCSI
Lydex – Ben guerir Programmation Mr L. BOUHOU
x=int(input())
T.append(x)
Affichage des éléments d'une liste
- Méthode 1 :
for i in range( NbreValeurs ) : print(nomListe[i]) Ou for i in range( valDebut, valFin) : print(nomListe[i])
- Méthode 2 :
i=0
while i<len(NomListe):
print(NomListe[i])
i=i+1
- Méthode 3 : for val in NomListe : print( val )
6.4. Fonction qui laisse passer, comme paramètre, une liste
Déclaration:
def NomFct(NomPrListe):
traitement en fct de NomPrListe[i] avec 0 <= i < len(NomPrListe)
Appel: NomFct(NomListe)
Exemple: fonction Max() qui laisse passé, comme paramètre, une liste de n entiers afin de retourner le plus grand
entier de ces n entiers.
6. 5.Liste contenant une liste
Les éléments d’une liste peuvent être des listes.
Exemple :
L= [[1,‟Meryam‟,18],[2,‟Kamal‟,23],‟lun‟,4.5]
L[1] [2,Kamal‟,23] et L[3] 4.5
On peut ajouter, un élément type liste à une liste:
P3=[3,‟Amin‟,19]
L.append(P3)
L [[1,‟Meryam‟,18],[2,Kamal‟,23],‟lun‟,4.5,[3,‟Amin‟,19]]
Pour accéder aux différents constituants d’une liste de ce type, on utilise deux indexes i et j avec i qui indique l’index
de l’élément i dans la liste principale et j l’index de l’élément dans la liste des éléments de l’élément i.
Exemple:
L=[[1,‟Meryam‟,18],[2,Kamal‟,23],‟lun‟,4.5,[3,‟Amin‟,19]]
L[4][1] ‟Amine‟
Application : somme de deux matrices carrées d‟ordre 3
L1=[[1,0,2],[1,1,0],[2,1,1]]
L2=[[0,1,2],[1,1,1],[2,0,1]]
L=[]
for i in range(3):
for j in range(3):
L.append(L1[i][j] + L2[i][j])
L [[1,1,4],[2,2,1],[4,1,2]]
6.6. Trier une liste de nombres
Pour trier les éléments d’une liste on peut utiliser la fonction sort().
14
CPGE Informatique MPSI / 1TSI /PCSI
Lydex – Ben guerir Programmation Mr L. BOUHOU
Syntaxe: NomListe.sort()
Sinon, on peut utiliser des algorithmes permettant de trier les éléments d’une liste.
6.6.1. Tri à Bulle
Il s’agit de faire plusieurs balayages de la liste en ordonnant les paires d’éléments adjacents de bas en haut (gauche à
droite). A la fin du premier balayage, l’élément le plus grand est remonté au sommet de la liste comme une bulle
d’air dans l’eau. Lors du deuxième balayage, on ne considère que la partie non triée de la Liste pour obtenir à la fin le
deuxième plus grand élément avant le plus grand et ainsi de suite jusqu’à ce que la liste soit trié complètement.
def TriBulle(L):
for i in range(0,len(L)):
for j in range(0,len(L)-i-1):
if (L[j]>L[j+1]) :
temp=L[j]
L[j]=L[j+1]
L[j+1]=temp
6.6.2. Tri par sélection
La méthode est de balayer tous les éléments pour chercher le plus petit qui sera échangé avec L[0]. Puis de répéter, en
cherchant le plus petit élément parmi les éléments restants (de L [1] L[n-1]) et ainsi de suite.
def TriSelection(L):
for i in range(0,len(L)-1):
min=L[i]
k=i
for j in range(i+1,len(L)):
if (L[j]<min):
min=L[j]
k=j
if min<L[i]:
L[k]=L[i]
L[i]=mi
6.6.3. Tri en utilisant des appels récursifs
Il s‟agit d‟une fonction qui laisse passer, comme paramètre, la liste et sa longueur, afin de placer, pour le tri
croissant, le plus grand élément (respectivement le plus petit pour le tri décroissant ) dans la dernière case de la
liste, puis au lieu de faire une boucle qui itère le même processus on utilise un appel récursif avec une longueur
réduite de 1 permettant à cet appel de se reproduire jusqu‟à ce que la liste soit triée.
def TriRecursif(L,n):
if n>=2:
for i in range(n-1):
if (L[i]>L[i+1]) :
x=L[i]
L[i]=L[i+1]
L[i+1]=x
TriRecursif(L,n-1)
15
CPGE Informatique MPSI / 1TSI /PCSI
Lydex – Ben guerir Programmation Mr L. BOUHOU
Chap VII
Les fichiers Textes
Un fichier est un ensemble d’information enregistré d’une manier permanente dans une mémoire de masse.
Fichier texte =fichier dont le contenu est une suite de caractères « imprimables », en lignes successives, ces lignes
étant séparées les unes des autres par un caractère spécial non imprimable appelé marqueur de fin de ligne(‘’\n’’).
7.1. Création d’un fichier texte
Pour créer un fichier texte en tapant son contenu via le clavier, on peut utiliser, sous Python, les instructions
regroupées dans la fonction présentée ci-dessous à laquelle on doit fournir le nom de fichier à créer.
def creation(nf) :
f=open(nf,'w')
ch=input("taper du texte:")
f.write(ch)
f.close
7.2. Lecture d’un fichier texte
Pour lire tout le contenu d’un fichier texte supposé existant, on peut utiliser, sous Python, les instructions regroupées
dans la fonction présentée ci-dessous à laquelle on doit fournir le nom de fichier à lire son contenu:
def lecture(nf) :
f=open(nf,'r')
ch=f.read()
print(ch)
f.close
Remarque : on peut créer un fichier dont le contenu est du texte fixe(par exemple de 4 lignes) :
def creation(nf) :
f = open(nf, "w")
f.write("la ligne 1\n la ligne 2\nla ligne 3\n la ligne 4")
f.close()
7.3. Extraction des lignes d’un fichier texte
Pour extraire les lignes, d’un fichier séparément les unes des autres, on peut utiliser l’une des methodes suivantes :
7.3.1. la méthode readline(), ne lit qu’une seule ligne à la fois (en incluant le caractère de fin de ligne) :
f = open(„‟nf‟‟,‟r')
lg = f.readline()
Et pour parcourir l’ensemble des lignes du fichier il faut utiliser une boucle permettant la lecture du début du fichier
jusqu’à sa fin.
7.3.2. la méthode readlines(), transfère toutes les lignes du fichier dans une liste de chaînes :
Liste = f.readlines()
print(Liste) [„ligne 1\n', „ligne 2\n„,…]
f.close()
Remarques:
- Nombre de ligne du fichier est donc déterminé par la longueur de la liste(len(liste)) ;
- L’accès à une ligne du fichier se fera donc par liste[i] avec 0 <= i < len(liste)
- readline() est une méthode qui renvoie une chaîne de caractères, alors que la méthode readlines() renvoie une
liste.
16
CPGE Informatique MPSI / 1TSI /PCSI
Lydex – Ben guerir Programmation Mr L. BOUHOU
Chap VIII
Les Exceptions
8.1. Présentation
Une exception est un mécanisme d’interruption du programme utilisé pour signaler que quelque chose d’anormal est
en train de se produire.
On les rencontre dans de nombreux cas, mais souvent, c’est dans le cadre d’erreurs.
Par exemple, Python va déclencher une erreur pendant la 3eme itération de for de l'exemple ci-dessous qui affiche
une série des inverses de quelques nombres à virgule flottante suivant :
nombres = [0.3333, 2.5, 0, 10]
for x in nombres:
print(„‟ x = „‟,x,‟‟ et l‟inverse de x est (1/x) = „‟,1.0/x)
Apres exécution:
x = 0.3333 et inverse de x est (1/x) = 3.0003000300030003
x = 2.5 et inverse de x est (1/x) = 0.4
Traceback (most recent call last):
File "<tmp 1>", line 3, in <module>
print( "x = ",x," et inverse de x est (1/x) = ", 1.0 / x)
ZeroDivisionError: float division by zero
La dernière ligne du message d'erreur indique ce qui s'est passé. Les exceptions peuvent être de plusieurs types, le
type est écrit dans le message.
Dans l'exemple, le type est ZeroDivisionError (erreur de division par zéro).
On peut rencontrer dans d’autre situation d’autres types d’erreur exemple NameError (erreur de nom), TypeError
(erreur de type), etc.
8.2. Attraper une exception
On peut détecter une exception, et réagir, à notre façon, quand une erreur survient, à l’aide de l’instruction try/except.
Il est donc possible d'écrire l’exemple précèdent d’une manière à afficher un message personnel lors la détection
d’une erreur sans laisser le type d’erreur se déclencher.
nombres = [0.3333, 2.5, 0, 10]
try:
for x in nombres:
print("x = ",x,end="\t")
print(" et inverse de x est (1/x) = ", 1.0 / x)
except:
print("Attention, Erreur!")
Apres exécution:
x = 0.3333 et inverse de x est (1/x) = 3.0003000300030003
x = 2.5 et inverse de x est (1/x) = 0.4
x = 0 Attention, Erreur!
L'instruction try fonctionne ainsi:
- D'abord, la clause d'essai (clause try: les instructions entre les mots-clés try et except) est exécutée.
- S'il ne se produit pas d'exception, la clause d'exception (clause except) est ignorée, et l'exécution du try est
terminée.
17
CPGE Informatique MPSI / 1TSI /PCSI
Lydex – Ben guerir Programmation Mr L. BOUHOU
- Si une exception se produit à un moment de l'exécution de la clause d'essai, le reste de la clause try est
ignoré. Puis si son type correspond à l'exception donnée après le mot-clé except, la clause except est exécutée,
puis l'exécution reprend après l'instruction try.
- Si une exception se produit qui ne correspond pas à l'exception donnée dans la clause except, elle est
renvoyée aux instructions try extérieures; s'il n'y a pas de prise en charge, il s'agit d'une exception non gérée et
l'exécution est arrêtée avec un message, comme vu précédemment.
Dans l’exemple précèdent aucun type d’erreur à détecter n’a été signalé devant le mot « except ». Mais si on souhaite
spécifier le type d’erreur, on indiquera le nom du type d’erreur comme dans l’exemple suivant:
nombres = [0.3333, 2.5, 0, 10]
try:
for x in nombres:
print("x = ",x,end="\t")
print(" et inverse de x est (1/x) = ", 1.0 / x)
except ZeroDivisionError:
print("Attention, division par zéro impossible!")
Apres exécution:
x = 0.3333 et inverse de x est (1/x) = 3.0003000300030003
x = 2.5 et inverse de x est (1/x) = 0.4
x = 0 Attention, division par zéro impossible
Ce pendant si un autre type d’erreur survient, il ne sera pas gérer par le message d’erreur(correspondant au type
« ZeroDivisionError »).
nombres = [0.3333, 2.5, „‟7‟‟, 10]
try:
for x in nombres:
print("x = ",x,end="\t")
print(" et inverse de x est (1/x) = ", 1.0 / x)
except ZeroDivisionError:
print("Attention, division par zéro impossible!")
Apres exécution:
x = 0.3333 et inverse de x est (1/x) = 3.0003000300030003
x = 2.5 et inverse de x est (1/x) = 0.4
Traceback (most recent call last):
File "<tmp 1>", line 5, in <module>
print(" et inverse de x est (1/x) = ", 1.0 / x)
TypeError: unsupported operand type(s) for /: 'float' and 'str„
On peut donc gérer plusieurs exceptions :
Def essai(L):
try:
for i in range(len(L)):
print("x = ",L[i],end="\t")
print(" et inverse de x est (1/x) = ", 1.0 / L[i])
except ZeroDivisionError:
18
CPGE Informatique MPSI / 1TSI /PCSI
Lydex – Ben guerir Programmation Mr L. BOUHOU
print("Attention, division par zéro impossible")
except TypeError:
print("Attention, Type de données non compatible")
except IndexError:
print("Attention, indexation hors limite")
except NameError:
print("Attention, variable non definit")
8.3. Finally et else
try/except peut être complété par deux autres mots clés : finally et else.
else: est le bloc exécuté si aucune exception n’est levée.
finally: est un bloc qui est exécuté après que tous les autres blocs aient été exécutés, peu importe qu’il y ait eu une
exception ou non.
Exemple :
nombres = [0.3333, 2.5, 8, 10]
try:
for i in range(len(nombres)):
print("x = ",nombres[i],end="\t")
print(" et inverse de x est (1/x) = ", 1.0 / nombres[i])
except ZeroDivisionError:
print("Attention, division par zéro impossible")
except TypeError:
print("Attention, Type de données non compatible")
except IndexError:
print("Attention, indexation hors limite")
except NameError:
print("Attention, variable non définit")
else:
print("Aucune erreur n a été détectée")
finally:
print("exécution terminée; fin programme")
19
CPGE Informatique MPSI / 1TSI /PCSI
Lydex – Ben guerir Programmation Mr L. BOUHOU
Chap IX
Les Fichiers de données
9.1. Création d’1 fichier de donnée:
Le module pickle est utilisé pour enregistrer des objets Python dans des fichiers et les recharger ensuite.
Etape 1: importer le module « pickle » import pickle
Etape 2:ouvrir un fichier de donnée pour écriture f =open('NomFich', 'wb')
Etape 3:créer un enregistrement sous forme d’une liste L=[Val1,Val2,…,Valn]
Etape 4:Ajouter l’element L au fichier ouvert pickle.dump(L,f)
Etape 5:fermer le fichier f.close()
Syntaxe
import pickle
def creer(NomFich):
f =open(NomFich, 'wb')
NB= int(input(“Nombre d‟enregistrement souhaité ajoutés :”))
for i in range(NB):
L=[]
print(“Entrez les Données de l‟Enreg ",i+1," : ")
d1=input(„‟Donnée 1:”) #tenant compte du type
L.append(d1)
d2=input(“Donnée 2 : ")
L.append(d2)
....
dn=input(“Donné n : "))
L.append(dn)
pickle.dump(L,f)
f.close()
Exemple
Fonction creer() qui laisse passer, comme parametre, un nom de fichier afin de creer un fichier de données sur les
notes de n Etudiants. On enregitrera, dans ce fichier, pour chaque etudiant son numéro d’inscription(entier), son
nom(text), sa note de l’examen Ecrit(reel), celle de l’examen Oral(reel) et celle de l’examen TP(reel).
import pickle
def creer(NomF):
f =open(NomF, 'wb')
NB=int(input("donner le nombre d étudiant :"))
for i in range(0,NB):
L=[]
print("numéro inscription de l'étudiant ",i+1," : ")
numIns=input()
L.append(numIns)
nom=input("nom : ")
L.append(nom)
NE=float(input("note Ecrit : "))
20
CPGE Informatique MPSI / 1TSI /PCSI
Lydex – Ben guerir Programmation Mr L. BOUHOU
L.append(NE)
NO=float(input("note oral : "))
L.append(NO)
NTP=float(input("note TP : "))
L.append(NTP)
pickle.dump(L,f)
f.close()
9.2. Lecture d’1 fichier de donnée:
Etape 1: importer le module « pickle » si ce n’est déjà fait import pickle
Etape 2:ouvrir un fichier de donnée pour lecture f =open('donnees_test2', ‘rb')
Etape 3: lecture individuel de chaque enregistrement L = pickle.load(f)
Etape 4: fermer le fichier f.close()
Syntaxe
def lecture(NomFichier):
f = open(NomFichier, 'rb')
while 1:
try:
L = pickle.load(f)
« Traitement en fonction de L[0], L[1], …»
« puis Affichage ou valeur de retour »
except EOFError:
print(« message indiquant la fin »)
break
f.close()
Exemple
Fonction lecture() qui laisse passer, comme paramètre, le nom de fichier crée lors du paragraphe précédent, afin de
récupérer les données de ce fichier dont le but d’afficher, pour chaque étudiant son numéro d’inscription, son nom et
la moyenne de ses trois notes(note de l’examen Ecrit, celle de l’examen Oral et celle de l’examen TP) et d’afficher la
décision du jury(Admis/Non Admis).
def lecture(NomF):
f = open(NomF, 'rb')
print("num Insc \t\t Nom \t\t Moyenne \t\t Décision Jury")
while 1:
try:
L = pickle.load(f)
num=L[0]
nom=L[1]
NE=L[2]
NO=L[3]
NTP=L[4]
M=(NE+NO+NTP)/3
if M<10:Decision="Non Admis"
21
CPGE Informatique MPSI / 1TSI /PCSI
Lydex – Ben guerir Programmation Mr L. BOUHOU
else:Decision="Admis"
print(num,"\t\t\t\t\t\t",nom,"\t\t%.2f"%M,"\t\t\t",Decision) except EOFError:
print("fin ")
break
f.close()
Chap X
Les dictionnaires et Tuples
10.1. Dictionnaires
Les dictionnaires se révèlent très pratiques lorsque vous devez manipuler des structures complexes à décrire et que
les listes présentent leurs limites.
Les dictionnaires sont des collections non ordonnées d'objets, c-à-d qu'il n'y a pas de notion d'ordre. On accède aux
valeurs d'un dictionnaire par des clés. Regardez l'exemple suivant :
ani1 = {}
ani1['nom'] = 'girafe'
ani1['taille'] = 5.0
ani1['poids'] = 1100
ani1 {'nom': 'girafe', 'poids': 1100, 'taille': 5.0}
ani1['taille'] 5.0
22
CPGE Informatique MPSI / 1TSI /PCSI
Lydex – Ben guerir Programmation Mr L. BOUHOU
10.2. Tuples
Les tuples correspondent aux listes à la différence qu'ils sont non modifiables. Pratiquement, ils utilisent les
parenthèses au lieu des crochets :
X= (1,2,3)
X (1, 2, 3)
X[2] 3
X[0:2] (1, 2)
X[2] = 15 erreure!!
L'affectation et l'indiçage fonctionne comme avec les listes, mais si l'on essaie de modifier un des éléments du tuple,
Python renvoie un message d'erreur. Si vous voulez ajouter un élément (ou le modifier), vous devez créer un autre
tuple :
x = (1,2,3)
x + (2,) (1, 2, 3, 2)
Remarque : pour utiliser un tuple d'un seul élément, vous devez utiliser une syntaxe avec une virgule (élément,), ceci
pour éviter une ambiguïté avec une simple expression.
Autre particularité des tuples, il est possible d'en créer de nouveaux sans les parenthèses, dès lors que ceci ne pose
pas d'ambiguïté avec une autre expression :
x = (1,2,3)
X (1, 2, 3)
ou
x = 1,2,3
X (1, 2, 3)
23
CPGE Informatique MPSI / 1TSI /PCSI
Lydex – Ben guerir Programmation Mr L. BOUHOU
Enfin, on peut utiliser la fonction tuple(sequence) qui fonctionne exactement comme la fonction list, c-à-d qu'elle
prend en argument un objet séquentiel et renvoie le tuple correspondant :
range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
tuple(range(10)) (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
Remarque : les listes, dictionnaires, tuples sont des objets qui peuvent contenir des collections d'autres objets. On
peut donc construire des listes qui contiennent des dictionnaires, des tuples ou d'autres listes, mais aussi des
dictionnaires contenant des tuples, des listes, etc.
Chap XI
Ingénierie Numérique
11.1. Zéro d'une fonction
11.1.1. Méthode dichotomique:
Pour plus de détail sur la méthode dichotomie d’une manière générale voir TD présenté sur ce sujet.
Dans la méthode dichotomique pour la recherche du zéro d’une fonction sur un intervalle [a,b] , on procède
successivement en calculant f(a), f(b) et f((a+b)/2) et en regardant le signe de ces trois expressions.
- Si f(a) * f((a+b)/2) <0 , alors il y a un zéro dans l'intervalle [a , (a+b)/2]
- sinon si f((a+b)/2) * f(b) < 0 alors il y a un zéro dans l'intervalle [(a+b)/2, b]
Le plus souvent on ne pourra pas trouver une valeur exacte seulement une valeur approchée.
Dans l'algorithme par dichotomie on s'arrête au bout de n étapes afin d'obtenir une précision ε telle que (b-a)/2n <= ε
Soit n>= (log(b-a) – log(ε))/ log(2)
import math
def g(x):
return x**(1/2) * math.cos(x)
def dichotomie(a, b, f, eps=1e-10):
global v
24
CPGE Informatique MPSI / 1TSI /PCSI
Lydex – Ben guerir Programmation Mr L. BOUHOU
v=1
if(fabs(a - b) <= eps): return (a+b)/2.0
else:
m = (a+b)/2
if f(a) * f(m) <= 0: return dichotomie(a, m, f, eps)
elif f(m) * f(b) <= 0:return dichotomie(m,b, f, eps)
else:v=0
x=1
y=2
R=dichotomie(x, y, g)
if v==1:
print("Valeur du zéro de la fonction f sur [%s,%s] :%s" %(x, y, R))
else:print("Pas de zéro possible pour cet intervalle")
11.1.2. Méthode de Newton
La méthode de Newton appelée également méthode de Newton-Raphson a pour but de réaliser l'approximation d'une
fonction affine g d'une fonction f différentiable en un point a.
Principe : approximation d'une fonction en se basant sur le développement de Taylor au premier ordre.
- On choisit un point de départ x0 proche de la solution recherchée.
- On fait alors une approximation grossière en la considérant égale à sa tangente f(x) ~ f(x0) + f ’ (x0) * (x-x0).
- On détermine alors le point d'intersection avec l'axe des abscisses en résolvant l'équation :f(x0) + f ’ (x0) * (x-x0)=0
- On obtient alors le point x1. Et on réitère le processus à partir de ce point.
- On construit par récurrence la suite : xn+1= xn - (f(xn)/f’(xn))
Méthode de Newton
import math
def newton(f, df, xi, h , n):
if(n == 0): return xi
else:
return newton(f, df, xi - f(xi)/df(f,xi,h), h, n-1)
def f(x):
return x-math.log(x)-3 # f(x)= x – log(x) – 3
def df (f,x, h):
25
CPGE Informatique MPSI / 1TSI /PCSI
Lydex – Ben guerir Programmation Mr L. BOUHOU
return (f(x+h)-f(x-h)) / (2.0*h)
def verifier() :
x0 = 2
y0=f(x0)
h=0.0001
n=10
print("Abcisse du zéro (méthode Newton :", newton(f, df, x0, h, n))
verifier() Abcisse du zéro (méthode Newton : 4.505241495792883
26
CPGE Informatique MPSI / 1TSI /PCSI
Lydex – Ben guerir Programmation Mr L. BOUHOU
Une implémentation de la méthode des rectangles pour calculer ∫ ( ) en subdivisant l’intervalle [a,b] en n
intervalles est proposée ci-après. En voici le code Python.
def rectangles (f,a,b,n) : #Méthode des rectangles
S=0
for i in range (0,n):
xi=a+(b-a)*i/n
xj=a+(b-a)*(i+1)/n
S+=f((xi+xj)/2.0)*(xj-xi)
return S
on peut montrer que :
( ) ( ) ( )
∫ ( ) ∑ ( )
par conséquence, notre fonction rectangles() peut s’écrire de la façon suivante :
La méthode des trapèzes consiste à approximer la fonction f par une fonction continue affine par morceaux. Ceux-ci
coïncident avec la fonction f au point de la subdivision (voir figure 9.2). En notant ak = a+k* les points de la
( ) ( ( ) ( ))
subdivision du segment [a,b], l’aire de chaque trapèze est égale à , c'est-à-dire, en faisant la
somme de ces trapèzes on aura :
27
CPGE Informatique MPSI / 1TSI /PCSI
Lydex – Ben guerir Programmation Mr L. BOUHOU
( ) ( )
∫ ( ) ( ∑ ( ))
12.5. Numpy.linalg
Résolution des systèmes linéaire AX=B en utilisant « det » et « solve » de linalg
syntaxe: B= np.array([[v1],
import numpy as np [v2],
A= np.array([[a1,a2,…,an], …
[b1,b2,…,bn], [vm]],type)
… Determinant=np.linlag.det(A)
[m1,m2,…,mn]],type) If Determinant != 0:
Solution=np.linalg.solve(A,B)
chap XIII
Les Classes
13.1. Présentation
Les classes consiste en effet à regrouper dans un même ensemble (l'objet) à la fois un certain nombre de données (ce
sont les attributs d'instance) et les algorithmes destinés à effectuer divers traitements sur ces données (ce sont les
méthodes, c'est-à-dire des fonctions encapsulées).
Objet = [ attributs + méthodes ]
Le premier paramètre utilisé par une méthode doit toujours être une référence d'instance. Vous pourriez en principe
utiliser un nom de variable quelconque pour ce paramètre, mais il est vivement conseillé de respecter la convention
qui consiste à toujours lui donner le nom self. Le paramètre self désigne donc l'instance à laquelle la méthode sera
30
CPGE Informatique MPSI / 1TSI /PCSI
Lydex – Ben guerir Programmation Mr L. BOUHOU
associée, dans les instructions faisant partie de la définition. (De ce fait, la définition d'une méthode comporte
toujours au moins un paramètre, alors que la définition d'une fonction peut n'en comporter aucun).
13.2. La méthode « constructeur »
Une méthode « constructeur » est une méthode qui est exécutée automatiquement lorsque l'on instancie un nouvel
objet à partir de la classe. On peut y placer tout ce qui semble nécessaire pour initialiser automatiquement l'objet que
l'on crée. Sous Python, la méthode constructeur doit obligatoirement s'appeler __init__ (deux caractères « souligné »
le mot init, puis encore deux caractères « souligné »).
Voyons comment cela se passe en pratique :
Syntaxe generale :
Declaration:
class NomClasse:
def __init__(self,Attr1,Attr2,…,Attrn):
self.Attr1 =Attr1
self.Attr2 =Attr2
…
self.Attrn =Attrn
def Methode1(self,Parametre1,…, Parametrem):
Traitement en fct des parametre
return/Affichage resultat
def ….
def Methoden(self,Parametre1,…, Parametrem):
Traitement en fct des parametre
return/Affichage resultat
Instancier une classe :
NomVariableClasse = NomClasse(liste des attributs)
Exploitation des fonctions de la classe :
NomVariable = NomVariableClasse.NomMethodei(liste valeur des parametres)
Exemples :voir TP
31