Vous êtes sur la page 1sur 12

Cours Python 2.

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.

2 Saisir, exécuter, observer


On peut « communiquer » avec l’interpréteur Python de deux manières di↵érentes.

2.1 Le mode interactif direct


On tape des instructions dans le « shell » et on valide pour obtenir la réponse :

1 >>> <Ma commande>


2 <Sa réponse !>
3 >>> <--- il attend une nouvelle commande

Quelques exemples :

1 >>> 42**42
2 15013093754529657235677197216425445781404797056873
3 8777235893533016064
4 >>> id(sqrt(2))

6 >>> import math ; math.sqrt(12) # on doit inclure l’instruction "


import math" pour pouvoir faire appel aux fonctions mathématiques
qu’il faut "pointer" avec le préfixe math

1
Remarque 1
On peut aussi utiliser l’instruction from math import * pour importer toutes les fonctions mathéma-
tiques disponibles.

2.2 Le mode scripting : « Programming is Hard, Let’s Go Scripting... »


On saisit les instructions dans un fichier et on exécute tout ou une partie des ces instructions. Dans le
« shell » on voit les sorties et les commentaires de l’interprèteur. On l’utilise pour des programmes plus
longs et que l’on souhaite enregistrer, le plus souvent.

3 Des classes, des objets à définir et à manipuler


Le langage Python est orienté objets. Les expressions que l’on utilise désignent des objets qui
appartiennent à des classes, c’est à dire des familles nommées.
Certaines de ces classes sont définies par défaut, d’autres dans des modules qu’il faut charger.
Les utilisateurs peuvent aussi définir leurs propres classes et aussi leurs modules.
Étudions quelques classes des plus utilisées.

3.1 Les types ou classes de nombres


Il s’agit d’objets prédéfinis et non modifiables. Ils sont regroupés en plusieurs classes.

3.1.1 Des entiers, la classe int


Cette classe représente les entiers relatifs. En Python 3, il n’y a quasiment pas de limite à la
représentation des entiers comme vous avez pu le voir dans le TD1.
Les principales opérations sur les entiers :

+ : addition - : soustraction * : multiplication ** : exponentiation


/ : division // : division entière % : modulo abs : valeur absolue

1 >>> type(-12) # la fonction type retourne le type i.e. la classe d’


un objet

3 >>> type(12/5)==’int’

5 >>> 5//3 ;type(5//3)) # // division entière

7 >>>

3.1.2 Les booléens, la classe bool


Cette classe contient 2 objets, True (1) et False (0).
C’est une sous classe de la classe int. Donc tout les opérateurs que l’on a vu précédemment peuvent
s’utiliser sur les booléens.

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

3 >>> True or False

5 >>> not(True+True)

3.1.3 Des décimaux, la classe float


Un float est noté avec un point décimal (jamais avec une virgule ) ou en notation exponentielle. Il
représente une nombre décimal compris entre ≠1, 7 ◊ 10308 et 1, 7 ◊ 10308 .
Les flottants supportent les mêmes opérations que les entiers.

1 >>> 3.14 ;123e-12

4 >>> type(-12/5)

6 >>> b=42**4.2
7 >>> type(b)

9 >>> 5.1.is_integer() #il s’agit d’une méthode de l’objet : objet.


méthode

Remarque 2 (Les limites de la représentation des réels en virgule flottante)

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

3.1.4 Des nombres complexes, la classe complex


La classe complex permet de travailler avec des nombres complexes .
Ces objets supportent les mêmes opérations que les entiers, sauf la division entière.

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.

... et les variables ou références d’objets


Pour accéder plus simplement aux objets, Python utilise la notion de variable ou de référence
d’objet. Pour définir une variable on utilise l’a↵ectation :

1 <la variable> = <un identificateur d’objet>

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

3 >>> id(a) ;id(2)

5 >>> b=a ;b=3 ;

7 >>> id(a) ;id(b) ;id(3) ;id(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.

3.2 Les chaı̂nes de caractères, la classe str


Les objets de type str sont identifiés par une suite finie de caractères délimitée par des apostrophes
ou des guillemets. Ces objets ne sont pas modifiables.
Les caractères de l’objet str sont numérotés à partir de 0 de gauche à droite dans l’ordre croissant et
à partir de ≠1 de droite à gauche dans l’ordre décroissant.
Saisissez les lignes suivantes dans un fichier de l’éditeur.

4
1 a=’MPSI’ ’3’ ; print(a)

3 print(type(a))

5 b=’Alors là je dis "OUI" !’

7 c=’et je redis :\n "OUI" !’

9 print(b,c)

11 a=’Lycée ’+’THIERS’

13 print(a[7 :]) # 1er caractère inclus : 1er caractère exclus

15 print(a[-4 :-1])

17 print(len(’MPSI 3’),’MPSI 3’[ :],’MPSI 3’>’MPSI 2’)

3.3 Des séquences : listes et tuples


3.3.1 La classe list
L’un des types les plus utilisés en Python est la liste d’objets. Les listes peuvent comporter des objets
de types di↵érents. On définit une liste en énumérant, entre deux crochets, ses éléments séparés par des
virgules. Les listes sont des objets modifiables !
Saisissez les lignes suivantes dans une cellule d’un fichier de l’éditeur.

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.

3.3.2 La classe tuple


Elle est très similaire à la classe liste à ceci près que ses éléments ne sont pas modifiables. Pour définir
un tuple on remplace les crochets des listes par des parenthèses.
Tester :

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,)

11 print(a, b,id (a),id(b))

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.

1 a=float(input(’a=’)) ; b=float(input(’b=’)) ; c=float(input(’c=’))

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 :

1 for <une référence d’objet> in <un objet itérable> :


2 <un bloc d’instruction>

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 :

1 for i in range(1,10,2) : # valeur initiale, 1ère valeur exclue , pas


2 print(i%2)

4 for i in range(10,1,-2) :
5 print(i%2)

8 for a in ’une boucle’ :


9 print(a)

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)

4.3 La boucle while


Elle permet d’e↵ectuer des instructions tant q’une condition est réalisée, plus généralement, tant
qu’une expression est non nulle.

7
1 while <un objet> :
2 <un bloc d’instruction>

Essayer les boucles suivantes :

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.

4.4 Quelques exercices


1. Ecrire un script demandant à l’utilisateur d’entrer des entiers a et b, puis affichant le plus grand des
deux.
2. Ecrire un script demandant à l’utilisateur d’entrer un nombre décimal x et affichant la distance de x à
Z, c’est à dire |x ≠ n|, où n est l’entier le plus proche de x.
3. Ecrire un script demandant à l’utilisateur d’entrer des réels a, b et c et affichant le nombre de solutions
réelles de l’équation ax2 + bx + c = 0.
4. Ecrire un script qui affiche la liste sans répétition des caractères d’une chaı̂ne saisie au clavier par
l’utilisateur.
5. Ecrire un script demandant inlassablement à l’utilisateur d’entrer un entier, jusqu’à ce que celui-ci soit
pair.
6. Ecrire un script qui vérifie si une chaı̂ne de caractères, saisie au clavier, comporte deux caractères
consécutifs identiques.
7. Ecrire un script demandant à l’utilisateur d’entrer un entier strictement positif n, et affichant les
diviseurs de n à raison d’un diviseur par ligne.
8. Ecrire un petit script que joue à “c’est plus ! c’est moins !” : L’ordinateur choisit secrètement un entier
au hasard entre 0 et 50000 et l’utilisateur doit le trouver en un minimum de coups. A chaque réponse
proposée, un message s’affiche, qui indique si le nombre à trouver est plus grand, plus petit ou encore si
c’est le bon. A la fin, le nombre de coups est affiché.

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.

5.1 La définition et l’appel


Une fonction est un ensemble d’instructions regroupées sous un nom et que l’on exécute lorsqu’on en a
besoin. Voici la définition générale d’une fonction en Python :

1 def <nom de la fonction><tuple de références d’objets> :


2 <Bloc d’instructions>

Le bloc d’instructions est obligatoire.


Voici un exemple. Saisir les lignes suivantes dans l’éditeur et les exécuter.

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.

5.2 Fonction avec retour : return !


Modifions la fonction précédente pour que, si x et y sont deux objets de type nombre, Distance(x,y)
soit un objet du même type que x et y, précisément l’objet abs(x-y). Recopier les lignes suivantes :

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

Saisir l’instruction suivante :

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 ?

5.4 Les variables locales


Toutes les variables qui sont définies pour la première fois dans une focntion n’existent que pendant
l’exécution de la fonction. On dit que ces variables sont locales, par opposition aux autres variables, dites

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.

5.5 Utiliser un paramètre tuple de manière transparente


Ici, encore une fois, on va constater que le langage Python permet d’écrire des scripts élégants et plus
universels que dans d’autres langages.
Voyons comment. Ecrivons une fonction plusProche0(k,t) qui affiche la valeur du tuple de nombres
la plus proche de k. Recopier cette focntion dans l’éditeur

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)

puis dans le shell,

1 >>> plusProche0(0,(-1,2,-3,4))

Pour ce type de fonction, Python propose une autre syntaxe :

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)

Cela évite les doubles parenthèses :

1 >>> plusProche0(0,-1,2,-3,4)
2 >>> plusProche0(1,-1,2,1.5,3,2.1)

Le tuple doit apparaı̂tre en dernier dans la suite des paramètres.

6 La « compréhension » des listes


La définition des listes en compréhension permet de créer des listes correspondant à contraintes avec
peu d’instructions. Deux syntaxe possibles :

1 [ <objet> for <objet> in <iterable>]

3 [ <objet> for <objet> in <iterable> if <objet>]

11
Essayer :

1 >>> [x+1 for x in range(10)]


2 >>> [x for x in range(10) if x%2]
3 >>> n=10 ; sum([ 1/k for k in range(n,2n+1)]

On peut même utiliser plusieurs boucles.

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

Vous aimerez peut-être aussi