Vous êtes sur la page 1sur 8

Page 1

Chapitre II : Algorithmique et Programmation On peut se servir de Pyzo pour taper des commandes dans l’interpréteur qui sont alors
immédiatement exécutées (voir Figure 6).
Cours 2 : Programmation Python – Initialisation, Traduction
Le symbole >>> correspond au signal d’invite, ou prompt principal, lequel vous indique
Introduction : que Python est prêt à exécuter une commande (que l’utilisateur va saisir). Les lignes non
précédées de ce symbole correspondent à l’affichage d’un résultat. Après avoir saisi
Python est un langage de programmation polyvalent et modulaire, utilisé dans de très chaque instruction, il suffit de taper sur la touche Enter pour que la commande soit
nombreux domaines, scientifiques ou non. C’est pourquoi il existe de nombreuses exécutée (c’est-à-dire interprétée).
distributions de python. Nous utilisons Pyzo, distribution gratuite et open-source livrée
avec un environnement de développement intégré simple à utiliser et avec tous les
modules scientifiques dont nous aurons besoin.

La première chose à faire est de télécharger Pyzo à l’adresse suivante :


http://www.pyzo.org/ et de l’installer. Pyzo est disponible pour Windows, Linux et OSX.
Comme souvent, il est conseillé d’utiliser la dernière version disponible et de vérifier de
temps à autre si une nouvelle version n’est pas proposée au téléchargement.

L’environnement de développement que vous venez d’installer est un ensemble d’outils


Figure 2 : Exécution de commandes dans l’interpréteur
pour programmeurs conçus pour être utilisés au sein d’un éditeur interactif nommé IEP
(Interactive Editor for Python). I. Quelques domaines d'application de Python
L’interface par défaut de l’outil Pyzo est composée de quatre parties (voir Figure 5) : Les domaines d'application naturels de Python incluent entre autres :
l’interpréteur de commandes en ligne (en haut de l’interface à droite), une fenêtre à
gauche pour entrer un programme complet, le sauvegarder et l’exécuter (un onglet par ▪ L'apprentissage de la programmation objet.
programme), un gestionnaire de fichiers (pour par exemple aller ouvrir un programme - ▪ Les scripts d'administration système ou d'analyse de fichiers textuels.
en bas à droite) et au milieu en bas, un schéma de la structure du programme. ▪ Tous les développements liés à l'Internet et en particulier au Web : scripts CGI,
navigateurs Web, moteurs de recherche, agents intelligents, objets distribués...
▪ L'accès aux bases de données (relationnelles).
▪ La réalisation d'interfaces graphiques utilisateurs.
▪ Le calcul scientifique et l'imagerie. Python ne sert alors pas à écrire les
algorithmes, mais à combiner et mettre en œuvre rapidement des librairies de
calcul écrites en langage compilé (C, C++, Fortran, Ada,).
▪ ....

Voici une liste de projets représentatifs basés sur Python :

▪ Zope, un serveur d'application innovant, et CPS, un framework de gestion de


contenu et de travail collaboratif basé sur Zope.
▪ Les programmes d'administration système spécifiques à la distribution Red Hat
Linux.
Figure 1 : Interface Pyzo IEP (Interactive Editor for Python) ▪ Des moteurs de recherche comme Google ou Yahoo!.

Pr. Ouafaa YACOUBI


Page 2

▪ Chandler, le projet de PIM (Personnal Information Manager) de l'Open Source ▪ Les blocs sont délimités par l'indentation : toutes
Applications Foundation. les lignes d'un même bloc doivent être indentées
exactement de la même manière (c'est-à-dire
II. Structure d'un programme Python : décalées vers la droite d'un même nombre
1. Les limites des instructions et des blocs sont définies par la mise en page : d'espaces). Le nombre d'espaces à utiliser pour
l'indentation est quelconque, mais la plupart des
programmeurs utilisent des multiples de 4.
Dans de nombreux langages de programmation, il faut terminer chaque ligne
▪ Notez que le code du bloc le plus externe (bloc 1)
d'instructions par un caractère spécial (souvent le point-virgule). Sous Python, c'est le
ne peut pas lui-même être écarté de la marge de
caractère de « fin de ligne » qui joue ce rôle.
gauche (Il n'est imbriqué dans rien).
Figure 3: Organisation des blocs
On peut également terminer une ligne d'instructions par un commentaire. Un d'instructions
commentaire Python commence toujours par le caractère spécial #. Tout ce qui est inclus
III. Variables en Python :
entre ce caractère et le saut à la ligne suivant est complètement ignoré par le compilateur. 1. Déclaration d’une variable :

La déclaration d’une variable se passe par affectation d’une valeur initiale à la variable.
En définitive, Python oblige à écrire du code lisible, et à prendre de bonnes habitudes
conservables dans d'autres langages, ce qui est fait un langage idéal pour apprendre la En Python comme dans de nombreux autres langages, le symbole « = » est l'opérateur
programmation.
d'affectation. La valeur de la variable peut être un littéral, c'est-à-dire une constante, ou
bien une expression, évaluée avant d'être affectée à la variable.
A part ceux qui servent à l'indentation, en début de ligne, les espaces placés à l'intérieur
des instructions sont ignorés, sauf s'ils font partie d'une chaîne de caractères.
Si la variable affectée n'existe pas, l'ordinateur la crée, sinon il écrase sa valeur. En effet,
il est permis de réaffecter une nouvelle valeur à une même variable, autant de fois qu'on
L'interpréteur Python commence par analyser la première ligne :
• Si celle-ci contient une instruction, alors il l'exécute le souhaite.
• Si l'instruction n'est pas une instruction de contrôle, alors, il passe à la ligne
Il ne faut en aucun cas confondre le symbole égale utilisé sous Python pour réaliser une
suivante, l'analyse et l'exécute
• Si le programme Python arrive à la fin du fichier à exécuter, alors, il sort du affectation avec un symbole d'égalité tel qu'il est compris en mathématique.
programme et en arrête l'exécution. Premièrement, l'égalité est commutative, alors que l'affectation ne l'est pas.
Deuxièmement, l'égalité est permanente, alors que l'affectation peut être remplacée
2. Notion de bloc d'instructions : comme nous venons de le voir.

Un bloc d'instructions est une suite d'instructions qui est alignée sur la même tabulation. Python se prête de faire des affectations collectivement, à l’aide d’:

Sous Python, toutes les instructions composées ont toujours la même structure : une ligne Affectation multiple : Affectation parallèle :
d'en-tête terminée par un double point « : », suivie d'une ou de plusieurs instructions assigner une valeur à plusieurs variables effectuer des affectations parallèles à
indentées sous cette ligne d'en-tête. simultanément : l'aide d'un seul opérateur :
>>> x = y = 7 >>> a, b = 13, 1.25
▪ Les blocs d'instructions sont toujours associés à une ligne d'en-tête contenant >>> x >>> a
une instruction bien spécifique (if, elif, else, while, def, ...) se terminant par un 7 13
double point « : ».
>>> y >>> b
7 1.25

Pr. Ouafaa YACOUBI


Page 3

2. Typage des variables : Type type Type du type des objets (exemple :
type de la valeur renvoyée par la
Python, comme tout langage interprété, est un langage dont le typage est dynamique. fonction type())
Cela signifie que c’est l’ordinateur, et non pas le programmeur, qui se charge de « typer » Objet object Type basique
les variables. En effet, nul besoin de se préoccuper du typage au moment de déclarer une Valeur bool Type de True et de False (renvoyés
variable. Cependant, pour la bonne exécution du programme, il est parfois nécessaire de booléenne par exemple lors de tests ou
modifier en cours de route le type d’une variable. d'opérations booléennes)
Exception exception Message d'erreur
Le typage d’une variable consiste à associer à cette dernière un type de donnée, Fonction fonction Fonction
permettant à l’ordinateur de savoir si celle-ci est un nombre entier, un nombre décimal Module module Module
ou une chaîne de caractères. Le typage permet d’allouer des zones de mémoire de
dimension suffisante pour stocker cette donnée, et éventuellement de vérifier que les 4. La fonction type () :
manipulations programmées sur cette variable (opérations mathématiques, traitement
de texte, etc.) sont cohérentes avec son type. En effet, il n’est pas possible d’additionner La fonction type () prend n’importe quel argument et retourne son type de données.
un nombre entier avec une chaîne de caractères. N’importe lequel : entiers, chaînes, listes, dictionnaires, tuples, fonctions, classes,
modules et même types.
3. Liste des types :
>>> type(17.5)
Type Code du Description <class 'float'>
type >>> type(21)
Entier int Nombre entier optimisé (codage <class 'int'>
sur 32 bits) >>> type('Bonjour')
Entier long long Nombre entier de taille arbitraire <class 'str'>
Types Nombre à virgule float Valeur spécifiée avec un point dans le
numériques flottante programme (exemple : a = 2.0)
IV. Opérateurs et expressions :
Nombre complex Nombre complexe
complexe
On manipule les valeurs et les variables qui les référencent en les combinant avec des
Chaîne de str Chaîne de caractères
opérateurs pour former des expressions.
caractères
N-uplet tuple Tuple de forme (1,"Bonjour", Python évalue chaque expression qu'on lui soumet, aussi compliquée soit-elle, et le
3.14159) de taille fixe.
Types résultat de cette évaluation est toujours lui-même une valeur. À cette valeur, il attribue
Liste list Liste de forme [1, 1.5,’Bonsoir’,'...']
d'objets automatiquement un type, lequel dépend de ce qu'il y a dans l'expression.
Dictionnaire dict Dictionnaire de forme {'Nom' : 1,
itérables
'Msg' : ‘Bonjour’} 1. Les opérateurs de calcul :
Collection set Collection désordonnée d'éléments
uniques Opérateur Description
Fichier file Fichier informatique + Effectue une addition
Autres Rien None Type d'un vide (par exemple, par - Effectue une soustraction
types assignation de la valeur none à une * Effectue une multiplication
d'objets variable) / Effectue une division

Pr. Ouafaa YACOUBI


Page 4

% Effectue le reste d'une division (modulo) 5. Priorité des opérations :


** Effectue une opération d'exposant
// Résultat entier d'une division Lorsqu'il y a plus d'un opérateur dans une expression, l'ordre dans lequel les opérations
doivent être effectuées dépend de règles de priorité. Sous Python, les règles de priorité
2. Les opérateurs de comparaison : sont les mêmes que celles qui vous ont été enseignées au cours de mathématique. Vous
pouvez les mémoriser aisément à l'aide d'un « truc » mnémotechnique, l'acronyme
Opérateur Description
PEMDAS :
== Comparaison d’égalité
!= Comparaison d'une différence • P pour parenthèses : Ce sont elles qui ont la plus haute priorité. Elles vous
> Comparaison de plus grand que permettent donc de « forcer » l'évaluation d'une expression dans l'ordre que
>= Comparaison de plus grand ou égal que
vous voulez.
< Comparaison de plus petit que
Ainsi 2*(3-1) = 4 , et (1+1)**(5-2) = 8.
<= Comparaison de plus petit ou égal que
is, not is x is y vérifie que x et y sont égaux, not is, différents, • E pour exposants : Les exposants sont évalués ensuite, avant les autres
l’opérateur is est différent de l’opérateur ==. opérations.
Le mot-clé is permet de vérifier si deux variables font Ainsi 2**1+1 = 3 (et non 4), et 3*1**10 = 3 (et non 59049 !).
référence à la même liste ou si l’une est une copie de • M et D pour multiplication et division, qui ont la même priorité. Elles sont
l’autre évaluées avant l'addition A et la soustraction S, lesquelles sont donc effectuées
in, not in Appartient, n’appartient pas
en dernier lieu.
Ainsi 2*3-1 = 5 (plutôt que 4), et 2/3-1 = -0.3333... (plutôt que 1.0).
3. Les opérateurs logiques
• Si deux opérateurs ont la même priorité, l'évaluation est effectuée de gauche à
Opérateur Description droite.
not Négation Ainsi dans l'expression 59*100//60, la multiplication est effectuée en premier, et
and Et logique la machine doit donc ensuite effectuer 5900//60, ce qui donne 98. Si la division
or Ou logique était effectuée en premier, le résultat serait 59 (rappelez-vous ici que l'opérateur
// effectue une division entière, et vérifiez en effectuant 59*(100//60)).
4. Les opérateurs de chaine de caractères

Opérateur Description V. Fonctions standards d’entrée/ sortie : input (), print ()


sous-chaine in chaine Indique si une sous-chaine de caractères est contenu dans
une chaine de caractères Afin que l'utilisateur puisse entrer des données dans les variables du programme et
chaine1 + chaine2 Effectue la concaténation de chaine de caractères visualiser les résultats calculés par le programme, le programmeur utilise des fonctions
d'entrée et de sortie.
chaine * n Effectue une répétition de la chaine de caractères n fois
chaine1 == chaine2 Comparaison d’égalité
chaine1 != chaine2 Comparaison d'une différence 1. La fonction input () :
chaine1 > chaine2 Comparaison de plus grand que
chaine1 >= chaine2 Comparaison de plus grand ou égal que La fonction input est une fonction d’entrée. Elle permet de transmettre des données au
chaine1 < chaine2 Comparaison de plus petit que programme :
chaine1 <= chaine2 Comparaison de plus petit ou égal que

Pr. Ouafaa YACOUBI


Page 5

• Le programme affiche un message (sous forme de question ou demande) à Conversion des types :
l'attention de l'utilisateur et attend que l'utilisateur tape sur des touches du
clavier en réponse à cette question. Il existe plusieurs fonctions qui permettent de forcer le type d'une variable en un autre
• L'utilisateur doit terminer sa saisie par la touche “Entrée” pour que le programme type :
continue son exécution. La suite de caractères saisie par l'utilisateur est
généralement affectée à une variable du programme. • int() : permet de modifier une variable en entier.
• La valeur renvoyée par la fonction input () est toujours de type « str », et elle • long() : transforme une valeur en long.
n’accepte qu’un seul paramètre de type « str », le message de la saisie, si • float() : permet la transformation en flottant.
présent. • str() : permet de transformer la plupart des variables d'un autre type en chaînes
de caractère.
>>> Nom = input("Entrez votre nom: ") • repr() : similaire à la fonction str().
Entrez votre nom:Moutawakil • bool: conversion en booléen
>>> a
• unicode() : convertit en Unicode.
'Moutawakil'

2. La fonction print () :
Notez que la fonction input() donne toujours une chaîne de caractères, même si
l’utilisateur tape un entier :
La fonction print () est une fonction de sortie : elle affiche à l'écran un message, le contenu
d'une variable ou la valeur d’une expression.
>>> a=input('Entrer un entier:')
Entrer un entier:12
>>> a + 1 >>> print (' Bonjour ')
Traceback (most recent call last): Bonjour
File "<stdin>", line 1, in <module> >>> a = 5
TypeError: must be str, not int >>>print("le carré de",a,“ est ", a**2)
le carré de 5 est 25

Pour pouvoir traiter une entrée en tant que nombre, il faut pouvoir convertir une chaîne
L'utilisation de la fonction print entraîne un retour chariot (passage à la ligne) obligatoire.
de caractères en nombre. Cela peut se faire de la façon suivante :

>>> type(a) On peut, si on ne veut pas passer à la ligne après l’écriture, ajouter l’option end=" ", pour
<class 'str'> remplacer le retour à la ligne par un espace :
>>> a
'12' >>> print ("Bonjour. ", end=" ")
>>> a=int(a) >>> print ("Rester sur la meme ligne ! ")
>>> a Bonjour. Rester sur la meme ligne !
12 >>> x=5
>>> type(a) >>> print ("x = ",end=" ")
<class 'int'>
>>> print (x)
x = 5
int(a) : permet de convertir la valeur de a en une valeur de type entier.

Pr. Ouafaa YACOUBI


Page 6

VI. Contrôle de l’exécution d’un programme : Remarque :


L’indentation des instructions par rapport aux lignes contenant les mots-clés if, elif et else
Python possède les structures de contrôle élémentaires permettant l’exécution est très important pour grouper les instructions ensemble.
conditionnelle, la répétition d’instructions, etc...
Exemple 1 : Le programme suivant est syntaxiquement correct même si le résultat n’est
1. Le test conditionnel : if pas celui désiré.

>>> x = 1
Les tests permettent d’exécuter des instructions différentes selon la valeur d’une
>>> if x > 0:
condition logique. Le test conditionnel s’effectue avec l’instruction classique if qui évalue signe = 1
une expression booléenne et exécute les instructions du bloc si elle est vraie. print("le nombre est positif")
>>> else:
Syntaxe 1 : signe = -1
if condition1 : >>> print("le nombre est négatif")
instruction1 >>> print("signe = ", signe)
instruction2
... Résultat d’exécution :
else :
instruction3 le nombre est positif
instruction4 le nombre est négatif
... signe = 1

La clause else est facultative. Lorsque la condition condition1 est fausse et qu’il n’y a Une ligne est mal indentée : print ("le nombre est négatif"). Elle ne devrait
aucune instruction à exécuter dans ce cas, la clause else devient inutile. être exécutée que si la condition x>0 n’est pas vérifiée. Le fait qu’elle soit alignée avec les
premières instructions du programme fait que son exécution n’a plus rien à voir avec cette
condition. La programme répond de manière erronée.
Cependant, s’il est nécessaire d’enchaîner plusieurs tests d’affilée, il est possible de
condenser l’écriture avec le mot-clé elif :
Exemple 2 :
Syntaxe 2 :
>>> a=47
if condition1 :
>>> if a>=100 :
instruction1
print ("la valeur de a est supérieure ou égale à 100")
instruction2
>>> elif a>=70:
...
print ("La valeur de a est comprise entre 70 et 99")
elif condition2 :
>>> elif a>=50:
instruction3
print ("La valeur de a est comprise entre 50 et 69")
instruction4
>>> elif a>=30:
...
print ("La valeur de a est comprise entre 30 et 49")
elif condition3 :
>>> elif a>=10:
instruction5
print ("La valeur de a est comprise entre 10 et 29")
instruction6
>>> else :
...
print ("La valeur de a est inférieure strictement à 10")
else :
instruction7
...
La valeur de a est comprise entre 30 et 49

Pr. Ouafaa YACOUBI


Page 7

L’instruction « pass » : 3. Modification du comportement de la boucle :

Dans certains cas, aucune instruction ne doit être exécutée même si un test est validé. En Il existe deux façons de modifier le comportement d’une boucle for.
python, le corps d’un test ne peut être vide, il faut utiliser l’instruction « pass ».
L’instruction break
Syntaxe :
>>> signe = 0 L’instruction break permet de quitter la boucle prématurément.
>>> x = 0
>>> if x < 0: signe = -1
>>> elif x == 0: >>> for i in range(5):
pass # signe est déjà égal à 0 if i == 3:
>>> else : signe = 1 break
print(i, i**2)
2. La répétition d’instructions : for 0 0
1 1
En Python, la boucle « for » permet d’itérer sur tout type de séquence, et exploite 2 4
l’élément plutôt que l’indice de l’élément, comme c’est généralement le cas dans d’autres
langages. L’instruction continue

C’est très efficace, car dans la très grande majorité des cas, l’indice n’est utile que pour L’instruction continue permet de passer à l’itération suivante sans exécuter les
accéder à l’élément. On retrouve ce comportement assez souvent en Python, où des instructions du corps de boucle qui suivent.
instructions de plus haut niveau sont utilisées par défaut.
>>> for i in range(5):
La boucle for s’écrit de façon similaire, quel que soit le type de séquence sur laquelle on if i == 3:
souhaite itérer : continue
print(i, i**2)
Syntaxe : 0 0
>>> for i in range(0,5): 1 1
... print(i, i**2) 2 4
... 4 16
0 0
1 1
4. La clause else
2 4
3 9
4 16 La boucle for comporte une clause « else » permettant l’exécution d’une instruction
lorsque la totalité de la boucle a été parcourue.
Remarque :
La fonction range () retourne un itérateur sur une séquence d’entiers. L’indice de départ >>> for i in range(5):
est inclus, l’indice de fin est exclu. C’est un comportement général en Python. print(i, i**2)
if i == 9: # cette condition n'est jamais vérifiée
break
>>> else:
print("La boucle est complètement exécutée")

Pr. Ouafaa YACOUBI


Page 8
s = s // 2
>>> print("Suite du programme") else:
s = 3 * s + 1
0 0 print(s, end=" ")
1 1 >>> print()
2 4
3 9 28 14 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
4 16
La boucle est complètement exécutée
Suite du programme A noter :

La conjecture de « Syracuse » est l’hypothèse mathématique selon laquelle la suite de


Au contraire, si la boucle for n’a pas été complètement parcourue, l’instruction contenue Syracuse de n’importe quel entier strictement positif atteint 1. En mathématiques, une
dans la clause « else » n’est pas exécutée. conjecture est une assertion pour laquelle on ne connaît pas encore de démonstration,
mais que l’on soupçonne d’être vraie, en l’absence de contre-exemple.
>>> for i in range(5):
print(i, i**2) Remarque :
if i == 3:
break
>>> else: La boucle while dispose également des instructions break et continue pour modifier son
print("La boucle est complètement exécutée") comportement.
>>> print("Suite du programme")
Dans le code ci-dessous, la boucle s’arrête prématurément si le nombre 17 est trouvé
0 0 dans la séquence.
1 1
2 4
3 9 >>> s = 9
>>> while s != 1:
Suite du programme
if s == 17:
break
5. La répétition d’instructions : while if s % 2 == 0:
s = s // 2
L’instruction while permet également la répétition d’instructions comme on vient de le else:
voir pour l’instruction for. Les deux instructions permettant des constructions s = 3 * s + 1
print(s, end=" ")
équivalentes, le choix entre les deux sera affaire de concision et de clarté.
>>> print()

Ainsi, lorsque l’on aura à parcourir une séquence dont la longueur est connue avant 28 14 7 22 11 34 17
l’exécution de la boucle, il sera plus pertinent d’utiliser une boucle for.

En revanche, lorsque le nombre d’itérations n’est pas connu à l’avance et dépend d’une
condition évaluée dynamiquement à l’intérieur de la boucle, l’instruction while permettra
une écriture plus naturelle. Un exemple avec la suite de « Syracuse ».

>>> s = 9
>>> while s != 1:
if s % 2 == 0:

Pr. Ouafaa YACOUBI