IntroPython Unlocked
IntroPython Unlocked
dz
Introduction à Python
1
Pourqoui Python?
1) Open source
python
print('Hello, World!')
Dr. S.K. Mehdi smehdi@[Link]
java
[Link]('Hello,
World!');
4) Des packages complets }
pour presque toutes les tâches }
#include <stdio.h>
C language
int main(){
printf('Hello, World!');
return 0;
}
2
Installation de Python
Windows
Étape 1: Sélectionner la [Link]
Version de Python à
installer
smehdi@[Link]
Dr. S.K. Mehdi
Windows
3
Étape 1 :Sélectionner la
Version de Python à
installer
Étape 2: Télécharger
Python executable installer
smehdi@[Link]
Dr. S.K. Mehdi
4
Étape 1 :Sélectionner la
Version de Python à
installer
Étape 2: Télécharger
Python executable installer
2
Étape 3: Run executable
installer
1
smehdi@[Link]
Dr. S.K. Mehdi
5
C:\Users\Username\AppData\Local\Programs\Python\
Python38
Étape 1 :Sélectionner
la Version de Python
à installer
Python
Étape 2: Télécharger
Python executable prompt
smehdi@[Link]
installer
Dr. S.K. Mehdi
étape 3: Run
executable installer
Étape 2: Télécharger
Python executable
installer
smehdi@[Link]
executable installer
8
Linux
Installation de Python et bibliothèques
Ubuntu 18.04 (et tous ses variantes 18.04) est livré par défaut avec
Python 3.6
Dr. S.K. Mehdi smehdi@[Link]
----
----
2009 : version 2,6 et une nouvelle version 3.0.0 (incompatible avec v2.x)
Ces deux versions peuvent être installées en parallèle sur un même poste
Ce cours est basé sur la version 3 de Python, qui est désormais le standard. 10
Installation et prise en main : Connaitre les
différentes versions de Python
copyleft.
●
Python est libre et gratuit même pour les usages commerciaux
– Importante communauté de développeurs
– Nombreux outils standard disponibles
• Travail interactif
– Nombreux interpréteurs interactifs disponibles
– Importantes documentations en ligne
– Développement rapide et incrémentiel
– Tests et débogage faciles
– Analyse interactive de données
• Langage interprété rapide
– Interprétation du bytecode compilé
●
Orientation objet :
12
Introduction :
On peut distinguer deux grands types de langages : les langages
interprétés et les langages compilés.
Dr. S.K. Mehdi smehdi@[Link]
●
La compilation est la traduction du code source (celui qu’on écrit)
en langage objet. Elle comprend au moins quatre phases (trois
phases d’analyse — lexicale, syntaxique et sémantique — et une
phase de production de code objet). Pour générer le langage
machine il faut encore une phase particulière : l’édition de liens. La
compilation est contraignante mais offre au final une grande vitesse
d’exécution.
Chaîne de compilation
13
●
Dans la technique de l’interprétation chaque ligne du code source
analysé est traduite au fur et à mesure en instructions directement
exécutées.
●
Aucun programme objet n’est généré. Cette technique est très
Dr. S.K. Mehdi smehdi@[Link]
Technique de l’interprétation
14
Algorithme et programme
●
Algorithme : ensemble des étapes permettant
d’atteindre un but en répétant un nombre fini de fois un
nombre fini d’instructions.
Dr. S.K. Mehdi smehdi@[Link]
●
Programme : un programme est la traduction d’un
algorithme en un langage compilable ou interprétable
par un ordinateur.
●
Il est souvent écrit en plusieurs parties dont une qui
pilote les autres, qu’on appelle le programme principal.
●
Un programme source est destiné à l’être humain. Pour en
faciliter la lecture, il doit être judicieusement commenté.
●
La signification des parties non triviales (et uniquement celles-
ci) doit être expliquée par un commentaire. 15
Mots réservés et fonctions internes
16
Les deux modes d’exécution d’un code Python
L’exécution d’un code Python peut se faire par deux modes différents :
17
Utilisation d’un terminal
La façon la plus simple d’interagir avec le langage Python est le
mode interactif. L’interpréteur est lancé dans une fenêtre de terminal
Linux (ou plus simplement terminal). Commencez par lancer un
terminal en utilisant la combinaison de touches Alt-Ctrl-T.
Dr. S.K. Mehdi smehdi@[Link]
19
Dr. S.K. Mehdi smehdi@[Link]
●
Les deux premières opérations sont évidentes.
●
La troisième indique une exponentiation 23.
Dr. S.K. Mehdi smehdi@[Link]
●
La cinquième opération avec l’opérateur (//) signifie «
partie entière », l’opération produit le même résultat que la
division entière, la philosophie n’est toutefois pas la même.
Dans un cas c’est le résultat cherché alors que dans l’autre
il y a une perte d’information.
●
Le dernier opérateur (%) dans le contexte présent signifie
« calcul du reste » de 2/3.
●
Notez bien qu’en Python 3, la division de deux nombres
entiers renvoie par défaut un float
22
●
Nous allons maintenant prendre un exemple d’une fonction qui calcule
la factorielle d’un nombre et voir comment elle peut être traitée en
mode interactif.
●
Tapez le morceau de code ci-dessous puis testez votre fonction
(prendre garde à indenter vos lignes là où c’est nécessaire).
●
Pour indenter, utiliser la
Dr. S.K. Mehdi smehdi@[Link]
touche Tab
●
Pour effacer le contenu du
Shell Python :
●
●
23
On lance python
v
dans un terminal
Dr. S.K. Mehdi smehdi@[Link]
On définit notre
fonction
On écrit les
instructions
v qui
définissent notre
fonction
On tape la touche
« Enter » pour
v prompt
revenir au
(>>>)
Exécution de
notre fonction
v et
résultat 24
Dr. S.K. Mehdi smehdi@[Link]
25
Nous pouvons également produire des tracés de courbes. L’exemple qui
suit montre sur une même figure, les tracés de sin(x) et sin(sin(x)) entre
−π et π. De nouveau ne vous préoccupez pas de la syntaxe.
Retenez comme le montre le code, que si vous vous trompez, vous
n’avez pas besoin de reprendre tout le Shell, il suffit de continuer en
corrigeant l’erreur.
Dr. S.K. Mehdi smehdi@[Link]
27
Éléments de Python
●
Nous allons maintenant introduire les éléments de base
pour la programmation impérative(*) avec Python.
Dr. S.K. Mehdi smehdi@[Link]
●
Nous utiliserons à partir d’ici IPython, un Shell interactif
pour Python, qui ajoute des fonctionnalités supplémentaires
à celles du Shell Python classique, et qui vont apparaître à
l’usage.
●
Pour lancer le Shell (supposé déjà installé sur votre
machine), tapez ipython dans un terminal.
●
Toutefois, on pourrait aussi lancer certains programmes à
partir d’un script, en utilisant un terminal ou un IDLE.
Pour quitter IPython
(*) : Un langage de programmation est qualifié d’impératif, quand entrez exit suivi de
on écrit un code où on spécifie les étapes ( une série d’ordres (ou la touche return.
instructions)) que l’ordinateur doit effectuer pour atteindre l’objectif. 28
2.1 Les variables
La programmation est un paradigme qui implique
généralement l’utilisation de nombres et de caractères.
Dr. S.K. Mehdi smehdi@[Link]
29
Les variables définies dans les langages de programmation
évolués (c’est à dire qu’ils se rapprochent dans leur
syntaxe du langage humain) permettent une manipulation
simple de ces adresses.
Dr. S.K. Mehdi smehdi@[Link]
30
Dr. S.K. Mehdi smehdi@[Link]
a = [1, 2, 3] a 1 2 3
a
b=a 1 2 3
b
a
[Link](4) 1 2 3 4
b
31
a=1 a 1
Dr. S.K. Mehdi smehdi@[Link]
a
b=a 1
b nouvel objet int créé
par l'opérateur add (1+1)
a 2
a = a+1 ancienne référence supprimée
par affectation (a=...)
b 1
32
Dr. S.K. Mehdi smehdi@[Link]
33
Dr. S.K. Mehdi smehdi@[Link]
●
L’instruction type(x) renvoie le type int, c’est à dire que x est un
entier.
●
id(x) renvoie l’identificateur de la variable (qui doit être unique. Deux
variables ayant même identificateur occupent nécessairement la
même place en mémoire).
●
Enfin hex(id(x)) donne l’adresse de la variable (en hexadécimal).
Dans ce cours nous n’aurons pas à utiliser ces éléments, mais il est
bon de savoir comment tout cela fonctionne. 34
Il existe trois types fondamentaux de variables en Python :
●
les nombres,
●
les caractères (type str)
●
et les booléens (type bol), (il existe un autre type plus
complexe appelé tuple que l’on verra plus loin).
Dr. S.K. Mehdi smehdi@[Link]
35
●
Dans la plupart des langages de programmation il
vous est demandé de manière explicite de définir
votre type de variable avant de l’utiliser (le Fortran
dans sa version de base considère de manière
Dr. S.K. Mehdi smehdi@[Link]
36
●
En effet comment représenter 1/3 en mémoire,
sachant qu’un ordinateur code une variable sur un
nombre de bits fixé, en général 32 ou 64 ? Un
nombre réel est nécessairement tronqué.
Dr. S.K. Mehdi smehdi@[Link]
●
Python présente une particularité, il utilise une astuce
pour gérer les débordements, ce qui lui permet de
représenter des entiers virtuellement infinis, limités
que par la taille mémoire de la machine.
●
Pour les nombres réels, la précision est
approximativement de 16 chiffres significatifs et
devient de 29 chiffres significatifs en important un
module spécialisé : decimal.
37
Dr. S.K. Mehdi smehdi@[Link]
38
Considérer l’exemple ci-dessus et répondre aux questions qui suivent :
1. Pourquoi l’opération In [6] donne-t-elle 0 ?
39
Opérateurs booléens et
logiques
●
Supposons que vous désirez
savoir à un endroit d’un
programme si les deux variables
a et b sont égales ?
ou bien savoir si les deux
chaînes de caractères c et d
sont identiques ?
●
Python vous offre toute une
palette d’opérateurs logiques qui
permet de le faire.
●
Le tableau à coté, liste une
partie de ces opérateurs
40
Examinons comment procéder aux tests avec Python
41
Le résultat montre bien ce que l’on attendait,
Dr. S.K. Mehdi smehdi@[Link]
●
a est bien égal à b,
●
mais que c et d sont différents, ce qui peut paraître
surprenant, mais la manipulation respecte la case des
caractères.
42
On peut également tester plusieurs propositions
simultanées comme par exemple :
a est-il égal à b ET (OU) c différent de d ? La syntaxe et les
réponses ci dessous :
Dr. S.K. Mehdi smehdi@[Link]
●
Pour que la première proposition soit vraie, il faut que
chacune de ses composantes soit vraie.
●
Pour les deux suivantes, il suffit qu’une composante soit
vraie. Vous pouvez tester la négation et vérifier que c’est
bien les résultats auquel vous vous attendiez.
La logique globale est résumée dans le tableau ci-dessous,
appelé tableau de vérité où l1 et l2 désignent deux
expressions logiques.
43
Dr. S.K. Mehdi smehdi@[Link]
44
2.2 Opérations d’entrée/sortie
2.2.1 Impression
●
Nous avons déjà utilisé la fonction print mais sans
expliquer son fonctionnement.
Dr. S.K. Mehdi smehdi@[Link]
●
Globalement la fonction print permet d’afficher un
caractère ou une chaîne de caractères ainsi que le
contenu de variables.
●
Elle permet en plus de gérer des caractères de
contrôle non-imprimables, nécessaires à une bonne
présentation.
●
Nous allons introduire la syntaxe Python de
l’impression sur un exemple.
45
2.2.1.a : A l’écran
Tapez le code ci-dessous dans un fichier puis exécutez le.
Dr. S.K. Mehdi smehdi@[Link]
46
Vous devriez obtenir l’affichage ci-dessous
●
La phrase que nous avons demandé à Python d’afficher
est reproduite (presque) à l’identique sur l’écran.
●
Les petites différences (position de la virgule à la premier
ligne et l’ajout de zéros non significatifs pour certaines
valeurs, relève de la gestion du système).
●
Nous allons expliquer pas à pas en quoi consiste les trois
formes de syntaxe utilisées. 47
Ce paragraphe concerne uniquement les utilisateurs
python 2.x.
●
En Python tout ce qui suit un caractère # est un
commentaire.
Ici, à l’inverse de ce que pourrait faire croire le signe #, il
ne s’agit pas d’un commentaire mais d’une instruction
permettant à Python de gérer des caractères qui ne sont
pas dans le codage ASCII classique (comme les accents
et autres bizarreries propres à de nombreuses langues).
49
●
Examinons la première forme de la syntaxe print : l’ordre
print a envoyé vers l’écran des chaînes de caractères
[qui doivent être entourés de doubles guillemets (” ”) ou
simples (‘ ‘ ) ], et les contenus des variables, dans l’ordre
que nous lui avons indiqué.
Dr. S.K. Mehdi smehdi@[Link]
●
Noter la façon dont nous avons traité l’apostrophe dans le
mot l’énergie.
●
Le caractère spécial ”\n” produit un saut de ligne lors de
l’affichage.
●
Le caractère esseulé à la fin de la ligne \, signifie à
Python que la commande continue à la ligne suivante
(n’ajoutez pas d’espace après le caractère et veillez à ce
que la ligne suivante ne soit pas indentée par rapport à la
ligne qui la précède).
●
Python ajoute un espace à chaque fois qu’il rencontre
une virgule. Cette première forme de syntaxe est
certainement la plus facile à comprendre mais n’est pas
nécessairement la plus pratique. 50
●
La seconde forme permet de dire à Python l’endroit où est
placée la chaîne de caractères, ou la variable, à l’aide du
signe %.
Dr. S.K. Mehdi smehdi@[Link]
●
Dans ce cas l’affichage est formaté (format géré par le
système, ce qui explique pourquoi le nombre de chiffres
affichés est différent). Il vous faut spécifier le type de
variable que vous voulez afficher, %d ou %i pour un
entier, %f pour un réel, %s pour une chaîne de caractères
●
La liste des variables à afficher doit être placée à la fin de
la commande conformément à la syntaxe %(variable1,
variable2, …); vous pouvez omettre les parenthèses s’il n’y
a qu’une seule variable.
51
●
La troisième forme est une variante de la seconde
apportant plus de flexibilité. L’endroit où le contenu doit
être affiché est indiqué par des accolades. Elles peuvent
être vides {} ou bien contenir l’ordre de la variable dans la
liste (attention ! la première variable possède la position 0).
La liste doit apparaître en bout de chaîne avec la
Dr. S.K. Mehdi smehdi@[Link]
●
La syntaxe {1: .1f } signifiant variable1, format f avec
1 chiffre décimal. 52
2.2.1.b : Dans un fichier
Examinons comment écrire dans un ficher les résultats d’un
script.
A la réflexion, cela soulève de nombreuses difficultés :
●
où voulons nous écrire ce fichier?
Dr. S.K. Mehdi smehdi@[Link]
●
existe-t-il déjà un fichier du même nom?
●
si oui veut-on l’écraser ou écrire les résultats à la suite?
Il est bien sûr possible de résoudre tous ces problèmes.
Dans ce cours nous nous contenterons d’étudier un cas
basique en travaillant dans le répertoire courant et en
décidant que si le fichier existe déjà, il sera remplacé.
53
Dr. S.K. Mehdi smehdi@[Link]
54
●
Exécutez le script avec le nom du fichier à créer en
argument (ici [Link]) : python3 [Link] [Link].
●
Vérifiez que dans votre répertoire de travail, il y a
Dr. S.K. Mehdi smehdi@[Link]
●
La seconde opération fait appel à la méthode write pour
écrire (syntaxe nom_de_fichier.write()).
●
Terminer en fermant le fichier avec nom_de_fichier.close.
Exercice
Modifiez le ‘a’ en ‘w’, exécutez de nouveau le script
(n’oubliez pas de sauvegarder vos modifications) et
examiner ce qui se passe dans le fichier [Link] (la
présentation ne devrait pas être terrible, comment y
remédier?).
56
●
r, pour une ouverture en lecture (READ).
●
w, pour une ouverture en écriture (WRITE), à
chaque ouverture le contenu du fichier est
écrasé. Si le fichier n'existe pas python le
Dr. S.K. Mehdi smehdi@[Link]
crée.
●
a, pour une ouverture en mode ajout à la fin
du fichier (APPEND). Si le fichier n'existe
pas python le crée.
●
b, pour une ouverture en mode binaire.
●
t, pour une ouverture en mode texte.
●
x, crée un nouveau fichier et l'ouvre pour
écriture.
57
L’instruction with permet de simplifier la gestion des
ressources et aide à écrire un code plus expressif.
58
2.2.2 Lecture
2.2.2.a : A l’écran
La fonction input() permet de lire une ligne écrite et de la
stocker dans une variable sous la forme d'une chaîne
(string). Elle n’interprète pas la donnée de l’utilisateur. Elle
accepte un argument optionnel qui permet d’afficher une
Dr. S.K. Mehdi smehdi@[Link]
In [4]: x, y
In [5]: type(x)
In [6]: type(y)
In [7]: y = float(input(prompt))
In [8]: y, type(y)
In [9]: x = int(input(prompt))
In [10]: x, type(x)
In [11]: y = input(prompt)
In [12]: y, type(y)
60
●
Est-il possible d'obtenir plusieurs valeurs de L'utilisateur
dans une ligne de Python?
●
Dans le cas où on veut introduire plusieurs valeurs sur la
Dr. S.K. Mehdi smehdi@[Link]
●
Noter la présence des deux points à la fin de la ligne et de
l’indentation.
●
Il est préférable d’utiliser cette forme d’ouverture à la
première, car c’est Python qui gère à votre place
l’ouverture et la fermeture du fichier.
64
2.3 Structures de contrôle
Les structures de contrôles sont l’âme des langages de
programmation.
Sans eux la programmation ne présenterait aucun
intérêt.
Dr. S.K. Mehdi smehdi@[Link]
2.3.1 Alternatives
En programmation il est fréquent de se trouver dans la
situation où on doit réaliser des opérations particulières
uniquement si certaines conditions sont vérifiées.
Ces situations sont gérées par des blocs d’alternatives.
On distingue deux formes de blocs.
65
Dr. S.K. Mehdi smehdi@[Link]
66
Bloc if
sauté.
Le bloc_if peut être une seule instruction, il doit être
nécessairement indenté, car c’est l’indentation qui indique
à Python la portée des instructions à exécuter. La présence
des deux points (:) indique à Python le début des
instructions.
if (test):
bloc_if # bloc exécuté, test == true
...
67
Bloc if · · · else
Ce bloc est similaire au bloc précédent mais complété par
un bloc_else qui n’est exécuté que si le test renvoie false
Dr. S.K. Mehdi smehdi@[Link]
(faux).
if (test_1):
bloc_if
else:
bloc_else # bloc exécuté si test == false
...
68
Bloc if · · · elif · · · else
L’instruction elif est une contraction de else · · · if.
if (test_1):
bloc_if # test_1 == true
elif (test_2):
bloc_elif # test_2 == true
else:
bloc_else # test_1 == false et test_2 == false
…
70
●
La fonction sqrt() ne peut pas être utilisée
directement, il est nécessaire d’importer le module
math puis de l’appeler comme méthode de cet objet
Dr. S.K. Mehdi smehdi@[Link]
[Link]().
●
Remarquez également comment on peut définir un
nombre complexe à travers sa partie réelle et sa partie
imaginaire avec l’objet complex(Réelle, Imaginaire)
dont l’impression est gérée par Python.
71
2.3.2 Boucles
●
La programmation est le fruit de la répétition (on n’aurait
moins besoin de se simplifier la vie si les choses ne
devaient être faites qu’une seule fois).
Dr. S.K. Mehdi smehdi@[Link]
●
En physique numérique par exemple, toutes les
résolutions approchées d’équations et toutes les
simulations obligent à des calculs répétitifs jusqu’à
atteindre une certaine stationnarité.
●
Tous les langages informatiques possèdent des
instructions permettant de gérer les répétitions.
72
Boucle for
●
Elle est utilisée lorsque le nombre de répétitions (on
dit itérations) est connu.
●
Il s’agit d’exécuter un bloc d’instructions n fois, où n
Dr. S.K. Mehdi smehdi@[Link]
73
Dr. S.K. Mehdi smehdi@[Link]
74
Examinez soigneusement comment fonctionne l’instruction
range(n) où n est un entier.
●
Elle génère une suite de nombres 0, 1, · · ·, n − 1 (elle
commence toujours en 0 et n n’est pas inclus).
Dr. S.K. Mehdi smehdi@[Link]
●
On peut toutefois changer son comportement en utilisant la
syntaxe range(start, stop, step) où start est le premier
nombre généré.
●
Le dernier nombre est (stop − 1), step est un pas
d’incrémentation qui peut être omis s’il vaut 1 (c’est à dire
que la valeur par défaut de step est 1)
●
Par exemple range(1, 7) renvoie [1, 2, 3, 4, 5, 6 ] et
range(1, 7, 2) renvoie [1, 3, 5].
75
Dr. S.K. Mehdi smehdi@[Link]
●
Il est important de noter que la fonction range() ne peut
fonctionner que lorsque la valeur spécifiée est un entier ou un
nombre entier.
●
Il ne prend pas en charge le type de données float et le type de
données string.
●
Cependant, vous pouvez lui transmettre des valeurs entières
positives et négatives.
76
Boucle while
●
La boucle while permet de répéter un bloc
d’instructions (bloc_while) tant qu’une condition logique
est vraie.
●
Le nombre d’itérations est moins contrôlable que dans
Dr. S.K. Mehdi smehdi@[Link]
while condition:
bloc_while
…
78
Exemple d’utilisation des deux instructions précédentes.
On cherche la solution d’une équation f(x) = 0 par
encadrement de la racine (méthode de la dichotomie).
Un algorithme possible est le suivant :
Dr. S.K. Mehdi smehdi@[Link]
79
Nous allons chercher par la méthode de la dichotomie la
solution approchée de f(x)=0.
On prendra comme exemple l’une des deux fonctions
Ci-dessous :
Dr. S.K. Mehdi smehdi@[Link]
●
f(x)= xcot(x)-(R2 – x2)1/2 où R est une constante.
●
f(x) = x **3 - 4* x + 1
80
Dr. S.K. Mehdi smehdi@[Link]
81
Dr. S.K. Mehdi smehdi@[Link]
82
●
Le programme illustre l’utilisation de break, continue et
quit().
Il implémente la méthode de la dichotomie pour résoudre la
l’équation f(x)=0 ; pour epsilon = 10−4 et R = 4.
●
Il effectue cinq itérations, affiche les deux valeurs en cours
qui encadrent la racine inconnue, puis demande si vous
Dr. S.K. Mehdi smehdi@[Link]
désirez continuer.
●
Dans l’affirmative, la recherche continue avec cinq
nouvelles itérations etc... .
●
Lorsque la précision est atteinte, les valeurs finales
encadrant la racine sont affichées et le programme s’arrête.
●
Remarquer l’utilisation de % (modulo) à la ligne 25 pour
gérer les groupes de 5 itérations.
●
Noter qu’à la question de poursuivre les calculs, le
programme n’accepte que les caractères o ou n (ou leurs
équivalents majuscules, pour « oui » ou « non » ) (cf. le
bloc while de la ligne 29).
83
La figure ci dessous montre un exemple d’exécution.
Dr. S.K. Mehdi smehdi@[Link]
84
2.3.3 Les listes
●
On appelle liste une structure de données qui
contient des valeurs encadrées par des crochets.
i. Collection ordonnée et modifiable d’éléments éventuellement
hétérogènes.
Dr. S.K. Mehdi smehdi@[Link]
Exemples :
85
●
Les éléments d’une liste sont indicés par le position avec
démarrage à 0 (le plus grand indice d’une chaîne contenant
n éléments est donc n−1.
●
Ainsi particule[0] renvoie la valeur ‘électron’ et mix[5] la
valeur 0.
Dr. S.K. Mehdi smehdi@[Link]
●
On peut également les indexer par utilisation d’une
numérotation négative.
●
L’indice du denier élément est [−1], l’avant dernier [−2]
etc... .
●
Le tableau ci-dessous explicite la correspondance entre les
indices positifs et négatifs.
●
Le dernier élément d’une liste possède toujours l’indice
−1, ce qui peut s’avérer pratique dans certains cas.
86
●
On peut accéder à des tranches de listes allant d’un
élément m à un élément n (inclus),
en utilisant la syntaxe
liste[m,n + 1]
Dr. S.K. Mehdi smehdi@[Link]
●
où bien à tous les éléments à partir d’un élément donné m
avec liste[m:]
●
On peut sauter des éléments d’une liste en utilisant un pas
d’incrémentation entier p,
●
selon la syntaxe
liste [m:n:p]
●
On peut enfin connaître la longueur d’une liste à l’aide de
l’instruction
len() .
87
Exemples (exécuter les commandes suivantes dans IPython
pour voir le résultat)
88
Quelques opérations sur les listes
Concaténation
Duplication
Dr. S.K. Mehdi smehdi@[Link]
89
Liste de listes
●
On peut construire des listes de listes qui sont d’un
Dr. S.K. Mehdi smehdi@[Link]
●
Si l1, l2, . . . , ln sont n listes regroupées dans une liste L
L= [l1,l2,. . . , ln]
90
# -*- coding: utf-8 -*-
U = [’A = 238’, ’Z = 92’, ’T = 4.5e9 ans’, ’alpha’]
Th = [’A = 234’, ’Z = 90’, ’T = 24.1 jours’, ’beta’]
Ra = [’A = 226’, ’Z = 88’, ’T = 1602 ans’, ’alpha’]
chaine = [U, Th, Ra]
print "La liste ’chaine’ est une liste de listes et contient\n{}".format(chaine)
print "Le Thorium a pour nombre de masse {0}, et se désintègre par émission {1}."\
.format(chaine[1][0], chaine[1][3])
print "Le Radium se désintègre par emission ,chaine[-1][-1],et a pour période , chaine[-1][-2]"
Dr. S.K. Mehdi smehdi@[Link]
91
Dictionnaires
●
En Python, on appelle dictionnaire, une liste particulière
dont les objets sont accessibles non par par leur position
(en l’occurrence un entier), mais par des mots clés, qui
Dr. S.K. Mehdi smehdi@[Link]
>>> dico1 = { }
>>> dico1 [" nom "] = " girafe "
>>> dico1 [" taille "] = 5.0
>>> dico1 [" poids "] = 1100
Dr. S.K. Mehdi smehdi@[Link]
>>> dico1
{ ' nom ': ' girafe ' , ' taille ': 5.0 , ' poids ': 1100}
●
En premier, on définit un dictionnaire vide avec les
accolades { } (tout comme on peut le faire pour les listes
avec [ ]).
●
Ensuite, on remplit le dictionnaire avec différentes clés
("nom", "taille", "poids") auxquelles on affecte des valeurs
("girafe", 5.0, 1100). Vous pouvez mettre autant de clés
que vous voulez dans un dictionnaire (tout comme vous
pouvez ajouter autant d’éléments que vous voulez dans
une liste).
93
●
On peut aussi initialiser toutes les clés et les valeurs d’un
dictionnaire en une seule opération :
>>> dico2 = {" nom ": " singe " , " poids ": 70 , " taille ": 1.75}
●
Pour récupérer la valeur associée à une clé donnée, il suffit
d’utiliser la syntaxe suivante dictionnaire["cle"]. Par exemple :
Dr. S.K. Mehdi smehdi@[Link]
95
Dr. S.K. Mehdi smehdi@[Link]
●
Le script montre deux exemples de déclaration d’un
dictionnaire :
●
une déclaration explicite à la ligne 5 où sont définies les
clés et les valeurs selon le modèle {clé:valeur}
●
une déclaration en partant de zéro, en créant d’abord
un dictionnaire vide à la ligne 9 puis en y entrant les
clés et leurs valeurs avec dict[clé]=valeur.
●
L’accès à un dictionnaire se fait par mots clés, il n’y a pas
d’ordre précis à respecter comme pour les listes.
●
Les instructions print des lignes 16 et 18 montrent
comment accéder aux valeurs d’un dictionnaire. La syntaxe
s’écrit simplement dict[clé] , le résultat est la valeur
correspondante. 96
●
La boucle de la ligne 25 permet de clarifier la distinction
entre liste et dictionnaire.
●
Nous avons fabriqué une liste, maListe, de deux
dictionnaires, le premier dictionnaire constitue le premier
élément de maListe, son indice est donc 0 et on y accède
par maListe[0] , le second dictionnaire est le second
Dr. S.K. Mehdi smehdi@[Link]
98
Soit le tuple noté t : >>> t = (23, ‘abc’, 4.56, (2,3), ‘def’)
●
On ne peut pas changer un tuple, par contre on peut créer un nouveau
tuple et affecter sa référence à un nom précédemment utilisé.
>>> t = (23, 'abc', 3.14, (2,3), 'def')
99
●
L'immuabilité des tuples signifie qu'ils sont plus rapides que les listes.
2.3.5 Les fonctions
●
Ensemble d’instructions regroupées sous un nom et
s’exécutant à la demande.
100
●
Définir une fonction en Python (ou en tout autre langage
de programmation) exige de vous la maîtrise d’un
algorithme.
Dr. S.K. Mehdi smehdi@[Link]
●
La grammaire Python nous dit qu’une fonction doit-être
définie avec la syntaxe suivante :
101
[Link] Un ou plusieurs paramètres, pas de return (retour)
C’est ce qu’on appelle souvent une procédure. Dans ce cas la fonction
renvoie implicitement la valeur None :
Exemple sans l’instruction return :
Dr. S.K. Mehdi smehdi@[Link]
102
[Link] Un ou plusieurs paramètres, utilisation du return
Utilisation d’un return unique :
Dr. S.K. Mehdi smehdi@[Link]
return unique
return multiple
103
[Link] Portée d’une variable
104
Les variables définies dans une fonction sont appelées
variables locales.
105
Les variables définies dans l’espace global du script, c’est-à-
dire en dehors de toute fonction sont appelées des variables
globales.
106
Dr. S.K. Mehdi smehdi@[Link]
●
Dans cette exemple, on vérifie bien que la variable g, définie à
l’extérieur de la fonction est bien reconnue par la fonction, on appelle
cette variable une variable globale.
●
La variable x définie (et utilisée) dans la fonction n’est pas confondue
avec la variable globale x définie à l’extérieur, ce qui explique
l’impression obtenue.
●
Les variables définies dans une fonction sont dites locales.
107
2.3.6 Modules
Un programme Python est généralement composé de
plusieurs fichiers sources, appelés modules.
S’ils sont correctement codés les modules doivent être
indépendants les uns des autres pour être réutilisés à la
demande dans d’autres programmes.
Dr. S.K. Mehdi smehdi@[Link]
110
Dr. S.K. Mehdi smehdi@[Link]
111
Dr. S.K. Mehdi smehdi@[Link]
112
Pendant la mise au point de votre module, vous allez probablement
corriger ou modifier vos programmes, et vous allez vous apercevoir
que la commande import ne tient pas en compte de vos
modifications.
En fait Python travaille avec vos programmes copiés dans un
cache.
Il faut le forcer à recharger le module, utiliser la commande
Dr. S.K. Mehdi smehdi@[Link]
113
2.4 Calculs scientifiques avec NumPy
114
●
Il offre ainsi une bibliothèque impressionnante de
fonctions mathématiques qui opèrent sur les tableaux
et les matrices.
Dr. S.K. Mehdi smehdi@[Link]
●
Un tableau est un objet array (plus précisément
ndarray) pour Python.
●
Un array ressemble beaucoup à une liste mais
n’admet comme éléments que des nombres de même
type.
●
On convertit une liste (ou un tuple) en objet array en
utilisant la méthode array()
115
array()
Cette méthode apparaît comme la plus naturelle pour créer des
tableaux de toutes dimensions (y compris des scalaires identifiés
à des tableaux d’ordre 0).
Dr. S.K. Mehdi smehdi@[Link]
— Scalaire :
— Tableau 1D :
— Tableau 2D :
116
●
Les objets de type array correspondent à des tableaux à une ou
plusieurs dimensions et permettent d’effectuer du calcul vectoriel.
●
La fonction array() convertit un objet séquentiel (comme une liste ou un
tuple) en un objet de type array. Voici un exemple simple de conversion
Dr. S.K. Mehdi smehdi@[Link]
117
Dr. S.K. Mehdi smehdi@[Link]
118
2.4.1 Construction d’un array
arange()
La syntaxe de la fonction est :
arange(début,fin,incr,dtype)
Cette fonction permet de construire un tableau à une dimension,
de valeurs régulièrement espacées dans l’intervalle semi-ouvert
Dr. S.K. Mehdi smehdi@[Link]
[début,fin[.
Si début n’est pas donné, il est mis à 0.
Si le pas d’incrémentation incr est précisé, alors début doit l’être
aussi.
dtype permet de convertir la sortie vers un type donné.
119
La différence fondamentale entre un objet array à une dimension et une
liste (ou un tuple) est que celui-ci est considéré comme un vecteur.
Par conséquent, on peut effectuer des opérations élément par élément sur
ce type d’objet, ce qui est bien commode lorsqu’on analyse de grandes
quantités de données. Regardez ces exemples :
Dr. S.K. Mehdi smehdi@[Link]
120
linspace()
122
— Aide à la construction de matrices
123
— Fonction reshape() : Supposons que vous ayez à saisir
dans Python la matrice suivante :
Dr. S.K. Mehdi smehdi@[Link]
124
2.4.2 Des mathématiques avec NumPy
Nous allons montrer sur quelques exemples les facilités introduites par les méthodes
de NumPy dans la manipulation des tableaux.
1. Construire une table des sinus des angles entre 0 et 90°
Dr. S.K. Mehdi smehdi@[Link]
125
2. Calcul du produit des deux matrices
On peut aussi utiliser la fonction .mat() pour créer une matrice et .dot() pour
faire le produit.
126
3. Trouver les valeurs propres et les vecteurs propres
d’une observable qui est représentée dans une certaine base
Dr. S.K. Mehdi smehdi@[Link] orthonormée,
[Link](A)
[Link](A)
[Link](A)
128
2.5 Le graphisme scientifique
Python est capable de produire du graphisme de qualité
Matlab par adjonction de la bibliothèque matplotlib (conçue
comme une extension à numpy). Nous allons ici présenter
une introduction au graphisme 2D (Python est aussi capable
Dr. S.K. Mehdi smehdi@[Link]
129
Le graphe est toujours proposé avec des outils pour pouvoir
l’exploiter (voir figure ci dessous), dont une des possibilités
Dr. S.K. Mehdi smehdi@[Link] est la sauvegarde de ce graphe sous différents formats.
131
Dr. S.K. Mehdi smehdi@[Link]
132
Exemple 2
133
Dr. S.K. Mehdi smehdi@[Link]
134
Exemple 2
135
Dr. S.K. Mehdi smehdi@[Link]
136
Exemple 4 :
Nous allons montrer maintenant comment tracer des courbes à partir de
données sauvegardées dans un fichier (données expérimentales ou
provenant d’un programme tiers). La figure ci-dessous montre un extrait
d’un fichier [Link] contenant les calculs de la position (col 2) et la vitesse
(col 3) en fonction du temps (col 1) d’un oscillateur harmonique soumis à
une force échelon.
Dr. S.K. Mehdi smehdi@[Link]
137
Nous allons tracer sur un même graphe les graphes de x(t) et v(t) avec
des échelles différentes à gauche et à droite. Pour ce faire nous allons
utiliser les méthodes du script ci-dessous.
Dr. S.K. Mehdi smehdi@[Link]
138
Dr. S.K. Mehdi smehdi@[Link]
139
Lorsque les données sont stockées comme ici, dans des tableaux
réguliers avec des données séparées par des blancs, une solution
simple est d’utiliser la fonction numpy, loadtxt.
140
Exemple 5 :
●
En statistiques il est commun de représenter la répartition de
variables à l’aide d’histogrammes. Le sous-module pyplot de
matplotlib contient une méthode hist() qui permet de le faire
simplement.
Dr. S.K. Mehdi smehdi@[Link]
●
Les simulations, qui sont un domaine de prédilection pour les
histogrammes, font également appel de manière massive à des
variables aléatoires qui sont générées numériquement par des
générateurs pseudo-aléatoires.
●
Tous les langages possèdent aujourd’hui de tels générateurs
(plus ou moins performants). Python en possède plusieurs dont
la méthode random() du module random (de numpy) qui génère
des nombres aléatoires de distribution uniforme entre 0 et 1.
141
●
Nous allons produire un grand nombre de nombres aléatoires à
l’aide de cette fonction puis tester l’uniformité à l’aide d’un
histogramme, puis dans un second temps illustrer le théorème de
la limite centrée qui stipule que la somme de variables aléatoires
de même distribution tend vers une variable aléatoire gaussienne.
●
Le script ci-dessous montre une manière d’utiliser le générateur et
la fonction hist() (décodez le programme pour essayer de
Dr. S.K. Mehdi smehdi@[Link]
142
Dr. S.K. Mehdi smehdi@[Link]
143
Exemple 6 :
Dans l’exemple qui suit nous allons illustrer sur un exemple pratique
comment définir :
●
une échelle semi-logarithmique,
●
un lissage par un polynôme
●
et des barres d’erreurs.
Dr. S.K. Mehdi smehdi@[Link]
145
Dr. S.K. Mehdi smehdi@[Link]
146
●
Supposons que la physique de l’événement suggère une
décroissance exponentielle N = Ae-at du nombre d’événements
avec le temps (le graphe du haut semble le suggérer mais il ne
s’agit pas pour le moment d’une preuve).
Dr. S.K. Mehdi smehdi@[Link]
●
Pour prouver qu’il s’agit d’une loi exponentielle, nous allons
tracer le même graphe en échelle semi-logarithmique (méthode
semilogy() ) et vérifier qu’il s’agit bien d’une droite d’équation
log(N) = at + log(A).
●
Comme le montre le graphe du bas à gauche, la loi exponentielle
est confirmée.
147
●
Trouvons par ajustement linéaire les coefficients A et a de
l’exponentielle.
A = 100.08501870535282
a = -0.5003003950476441
148