Académique Documents
Professionnel Documents
Culture Documents
Objectifs :
Ce qu'est exactement Python ;
Comment installer Python ;
Comprendre la syntaxe et les mécanismes de base de ce langage.
Le programmeur « n'a qu'à » écrire des lignes de code dans le langage qu'il a choisi,
les étapes suivantes sontautomatisées pour permettre à l'ordinateur de les décoder.
2- Caractéristiques :
Python est un langage de programmation facile, pédagogique, interprété, universel,
gratuit puissant.
1
b) Python est un langage Interprété : à l'image des langages compilés (PHP,
Pascal …) un programme Python ne nécessite pas d'étape de compilation en
langage machine pour fonctionner. Le code est interprété à l'exécution. Python
présente néanmoins une caractéristique intéressante : comme en Java, le code
Python est compilé en bytecode (format intermédiaire) avant lancement, ce qui
optimise ses performances.
d) Python est un langage Gratuit (open source): Python est un langage qu’on
peut installer sans acheter une licence et qu’on peut utiliser sans restriction dans des
projets commerciaux.
2. Lancement de Python :
Pour lancer Python et accéder à sa ligne de commande, on peut passer par le menu
Démarrer de Windows pour choisir l’option < Python > .
2
On peut également passer par la ligne de commande Windows ; il suffit d’aller dans
le menu Démarrer, puis cliquer sur Exécuter. Dans la fenêtre qui s'affiche, taper
simplement « python » et la ligne de commande Python devrait s'afficher à nouveau.
Pour fermer l'interpréteur de commandes Python, vous pouvez tapez « exit() » puis
appuyer sur la touche Entrée.
Le programme (aussi appelé script) devra être enregistré dans un fichier texte
d'extension .py pour qu'il soit reconnu comme un programme python. On peut écrire
ce programme dans un simple éditeur de texte (NotePad++ par exemple), comme
on peut installer des éditeurs spécifiques tels que pycharm, PyScripter, Pyzo,
Atom ..etc.
Exemple :
Il existe également le mode script où on doit avoir préalablement écrit toutes les
instructions de programme dans un fichier texte, et l'avoir enregistré sur l’ordinateur.
On utilise généralement l'extension de fichier .py pour des fichiers contenant du
code Python. Une fois cela fait, l'interpréteur va lire ce fichier et exécuter son
contenu, instruction par instruction, comme si on les a tapées l'une après l'autre
dans le mode interactif. Les résultats intermédiaires des différentes instructions ne
sont par contre pas affichés; seuls les affichages explicites (avec la fonction print,
par exemple) se produisent.
5. Calculatrice Python
Notation
Description
Addition +
Soustraction -
Multiplication *
Division /
Exponentiation **
Division entière //
Reste de la division entière %
4
Utilisation des Commentaires
Lorsqu'on écrit un programme, il est parfois utile d'y ajouter des informations textuelles
à destination des êtres humains. Ce genre d'information est appelé commentaire et on
en l’ajoute dans un code source à l'aide du caractère #. Tout ce qui suit ce caractère,
jusque la fin de la ligne, sera ignoré par l'interpréteur Python.
Il est aussi possible dans un fichier de marquer un commentaire avec des guillemets,
(ceci permet un commentaire sur plusieurs lignes """....""").
Le but d'un bon commentaire est d'apporter une information additionnelle au code. Il
peut s'agir d'informations liées au problème résolu par le programme ou d'informations
sur le programme (auteurs, version, etc.).
Exemple :
Exemple :
A=5 Permet d’affecter la valeur 5 à la variable nommée A
B=2 Permet d’affecter la valeur 2 à la variable nommée B
S=A+B Permet de ranger la somme des deux variables (7) dans la variable nommée S
L'utilisation d'une variable est donc assez immédiate. Deux types d'accès peuvent être
réalisés :
Pour affecter une valeur à une variable, c'est-à-dire l'initialiser ou modifier sa
valeur, on utilise l'opérateur d'affectation (=). À gauche de l'opérateur on retrouve
le nom de la variable et à droite la valeur qu'on souhaite lui affecter.
Pour accéder au contenu d'une variable, il suffit d'utiliser son nom.
3. Initialisation de variable :
Avant de pouvoir accéder au contenu d'une variable, il faut qu'elle soit initialisée,
c'est-à-dire qu'elle doit posséder une valeur. Si vous tentez d'utiliser une variable
non initialisée, l'exécution du programme va s'arrêter et l'interpréteur Python va
produire une erreur d'exécution. Voyons cela avec l'exemple de programme
suivant :
height = 178
print('Sa taille est :')
print(heigth)
Sa taille est :
Traceback (most recent call last):
File "program.py", line 3, in <module>
print(heigth)
NameError: name 'heigth' is not defined
4. Modification de variable
Une fois une variable initialisée, on peut donc modifier sa valeur en utilisant de
nouveau l'opérateur d'affectation (=). La valeur actuelle de la variable est
remplacée par la nouvelle valeur qu'on lui affecte. Dans l'exemple suivant, on
initialise une variable à la valeur 12 et on remplace ensuite sa valeur par 99 :
data = 12
data = 99
print(data)
Ce que l'on doit parfois faire, c'est mettre à jour une variable par rapport à la
valeur qu'elle possède actuellement. Par exemple, si on veut augmenter la valeur
d'une variable data de 1, on doit écrire :
data = data + 1
Pour simplifier cette instruction, Python propose l'opérateur += qui fait l'addition
suivie de l'affectation en une fois. L'exemple précédent se réécrit donc comme
suit :
data += 1
Le type entier se nomme int en Python (qui correspond à l'anglais « integer », c'est-à-
dire entier). La forme d'un entier est un nombre sans virgule.
On peut, à l'instar des nombres (et de tous les types de données) stocker une chaîne
de caractères dans une variable : (ma_chaine = "Bonjour, la foule !")
Si on utilise les délimiteurs simples (le guillemet ou l'apostrophe) pour encadrer une
chaîne de caractères, il se pose le problème des guillemets ou apostrophes que peut
contenir la dite chaîne. Par exemple, si on tape chaine = 'J'aime le Python!', on
obtienne le message suivant :
SyntaxError: invalid syntax
Ceci est dû au fait que l'apostrophe de « J'aime » est considérée par Python comme la
fin de la chaîne et qu'il ne sait pas quoi faire de tout ce qui se trouve au-delà.
Pour pallier ce problème, il faut échapper les apostrophes se trouvant au cœur de la
chaîne. On insère ainsi un caractère antislash « \ » avant les apostrophes contenues
dans le message :
chaine = 'J\'aime le Python!'
chaine2 = "\"Le seul individu formé, c'est celui qui a appris comment
apprendre (...)\" (Karl Rogers, 1976)"
Le caractère d'échappement « \ » est utilisé pour créer d'autres signes très utiles. Ainsi,
« \n » symbolise un saut de ligne
("essai\nsur\nplusieurs\nlignes"). Pour écrire un véritable anti-slash dans une
chaîne, il faut l'échapper lui-même (et donc écrire « \\ »).
Remarque : d’autres type seront vus plus loin (liste, Tuple, Ensemble et dictionnaire)
1. Fonction print
La fonction print permet d'afficher une donnée, peu importe son type. En réalité, la
fonction affiche une représentation de la donnée sous forme d'une chaine de
caractères. En plus, elle ajoute automatiquement un retour à la ligne, ainsi, deux
appels successifs à la fonction print résulteront en l'affichage de deux lignes.
8
L'exemple suivant affiche la phrase «Né en 1990 j'ai 20 ans.» :
annee = 2020
naissance = 1990
age = annee - naissance
print('Né en', annee, "j'ai", age, 'ans.')
On remarque que l'alternance entre guillemets simples et doubles pour délimiter les
chaines de caractères, contrainte par le fait que la deuxième chaine de caractères
contient un guillemet simple. On aurait également pu utiliser des guillemets doubles
partout, évidemment.
Par défaut, la fonction print ajoute donc un retour à la ligne après ce qu'elle doit
afficher, et elle sépare les différentes valeurs à afficher avec une espace. On peut
changer cette configuration par défaut à l'aide des paramètres nommés end et sep.
Avec ces derniers, on peut spécifier les chaines de caractères à afficher
respectivement après le contenu et entre les valeurs.
day = 4
month = 8
year = 1990
Sortie formatée :
Au lieu de fournir plusieurs valeurs à la fonction print, on aurait également pu
construire la chaine de caractères en utilisant la concaténation. Dans ce cas, il faudra
convertir toutes les valeurs concaténées en chaines de caractères pour que cela
fonctionne. L'exemple précédent peut se réécrire comme suit :
str (string) : est une fonction prédéfinie (de langage) qui permet la conversion en
chaine de caractères.
2. Fonction input
Alors que la fonction print permet à un programme de produire une sortie, on va
pouvoir lire une entrée grâce à la fonction input. Cette fonction, une fois appelée,
arrête l'exécution du programme et attend que l'utilisateur saisisse un texte. Ce dernier
est ensuite rapatrié et peut, par exemple, être stocké dans une variable. Voici un
programme qui vous demande votre prénom, puis vous souhaite la bienvenue :
9
prenom = input('Quel est ton prénom ? ')
print('Bonjour', prenom, 'et bienvenue !')
La fonction input renvoie toujours le texte saisi par l'utilisateur sous forme d'une chaine
de caractères. Il faudra donc éventuellement prévoir une conversion, si on veut que
l'utilisateur saisisse autre chose, comme un nombre entier, par exemple.
annee = 2020
naissance = int(s)
print('Tu as', annee - naissance, 'ans.')
Par contre, si l'utilisateur ne saisit pas un nombre, une erreur se produira lors de
l'exécution comme on peut le voir ci-dessous, où l'utilisateur a saisi le texte «deux-
mille» :
NB : On verra plus loin durant cette formation comment gérer ce type d'erreur et
pouvoir, par exemple, afficher un message à l'utilisateur.
D.Structures de données
I. Les listes en Python
1. Définition
Une liste est une structure de données qui contient une série de valeurs. Python
autorise la construction de liste contenant des valeurs de types différents (par exemple
entier et chaîne de caractères), ce qui leur confère une grande flexibilité. Une liste est
déclarée par une série de valeurs (les guillemets, simples ou doubles, s'il s'agit de
chaînes de caractères) séparées par des virgules, et le tout encadré par
des crochets.
Exemples :
>>> animaux = ['girafe', 'tigre', 'singe', 'souris']
>>> tailles = [5, 2.5, 1.75, 0.15]
10
>>> mixte = ['girafe', 5, 'souris', 0.15]
>>> animaux
['girafe', 'tigre', 'singe', 'souris']
>>> tailles
[5, 2.5, 1.75, 0.15]
>>> mixte
['girafe', 5, 'souris', 0.15]
2. Utilisation
Un des gros avantages d'une liste est que l’on peut appeler ses éléments par leur
position. Ce numéro est appelé indice (ou index) de la liste.
La méthode .append() est utilisée lorsqu’on souhaite ajouter un seul élément à la fin
d'une liste.
1 >>> a = [15, -5]
2 >>> a.append(13)
3 >>> a
4 [15, -5, 13]
5 >>> a.append(-3)
6 >>> a
7 [15, -5, 13, -3]
4. Indiçage négatif
La liste peut également être indexée avec des nombres négatifs selon le modèle
suivant :
11
1 liste : ['girafe', 'tigre', 'singe', 'souris']
2 indice positif : 0 1 2 3
3 indice négatif : -4 -3 -2 -1
ou encore :
1 liste : ['A','B','C','D','E','F']
2 indice positif : 0 1 2 3 4 5
3 indice négatif : -6 -5 -4 -3 - 2 -1
Les indices négatifs reviennent à compter à partir de la fin. Leur principal avantage est
qu’on peut accéder au dernier élément d'une liste à l'aide de l'indice -1 sans pour
autant connaître la longueur de cette liste. L'avant-dernier élément a lui l'indice -2,
l'avant-avant dernier l'indice -3, etc.
Pour accéder au premier élément de la liste avec un indice négatif, il faut par contre
connaître le bon indice, donc on utilise l’indice 0.
5. Tranches
Un autre avantage des listes est la possibilité de sélectionner une partie d'une liste en
utilisant un indiçage construit sur le modèle [m:n+1] pour récupérer tous les éléments,
du émième au énième (de l'élément m inclus à l'élément n+1 exclu). On dit alors
qu'on récupère une tranche de la liste, par exemple :
>>> animaux = ['girafe', 'tigre', 'singe', 'souris']
>>> animaux[0:2]
['girafe', 'tigre']
>>> animaux[0:3]
['girafe', 'tigre', 'singe']
>>> animaux[0:]
['girafe', 'tigre', 'singe', 'souris']
>>> animaux[:]
['girafe', 'tigre', 'singe', 'souris']
>>> animaux[1:]
['tigre', 'singe', 'souris']
>>> animaux[1:-1]
['tigre', 'singe']
Exemple :
La commande list(range(10)) a généré une liste contenant tous les nombres entiers de
0 inclus à 10 exclu.
Dans l'exemple ci-dessus, la fonction range() a pris un argument, mais elle peut
également prendre deux ou trois arguments, voyez plutôt :
>>> list(range(0, 5))
[0, 1, 2, 3, 4]
>>> list(range(15, 20))
[15, 16, 17, 18, 19]
>>> list(range(0, 1000, 200))
[0, 200, 400, 600, 800]
>>> list(range(2, -2, -1))
[2, 1, 0, -1]
Ici la liste est vide car Python a pris la valeur du pas par défaut qui est de 1. Ainsi, si
on commence à 10 et qu'on avance par pas de 1, on ne pourra jamais atteindre 0.
Python génère ainsi une liste vide. Pour éviter ça, il faudrait, par exemple, préciser un
pas de -1 pour obtenir une liste d'entiers décroissants :
>>> list(range(10,0,-1))
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
Dans cet exemple, chaque sous-liste contient une catégorie d'animal et le nombre
d'animaux pour chaque catégorie.
Pour accéder à un élément de la liste, on utilise l'indiçage habituel :
>>> zoo[1]
['tigre', 2]
14
list.remove(x) : Supprime de la liste le premier élément dont la valeur est égale à x.
Une exception ValueError est levée s'il n'existe aucun élément avec cette valeur.
Les arguments optionnels start et end sont utilisés pour limiter la recherche à une
sous-séquence particulière. L'indice renvoyé est calculé relativement au début de la
séquence complète et non relativement à start.
Remarque :
- Toutes les données ne peuvent pas être ordonnées ou comparées. Par exemple,
[None, 'hello', 10] ne sera pas ordonné parce que les entiers ne peuvent pas être
comparés aux chaînes de caractères et None ne peut pas être comparé à
d'autres types. En outre, il existe certains types qui n'ont pas de relation d'ordre
définie. Par exemple, 3+4j < 5+7j n'est pas une comparaison valide.
Les méthodes des listes rendent très facile leur utilisation comme des piles, où le
dernier élément ajouté est le premier récupéré (« dernier entré, premier sorti » ou LIFO
pour last-in, first-out en anglais). Pour ajouter un élément sur la pile, utilisez la méthode
append(). Pour récupérer l'objet au sommet de la pile, utilisez la méthode pop() sans
indicateur de position.
Exemple :
Il est également possible d'utiliser une liste comme une file, où le premier élément
ajouté est le premier récupéré (« premier entré, premier sorti » ou FIFO pour first-in,
first-out) ; toutefois, les listes ne sont pas très efficaces pour réaliser ce type de
traitement. Alors que les ajouts et suppressions en fin de liste sont rapides, les
16
opérations d'insertions ou de retraits en début de liste sont lentes (car tous les autres
éléments doivent être décalés d'une position).
Ainsi, pour implémenter une file, on utilise la classe collections.deque qui a été
conçue pour réaliser rapidement les opérations d'ajouts et de retraits aux deux
extrémités.
Exemple :
>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry") # Terry arrives
>>> queue.append("Graham") # Graham arrives
>>> queue.popleft() # The first to arrive now leaves
'Eric'
>>> queue.popleft() # The second to arrive now leaves
'John'
>>> queue # Remaining queue in order of arrival
deque(['Michael', 'Terry', 'Graham'])
Exemple :
>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> del a[0]
>>> a
[1, 66.25, 333, 333, 1234.5]
>>> del a[2:4]
>>> a
[1, 66.25, 1234.5]
>>> del a[:]
>>> a
[]
Nous avons vu que les listes et les chaînes de caractères ont beaucoup de propriétés
en commun, comme l'indiçage et les opérations sur des tranches. Ce sont deux
exemples de séquences (voir Types séquentiels — list, tuple, range). Comme Python
est un langage en constante évolution, d'autres types de séquences y seront peut-être
ajoutés. Il existe également un autre type standard de séquence : le tuple (ou n-uplet,
dénomination que nous utiliserons dans la suite de cette documentation).
17
Exemple :
>>> t = 12345, 54321, 'hello!'
>>> t[0]
12345
>>> t
(12345, 54321, 'hello!')
>>> # Tuples may be nested:
... u = t, (1, 2, 3, 4, 5)
>>> u
((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))
>>> # Tuples are immutable:
... t[0] = 88888
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> # but they can contain mutable objects:
... v = ([1, 2, 3], [3, 2, 1])
>>> v
([1, 2, 3], [3, 2, 1])
Les n-uplets sont toujours affichés entre parenthèses, de façon à ce que des n-uplets
imbriqués soient interprétés correctement ; ils peuvent être saisis avec ou sans
parenthèses, même si celles-ci sont souvent nécessaires (notamment lorsqu'un n-
uplet fait partie d'une expression plus longue). Il n'est pas possible d'affecter de valeur
à un élément d'un n-uplet ; par contre, il est possible de créer des n-uplets contenant
des objets muables, comme des listes.
Si les n-uplets peuvent sembler similaires aux listes, ils sont souvent utilisés dans des
cas différents et pour des raisons différentes. Les n-uplets sont immuables et
contiennent souvent des séquences hétérogènes d'éléments qui sont accédés par «
dissociation » (unpacking en anglais) ou par indice (ou même par attributs dans le cas
des namedtuples). Les listes sont souvent muables et contiennent des éléments
généralement homogènes qui sont accédés par itération sur la liste.
Exemple :
>>> empty = ()
>>> singleton = 'hello', # <-- note trailing comma
>>> len(empty)
0
>>> len(singleton)
1
>>> singleton
('hello',)
18
L'instruction t = 12345, 54321, 'hello !' est un exemple d'un d'agrégation de n-
uplet (tuple packing en anglais) : les valeurs 12345, 54321 et hello ! sont agrégées
ensemble dans un n-uplet. L'opération inverse est aussi possible :
>>> x, y, z = t
IV. Ensembles
Python fournit également un type de donnée pour les ensembles. Un ensemble est
une collection non ordonnée sans élément dupliqué.
Les ensembles savent également effectuer les opérations mathématiques telles que
les unions, intersections, différences et différences symétriques.
Des accolades ou la fonction set() peuvent être utilisés pour créer des ensembles.
Pour créer un ensemble vide, {} ne fonctionne pas, cela crée un dictionnaire vide. On
utilise plutôt set().
Démonstration :
V. Dictionnaires
Un autre type de donnée très utile, natif dans Python, est le dictionnaire . Ces
dictionnaires sont parfois présents dans d'autres langages sous le nom de « mémoires
associatives » ou de « tableaux associatifs ». À la différence des séquences, qui
sont indexées par des nombres, les dictionnaires sont indexés par des clés, qui
peuvent être de n'importe quel type immuable ; les chaînes de caractères et les
19
nombres peuvent toujours être des clés. Des n-uplets peuvent être utilisés comme
clés s'ils ne contiennent que des chaînes, des nombres ou des n-uplets ; si un n-uplet
contient un objet muable, de façon directe ou indirecte, il ne peut pas être utilisé
comme une clé. On ne peut pas utiliser des listes comme clés, car les listes peuvent
être modifiées en place en utilisant des affectations par position, par tranches ou via
des méthodes comme append() ou extend().
Le plus simple est de considérer les dictionnaires comme des ensembles de paires clé:
valeur, les clés devant être uniques (au sein d'un dictionnaire). Une paire d'accolades
crée un dictionnaire vide : {}. Placer une liste de paires clé:valeur séparées par des
virgules à l'intérieur des accolades ajoute les valeurs correspondantes au dictionnaire ;
c'est également de cette façon que les dictionnaires sont affichés.
Les opérations classiques sur un dictionnaire consistent à stocker une valeur pour une
clé et à extraire la valeur correspondant à une clé. Il est également possible de
supprimer une paire clé-valeur avec del. Si on stocke une valeur pour une clé qui est
déjà utilisée, l'ancienne valeur associée à cette clé est perdue. Si op tente d'extraire
une valeur associée à une clé qui n'existe pas, une exception est levée.
Exécuter list(d) sur un dictionnaire d renvoie une liste de toutes les clés utilisées dans
le dictionnaire, dans l'ordre d'insertion (si on veut qu'elles soient ordonnées, on utilise
sorted(d)). Pour tester si une clé est dans le dictionnaire, on utilise le mot-clé in.
Exemple utilisant un dictionnaire :
>>> tel = {'jack': 4098, 'sape': 4139}
>>> tel['guido'] = 4127
>>> tel
{'jack': 4098, 'sape': 4139, 'guido': 4127}
>>> tel['jack']
4098
>>> del tel['sape']
>>> tel['irv'] = 4127
>>> tel
{'jack': 4098, 'guido': 4127, 'irv': 4127}
>>> list(tel)
['jack', 'guido', 'irv']
>>> sorted(tel)
['guido', 'irv', 'jack']
>>> 'guido' in tel
True
>>> 'jack' not in tel
False
20
E. Les tests en Python – if … else
1. Définition :
Les tests permettent d’exécuter des instructions différentes selon la valeur d’une
condition logique. Ils sont un élément essentiel à tout langage informatique car ils
permettent à l'ordinateur de prendre des décisions. Pour cela, Python utilise
l'instruction if selon la syntaxe suivante :
if condition1 : #Si la condition1 est vraie
instruction1
instruction2
...
else : #Sinon, c'est-à-dire, si la condition1 est fausse
instruction3
instruction4
...
Exemple :
>>> x = input()
>>> y = input()
>>> if x == y:
... print("Les deux valeurs sont égales ")
... else :
print("Les deux valeurs sont différentes !")
La clause else est facultative. Ainsi, lorsque la condition condition1 est fausse et qu’il
n’y a aucune instruction à exécuter dans ce cas, cette clause est inutile.
Exemple:
>>> x = 2
>>> if x == 2:
... print("Le test est vrai !")
Le test est vrai !
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 :
if condition1 :
instruction1
elif condition2 : # Le mot clé elif est une contraction de « else if »
instruction2
elif condition3 :
instruction3
else :
instruction4
instructionN
Explication :
Si la condition1 est vérifiée, l’ordinateur passe par l’instruction1 puis instructionN
Sinon, si la condition2 est vérifiée, l’ordinateur passe par l’instruction2 puis instructionN
Sinon, si la condition3 est vérifiée, l’ordinateur passe par l’instruction3 puis instructionN
Sinon (c'est-à-dire si aucune des conditions est vérifiée, l’ordinateur passe par
l’instruction4 puis instructionN.
21
2. Operateurs utilisées dans les tests :
is, not is x is y vérifie que x et y sont égaux, not is, différents, l’opérateur is est
différent de l’opérateur ==, il est expliqué au paragraphe Copie
and et logique
or ou logique
3. Ecriture condensée :
Il existe deux écritures condensées de tests :
- La première consiste à écrire un test et l’unique instruction qui en dépend sur une
seule ligne :
if condition : instruction1
else : instruction2
- Boucle bornée
Quand on sait combien de fois doit avoir lieu la répétition, on utilise généralement une
boucle for.
La boucle "for" est la séquence d'itération en Python, elle permet de traverser les
éléments de tout objets qui répond aux opérations d'indiçage de séquence. Elle
est donc spécialisée dans le parcours d'une séquence de plusieurs données (les
listes, les tuples et d'autres objets issus de classes).
Nous n'avons pas encore vu ces séquences assez particulières mais très
répandues. Toutefois, il en existe un type que nous avons rencontré : les
chaînes de caractères qui sont des séquences de caractères.
La boucle "for" commence par une ligne d'en-tête qui spécifie une cible
d'affectation, ainsi qu'un objet qui sera itérer.
Exemple :
chaine = "Bonjour"
for lettre in chaine:
print(lettre)
23
Contrairement à la création de liste avec list(range(4)), la fonction range() peut
être utilisée telle quelle dans une boucle. Il n'est pas nécessaire de taper for i in
list(range(4)): même si cela fonctionnerait également.
Comment cela est-ce possible ? Et bien range() est une fonction qui a été
spécialement conçue pour cela, c'est-à-dire que l'on peut itérer directement
dessus. Pour Python, il s'agit d'un nouveau type, par exemple dans l'instruction x
= range(3) la variable x est de type range (tout comme on avait les
types int, float, str ou list) à utiliser spécialement avec les boucles.
Quand utiliser l'une ou l'autre des 2 méthodes ? La plus efficace est celle qui
réalise les itérations directement sur les éléments :
>>> animaux = ['girafe', 'tigre', 'singe', 'souris']
>>> for animal in animaux:
... print(animal)
...
girafe
tigre
singe
souris
24
Toutefois, il se peut qu'au cours d'une boucle on aura besoin des indices, auquel
cas on doit itérer sur les indices :
>>> animaux = ['girafe', 'tigre', 'singe', 'souris']
>>> for i in range(len(animaux)):
... print("L'animal {} est un(e) {}".format(i,
animaux[i]))
...
L'animal 0 est un(e) girafe
L'animal 1 est un(e) tigre
L'animal 2 est un(e) singe
L'animal 3 est un(e) souris
Python possède toutefois la fonction enumerate() qui permet d'itérer sur les
indices et les éléments eux-mêmes.
>>> animaux = ['girafe','tigre','singe','souris']
>>> for i, animal in enumerate(animaux):
... print("L'animal {} est un(e) {}".format(i, animal))
...
L'animal 0 est un(e) girafe
L'animal 1 est un(e) tigre
L'animal 2 est un(e) singe
L'animal 3 est un(e) souris
"while" consiste en une ligne d'en-tête avec une expression de test, suivie d'un bloc
d’instructions.
while <test> :
<instructions>
Exemple :
x = 1
while x < 10:
print("x a pour valeur", x)
x = x * 2
print("Fin")
25
Apres l’exécution ce programme affiche :
x a pour valeur 1
x a pour valeur 2
x a pour valeur 4
x a pour valeur 8
Fin
Le mot-clé while signifie tant que en anglais. Le corps de la boucle (c’est-à-dire le bloc
d’instructions indentées) sera répété tant que la condition est vraie.
Dans l’exemple ci-dessus, x sera multiplié par 2 tant que sa valeur reste inférieure à
10.
Remarque : Si la condition est fausse au départ, le corps de la boucle n’est jamais
exécuté. Si la condition reste toujours vraie, alors le corps de la boucle est répété
indéfiniment.
Exemple :
Exemple :
i = 1
while i < 20: # Tant que i est inférieure à 20
if i % 3 == 0:
i += 4 # On ajoute 4 à i
print("On incrémente i de 4. i est maintenant égale à", i)
continue # On retourne au while sans exécuter la suite
print("La variable i =", i)
i += 1 # Dans le cas classique on ajoute juste 1 à i
26
G. Les fonctions et les procédures en Python
I. Principe et généralités
Une fonction (procédure) est une suite ou bloc d'instructions que l'on peut appeler
avec son nom à tout moment dans un programme.
En programmation, l’utilisation de ces blocs d’instructions est très utiles pour réaliser
plusieurs fois la même opération au sein d'un programme sans être obligé de répéter
les mêmes séries d’instructions.
Par définition, toute fonction est censée renvoyer une valeur. Une fonction qui ne
renvoie pas de valeur n’est pas une fonction : on appelle cela en programmation une
procédure.
Fonctionnement schématique :
Pour effectuer une tâche (2), la fonction reçoit éventuellement à son appel des
arguments (1) et renvoie éventuellement quelque chose (3).
Chaque fonction effectue en général une tâche unique et précise. Si cela se
complique, il est plus judicieux d'écrire plusieurs fonctions (qui peuvent
éventuellement s'appeler les unes après les autres).
Exemple :
Considérons la fonction len() appelée de la manière suivante :
1. Appelle len() en lui passant une liste en argument (ici la liste [0, 1, 2]) ;
2. la fonction calcule la longueur de cette liste ;
3. elle renvoie l’entier 3 correspondant à cette longueur.
En plus des fonctions connues par le langage Python, le programmeur peut créer ses
propres fonctions pour rendre son code plus lisible et plus clair en le fractionnant en
blocs logiques.
27
II. Création de fonctions
Exemple :
Remarque :
- La syntaxe de def utilisant les ’:’ comme les boucles for, while ainsi que les
tests if.
- De même que pour les boucles et les tests, l’indentation du corps de la fonction
est obligatoire.
- Un bloc d’instructions peut être créé pour exécuter une tache qui ne nécessite
pas de renvoyer une valeur. En Python, et pour garder la notion de fonction,
même ces genres de blocs sans instruction return explicite renvoient une valeur
qui est None. Cette valeur ignorée par l’interpréteur du langage sert à indiquer
qu’il n’y a pas de valeur.
- L’exécuteur sort de la fonction dès qu’il rencontre une instruction return (les
instructions suivant un return ne sont pas exécutées).
- Les fonctions sont capables de renvoyer plusieurs valeurs à la fois :
28
2- Passage d’arguments
Un argument est une donnée ou valeur de programme à passer dans une fonction à
l’aide d’un paramètre.
Ainsi, une fonction peut être crée avec ou sans paramètres et cela selon qu’on veut y
passer d’arguments ou non.
Les paramètres d’une fonction et arguments à passer sont séparés par des virgules.
Exemple :
def compteur_complet(start, stop, step):
i = start
while i < stop:
print(i)
i = i + step
compteur_complet(1, 7, 2)
Cette fonction utilise 3 paramètres (start, stop, step) pour passer 3 arguments (1, 7, 2).
Elle affichera 1, 3 et 5 qui correspondent à l’exécution de la ligne print (i), mais ne
retournera que la valeur None ignorée par l’interpréteur Python.
Remarque :
Il est possible de passer un ou plusieurs argument(s) de manière facultative et de leur
attribuer une valeur par défaut. Dans ce cas, le ou les arguments facultatifs doivent
être situés à droite càd : def fct(x,y,z=1): et non pas def fct(z=1,x,y):
def table(nb, max=10):
Il suffit de rajouter =10 après max. À présent, on peut appeler la fonction de deux
façons : soit en précisant le numéro de la table et le nombre maximum d'affichages,
soit en ne précisant que le numéro de la table (table(7)). Dans ce dernier cas, max
vaudra 10 par défaut.
Exemple :
Soit le code python suivant :
- fonc() Résultat : a = 1 b = 2 c = 3 d = 4 e = 5
- fonc(4) Résultat : a = 4 b = 2 c = 3 d = 4 e = 5
- fonc(b=8, d=5) Résultat : a = 1 b = 8 c = 3 d = 5 e = 5
- fonc(b=35, c=48, a=4, e=9) Résultat : a = 4 b = 35 c = 48 d = 4 e = 9
29
Ainsi, si on veut changer la valeur d'un paramètre, on tape son nom, suivi d'un signe
égal puis d'une valeur .Peu importent les paramètres qu’on précise, peu importe l'ordre
d'appel des paramètres.
a = 2
b = 7
test()
print(a, b)
Affichage après exécution :
2 5
2 7
On peut définir une fonction qui soit capable de modifier une variable globale. Pour
atteindre ce résultat, il suffira d’utiliser l’instruction global. Cette instruction permet
d’indiquer - à l’intérieur de la définition d’une fonction - quelles sont les variables à
traiter globalement.
On va ici créer une fonction qui a accès à la variable globale b.
def test():
global b
b = 5
print(a, b)
a = 2
b = 7
test()
print(a, b)
30
Affichage après exécution :
2 5
2 5
Si on passe une liste en argument, elle est tout autant modifiable au sein de la fonction:
>>> def mafonction(x):
... x[1] = -15
...
>>> y = [1,2,3]
>>> mafonction(y)
>>> y
[1, -15, 3]
>>>
Comme l’ont montré des exemples précédents, une fonction peut exécuter une autre
fonction, par exemple dans le cas où on demande à une fonction d’exécuter une
fonction print() pour afficher une valeur.
On doit savoir qu’une fonction peut également s’appeler elle-même dans son
exécution : c’est ce qu’on appelle la récursivité.
Lorsqu’on définit une fonction récursive, il faudra toujours faire bien attention à fournir
une condition qui sera fausse à un moment ou l’autre au risque que la fonction
s’appelle à l’infini.
L’exemple de fonction récursive par excellence est la définition d’une fonction qui
calculerait une factorielle. La factorielle d’un nombre est le produit des nombres entiers
inférieurs ou égaux à celui-ci; la factorielle de 4 par exemple est égale à 4 * 3 * 2 * 1.
Cette fonction sera comme suit :
def factorielle(n) :
if n<=1 :
return 1
else :
return n * factorielle(n-1)
factorielle(4)
24
Factorielle(0)
1
Ici, la condition de sortie de notre fonction est atteinte dès que la valeur passée en
argument atteint ou est inférieure à 1. Expliquons comment fonctionne cette fonction en
détail. Si on passe une valeur inférieure ou égale à 1 à notre fonction au départ, on
retourne la valeur 1 et la fonction s’arrête.
31
H. Les modules (sys et ren) en Python
I. Définition
Les modules sont des programmes Python qui contiennent des fonctions ayant toutes
un rapport entre elles. Il s’agit du code pré-écrit (appelés aussi bibliothèque ou
librairie) que le programmeur peut utiliser à son compte pour son propre programme.
Ce code est composé ainsi de fonctions qui vont lui faciliter la vie en tant que
développeur.
Il existe un grand nombre de modules disponibles avec Python sans qu'il soit
nécessaire d'installer des bibliothèques supplémentaires (Par exemple le module
math qui contient, comme son nom l'indique, des fonctions mathématiques).
Parmi les librairies les plus connues on retrouve aussi : Numpy, Pandas, Matplotlib,
Scikitlearn, datetime, et d’autres.
Ainsi, si l'on veut travailler avec les fonctionnalités prévues par le module, il n'y a qu'à
importer le module et utiliser ensuite toutes les fonctions et variables prévues.
L’importation d’un module peut se faire selon l’une des deux syntaxes suivantes :
1- : import nom_du_module
Cette instruction va importer toute la librairie d’un coup dans le code et on peut
commencer à l’utiliser.
L’utilisation de cette méthode permet donc d’importer tout une série de fonctions
organisées par «thèmes» (par exemple, les fonctions gérant les nombres
aléatoires avec random et les fonctions mathématiques avec math).
Exemple :
32
2- : from nom_du_module import nom_de_la_fonction
Exemple :
Comme on peut le remarquer dans cet exemple, il est inutile de répéter le nom
du module dans ce cas, seul le nom de la fonction en question est requis.
Remarque :
On peut appeler toutes les variables et fonctions d'un module en tapant « * » à la
place du nom de la fonction à importer.
Exemple :
En plus des modules prédéfinis, le développeur peut mettre ses programmes en boite
ou plutôt en fichier créant ainsi ses propres modules. Il s’agit d’utiliser le mécanisme
qui permet la sauvegarde des programmes Python pour être exécutés ultérieurement
en réutilisant les fonctions que contiennent sans avoir à les rédiger ou même les
copier !
Dans cette partie de cours nous verrons aussi comment créer des packages pour
regrouper nos modules ayant un rapport entre eux.
33
1- Création d'un module :
En Python, la création d'un module est très simple. Il suffit d'écrire un ensemble de
fonctions (et/ou de constantes) dans un fichier, puis d'enregistrer ce dernier avec une
extension .py (comme n'importe quel script Python).
Pour appeler une fonction ou une variable d’un module crée, il faut que le nom fichier
soit dans le répertoire courant (dans lequel on travaille) ou bien dans un répertoire listé
par la variable d'environnement PYTHONPATH de système d'exploitation. Ensuite, il
suffit d'importer le module et toutes ses fonctions (et constantes) seront alors
accessibles.
34
1- Les fonctions systèmes (sys):
Le module sys contient les fonctions nécessaires pour interagir avec Python et
récupérer des informations sur le système.
Exemples :
- Sys.platform : affiche la description du système d'exploitation
- Sys.version : affiche la version de python et du compilateur C
- Sys.hexversion : affiche la version exprimée en hexadécimal
- Sys.copyright : affiche le copyright
- Sys.path : renvoie une liste des chemins d'accès de python
(/usr/lib/python2.5...)
- Sys.exit() : pour quitter le programme (ou le shell)
Exemple :
>>> random()
0.8871712328944913
35