Académique Documents
Professionnel Documents
Culture Documents
2013/2014
1 Introduction
Le langage Python est un langage développé à partir de 1990 par Guido van Rossum. Il doit son nom
aux Monty Python dont Van Rossum était fan.
C’est un langage multi-paradigme (impératif, objet, fonctionnel) et doté d’un typage dynamique fort,
d’une gestion automatique de la mémoire par ramasse-miettes et d’un système de gestion d’exceptions.
Il est sous licence libre.
Il a été conçu pour être très lisible, et notamment l’indentation permet de délimiter les blocs, au lieu
d’utiliser des accolades comme en C ou Java.
Pour utiliser un langage de programmation confortablement, on a besoin de ce que l’on appelle un
environnement de développement. Nous utiliserons , Pyzo. Il permet d’éditer des programmes, de les
sauvegarder, de les exécuter, il est multi-plateforme et gratuit.
Quelques exemples :
1 >>> 42**42
2 15013093754529657235677197216425445781404797056873
3 8777235893533016064
4 >>> id(sqrt(2))
1
Remarque 1
On peut aussi utiliser l’instruction from math import * pour importer toutes les fonctions mathéma-
tiques disponibles.
3 >>> type(12/5)==’int’
7 >>>
1 >>> 2==3
3 >>> True+False
Les opérateurs de cette classe sont les suivants : and (et), or (ou) et not (non).
2
1 >>> True and False
5 >>> not(True+True)
4 >>> type(-12/5)
6 >>> b=42**4.2
7 >>> type(b)
1 >>> 0.1+0.2-0.3
Ce problème vient de la représentation des réels en virgule flottante. On a aussi des erreurs du type :
1 >>> 1e10+1e-10==1e10
1 >>> (2+2j)*1j
3 >>> (-2+2j)/(3-2j)
5 >>> (-2-1.5j).real
7 >>> ((1+2j)**2).conjugate()
3
Avant d’aller plus loin : attributs et méthodes d’une classe ...
L’une des spécificités de la programmation orientée objets, c’est l’encapsulation. C’est à dire que
lorsque on définit une classe d’objets, on définit les attributs et les méthodes de la classe.
Par exemple, un objet de type complexe possède les attributs real et imag. Ces attributs sont de
type float.
Un objet possède aussi des méthodes qui e↵ectuent des actions en utilisant cet objet. Par exemple la
méthode conjugate qui s’utilise comme dans l’exemple précédent.
Mais on a vu aussi que l’on peut appliquer des fonctions aux objets. Celles ci ne font pas partie de la
définition de la classe.
La variable n’est pas l’objet mais elle référence l’objet en contenant l’identificateur de l’objet. Tant
qu’une nouvelle a↵ectation n’est pas réalisée, elle référence toujours le même objet.
Essayer ceci :
1 >>> a=2
Dans les définitions et exemples de ce document le mot « objet » pourra parfois être
remplacé « référence d’objet ». On vérifiera que c’est possible.
4
1 a=’MPSI’ ’3’ ; print(a)
3 print(type(a))
9 print(b,c)
11 a=’Lycée ’+’THIERS’
15 print(a[-4 :-1])
1 a=[1, ’A’,[2]]
3 print(type(a))
5 print(type(a[2]))
7 b=a ; print(b,id(b))
9 a.append(True)
11 print(a, b,id(b))
On accède aux éléments d’une liste comme aux caractères d’une chaine et on coupe les listes avec la
même syntaxe que celle utilisée pour les chaı̂nes.
5
1 a=(1, ’A’,[2])
3 print(type(a))
5 print(type(a[2]))
7 b=a ; print(b,len(b),id(b))
9 a=a+(True,)
Les éléments d’un tuple sont indexés comme les éléments d’une liste et on peut sélectionner une partie
d’un tuple avec la même syntaxe que celle utilisée pour les listes.
4 Les instructions
4.1 Les instructions conditionnelles
Pour réaliser une action lorsque une condition est réalisée et, sinon, ne rien faire sinon ou faire une
autre action, il existe une instruction. En fait plusieurs instructions. Voici les formes générales de ces
instructions :
1 if <un objet> :
2 <un bloc d’instructions>
1 if <un objet> :
2 <un bloc d’instructions>
3 else :
4 <un bloc d’instructions>
1 if <un objet> :
2 <un bloc d’instructions>
3 elif <un objet> :
4 <un bloc d’instructions>
5 else :
6 <un bloc d’instructions>
On peut enchaı̂ner plusieurs elif mais il ne sont suivis que d’un seul else.
Compléter le script suivant pour qu’il affiche le nombre de solutions réelles de l’équation ax2 + bx + c = 0.
3 if b*b-4*a*c > 0 :
6
4.2 La boucle for
Elle permet de répéter des actions similaires un nombre de fois déterminé à l’avance. Voici sa forme
générale :
Remarque 3
L’expression : <une référence d’objet> in <un objet itérable>, est un booléen qui peut
être utilisée en dehors d’une boucle for pour savoir si l’objet apparaı̂t dans l’itérable.
On a déjà étudié trois classes d’objets itérables : les chaı̂nes de caractères, les listes et les tuples.
Une quatrième classe d’itérables, la classe range est très utile lorsqu’on écrit des boucles.
On verra qu’il en existe d’autres.
Essayer :
4 for i in range(10,1,-2) :
5 print(i%2)
11 a=[1,3,5,7,11]
12 for k in a :
13 print(a*a)
14 print(a)
16 a=(1,2,3,4)
17 for k in a :
18 a=a+(k+1,)
19 print(a)
21 a=[1,2,3,4]
22 for k in a :
23 a.append(k+1)
24 if k==10 :
25 break
26 print(a)
7
1 while <un objet> :
2 <un bloc d’instruction>
2 n=int(input(’n=’))
3 k=1
4 while (k*k+1)%n :
5 k+=1
6 if k==n :
7 break
8 print(k)
11 a=[1,’ab’, 3.1]
12 while a :
13 print(a.pop(0))
Remarque 4
L’instruction break permet de sortir de la boucle sans attendre la fin de celle-ci. L’instruction continue
permet de passer à l’élément suivant de l’étirable en ignorant les instructions situées après celle-ci dans le
bloc de la boucle.
On utilise la méthode pop pour supprimer le premier élément de cette liste tout en retournant celui-ci.
8
5 Premier contact avec les fonctions
Bien entendu, on souhaite pouvoir définir des objets Python pour modéliser, en particulier, des suites,
des fonctions mathématiques. Voyons ce que Python nous propose.
1 def afficheDistance(x,y) :
2 print(abs(x-y))
La fonction est alors définie. On peut maintenant l’appeler dans le shell ou dans un script. Essayer :
1 >>> afficheDistance(1+2j,3-3j)
Les fonctions sont aussi des objets. Regardons ce que nous dit la fonction type. Taper les instructions
suivantes dans le shell :
1 >>> type(afficheDistance)
3 >>> type(afficheDistance(2,3))
5 >>> afficheDistance(2,3)==None
Nous allons voir que l’expression d’appel d’une fonction peut être un objet du type que l’on souhaite.
1 d=0
2 def distance(x,y) :
3 return abs(x-y)
5 type(distance(2,3))
6 d=distance(1+2j,3-3j)
7 type(d)
9
Pour que la fonction renvoie une valeur, il faut qu’une instruction du type return <objet> soit
exécutée. Lorsque cette instruction est exécutée, l’exécution de la fonction se termine et l’objet situé après
return est la valeur finale de fonction.
Voici un autre exemple plus complexe :
1 def mediane(x,y,z) :
2 if (x-y)*(x-z)<=0 :
3 return x
4 elif (y-x)*(y-z)<=0 :
5 return y
6 else
7 return z
1 >>> mediane(3,2.5,5)
Les variables qui apparaissent après le nom de la fonction sont appelées paramètres formels de la fonctions.
Les objets utilisés lors de l’appel de la fonction sont appelés paramètres e↵ectifs de la fonction.
Exercice.
n≠1
ÿ
1. Écrire une fonction qui renvoie, si ¸ = [¸0 , ¸1 , ..., ¸n≠1 ] est une liste de nombres, la somme (≠1)k ¸k .
k=0
2. Écrire une fonction qui retourne le produit des éléments d’une liste passée en paramètre .
5.3 Que se passe-t-il lors de l’appel d’une fonction pour les paramètres formels ?
Les variables correspondant aux paramètres formels sont crées et initialisées avec les valeurs des
paramètres e↵ectifs. Les variables crées sont donc nouvelles et donc ne peuvent pas être utilisées pour
modifier des variables globales mêmes si elles font partie des paramètres e↵ectifs.
Voyons un exemple. Saisir le script suivant et observer :
1 (x,y)=(1,2)
3 def deplace(x,y) :
4 if x<y :
5 x=x+1
6 elif x>y :
7 y=y+1
9 print(x,y)
Les variables x et y qui apparaissent dans la fonction sont di↵érentes des précédentes. On modifie donc
des variables locales. Le seul moyen pour récupérer ces valeurs c’est de les renvoyer.
Comment modifier la fonction et le script pour qu’ils a↵ectent les variables x et y ?
10
globales, qui ont été définies en dehors des fonctions.
Seuls les paramètres formels d’une fonction peuvent masquer des variables qui existaient avant l’exécution
de la fonction. Il est bien entendu très maladroit de modifier une variable globale à l’intérieur d’une
fonction.
1 def plusProche0(x,t) :
2 d=abs(t[0])
3 for y in t[1 :]
4 if abs(x-y)<d :
5 d=abs(x-y)
6 print(d)
1 >>> plusProche0(0,(-1,2,-3,4))
1 def plusProche0(x,*t) :
2 d=abs(t[0])
3 for y in t[1 :] :
4 if abs(x-y)<d :
5 d=abs(x-y)
6 print(d)
1 >>> plusProche0(0,-1,2,-3,4)
2 >>> plusProche0(1,-1,2,1.5,3,2.1)
11
Essayer :
1 >>> mot=’Hello’
2 >>> [x+y for x in mot if x !=’H’ for y in mot if y !=x]
7 Exercices
1. Définir en compréhension, la liste des nombres impairs inférieurs à n.
2. Définir en compréhension, la liste des voyelles présentes dans une chaine.
3. Ecrire une fonction dist(x) qui renvoie la distance de x à Z, c’est à dire |x ≠ n|, où n est l’entier le
plus proche de x.
4. Ecrire une fonction racinesTrinome(a,b,c) affichant les solutions réelles de l’équation ax2 + bx + c = 0.
2n
ÿ 1 ÿ 1
5. Écrire une fonction qui retourne . Calculer cette somme pour n = 10. Idem pour Ô .
k=n
k 1Æi<jÆn
i + j
Application numérique : n = 1000.
6. Ecrire une fonction affichant le plus grand élément en valeur absolue d’un tuple.
7. Ecrire une fonction qui supprimer les espaces d’une chaine et retourne la chaı̂ne ainsi obtenue.
8. Étant une liste de nombres réels [x0 , x1 , ..., xn≠1 ] et k œ Nú , on dit que (xi , xi+k ) est une alternance
de signe si xi xi+k < 0 et tous les termes situés entre ces deux termes, s’il y en a, sont nuls. Écrire une
fonction qui retourne le nombre d’alternance de signe de la liste.
9. Ecrire un script qui vérifie si une chaı̂ne de caractères, saisie au clavier, comporte deux caractères
consécutifs identiques.
12