0% ont trouvé ce document utile (0 vote)
31 vues148 pages

IntroPython Unlocked

Transféré par

ladjnef samir
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
31 vues148 pages

IntroPython Unlocked

Transféré par

ladjnef samir
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Dr. S.K. Mehdi smehdi@usthb.

dz
Introduction à Python

1
Pourqoui Python?
1) Open source

python
print('Hello, World!')
Dr. S.K. Mehdi smehdi@[Link]

2) Syntaxe aussi simple que


l'anglais
public class Hello{
public static void main(String
3) une grande communauté argv[]){
active et collaborative

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 4: Vérifiez que


Python est installé
avec succès

Interactive mode -> Command line 6


Interactive(CLI)
Étape 1 :Sélectionner Open 'Start' menu and type
la Version de Python 'cmd'
à installer

Étape 2: Télécharger
Python executable
installer
smehdi@[Link]

Étape 3: Run pip -V


Dr. S.K. Mehdi

executable installer

Étape 4: Vérifiez que


Python est installé avec
succès

Étape 5: Vérifiez pip


est installé
7
Python IDE
Integrated Development Environment (Text Editor)
smehdi@[Link]
Dr. S.K. Mehdi

PyCharm Eclipse Spyder

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]

Exécuter dans un terminal

sudo apt install python3

sudo apt install python3-pip

sudo apt install python3-numpy : calcul numérique

sudo apt install python3-scipy : calcul numérique

sudo apt install python3-matplotlib : graphisme

sudo apt install python3-pandas : analyse de données

sudo apt install python3-simpy : calcul symbolique

sudo apt install ipython3 :terminal interactif


9
Historique :

1989 : 1er version de Python [Guido van Rossum] (Pays Bas)


Dr. S.K. Mehdi smehdi@[Link]

1991 : 1er version grand publique : 0.9.0

----
----

2006 : version 2.5

2009 : version 2,6 et une nouvelle version 3.0.0 (incompatible avec v2.x)

2020 : version 3.8.x et abandon du support pour Python 2.x

Actuellement, deux versions de python cohabitent, et qui peuvent etre


installées en parallèle sur un même ordinateur :
Python 2.7.x
Python 3.8.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

Langage Open Source : [Link]


– Licence Open Source CNRI, compatible GPL, mais sans la restriction
Dr. S.K. Mehdi smehdi@[Link]

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é

– De nombreux modules sont disponibles à partir de bibliothèques


optimisées écrites en C, C++ ou FORTRAN
11

Simplicité du langage :

– Syntaxe claire et cohérente


– Indentation significative
– Gestion automatique de la mémoire (garbage collector)
– Typage dynamique fort : pas de déclaration
Dr. S.K. Mehdi smehdi@[Link]


Orientation objet :

– Modèle objet puissant mais pas obligatoire


– Structuration multi-fichier très facile des applications : facilite les
modifications et les extensions
– Les classes, les fonctions et les méthodes sont des objets dits de
première classe.
Ces objets sont traités comme tous les autres (on peut les affecter, les
passer en paramètre)

Ouverture au monde :

– Interfaçable avec C/C++/FORTRAN


– Langage de script de plusieurs applications importantes
– Excellente portabilité

Disponibilité de bibliothèques :

– Plusieurs milliers de packages sont disponibles dans tous les domaines

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]

souple mais les codes générés sont peu performants : l’interpréteur


doit être utilisé à chaque exécution…

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

Comme tout langage, Python permet de manipuler des données grâce


à un vocabulaire de mots réservés et grâce à des types de données.

Python 3 possède 33 mots réservés :


Dr. S.K. Mehdi smehdi@[Link]

and as assert break class continue def


del elif else except False Finally for
from global if import in is
lambda None nonlocal not or pass
raise return True try while with yield

On ne peut pas nommer une variable avec un mot réservé :

Python 3 possède aussi 72 fonctions internes (built-in functions),


comme par exemple (abs, int, eval, …) qu’on verra plus loin.

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 :

• Soit on enregistre un ensemble de commandes Python dans un


fichier grâce à un éditeur (on parle alors d’un script Python) que l’on
exécute par une commande ou par une touche du menu de l’éditeur.
Dr. S.K. Mehdi smehdi@[Link]

• Soit on utilise un interpréteur (par exemple IDLE) pour obtenir un


résultat immédiat grâce à l’interpréteur Python embarqué dans IDLE
qui exécute la boucle d’évaluation.

(IDLE : Integrated Development and Learning Environment)

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]

A l’invite $, taper python (dans le cas de python 2.x) ou python3


(dans le cas de python 3.x). Vous devez voir apparaître quelque
chose comme ceci :

Les trois chevrons >>> constituent l’invite de commande ou


simplement le prompt qui signale que Python est prêt à exécuter
18
une commande, c’est ce qu’on appelle le mode interactif.
Utilisation d’un éditeur de texte

Le mode interactif peut s’avérer pratique pour des calculs
ponctuels, comme faire tourner des petits programmes, et dans la
phase de mise au point des programmes. Il serait fastidieux de
l’utiliser pour exécuter des programmes complexes contenant de
Dr. S.K. Mehdi smehdi@[Link]

nombreuses lignes de code.



Il est souvent préférable d’utiliser un éditeur de texte comme {gedit
sous Linux ou bloc note sous Windows} (attention ! Ne pas utiliser
un traitement de texte) pour écrire vos programmes.
La procédure consiste à écrire le code dans l’éditeur, le
sauvegarder sous un nom quelconque avec l’extension .py puis
l’exécuter en l’invoquant.

Pour illustrer la méthode nous allons quitter le Shell Python (une
autre façon de nommer l’interpréteur de commandes) en utilisant la
commande quit() ou bien CTRL D. Nous revenons ainsi dans le
Shell Linux pour lancer gedit suivi du nom de fichier. (dans
l’exemple ci dessous, le fichier testé s’appelle [Link]).

19
Dr. S.K. Mehdi smehdi@[Link]

Finalement lancer l’exécution


dans un terminal.
(assurez vous d’être dans votre
répertoire de travail).
20
Opérations en mode interactif
Nous allons montrer maintenant ce que l’on peut faire à l’aide du Shell Python.
Commençons par des opérations algébriques élémentaires :
Dr. S.K. Mehdi smehdi@[Link]

Figure (a) Figure (b)


Rappel : La présence des chevrons >>> signifie que nous 21
travaillons avec l’interpréteur de commandes.
Commentaires concernant la figure (a)


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]

La courbe peut-être sauvegardée pour être utilisée ailleurs.


26
Nous verrons plus loin le graphisme plus en détail.
Une autre façon d’exécuter un script Python

Nous appellerons script Python tout fichier avec


Dr. S.K. Mehdi smehdi@[Link]

une extension .py « [Link] » .



On dit que Python est un langage de script car sa
fonction est d’interpréter un programme (appelé
script) et de le rendre immédiatement exécutable
sans passer par une compilation.

Cette faculté d’interprétation permet d’exécuter des
scripts d’une façon très pratique et qui suggère
d’autres façons d’utiliser Python.

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]

Les règles qui régissent leur manipulation sont


complexes. Un nombre est stocké dans la mémoire de
l’ordinateur sous une forme adéquate (avec des 0 et des
1) et repéré par une adresse.

Pour manipuler des nombres il faut connaître leurs


adresses. Cela est bien sûr réalisable (c’est ce que l’on
faisait au début de l’informatique) mais au prix d’une
grande débauche d’énergie (humaine) et des sources
d’erreurs considérables.

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]

Ainsi si on désire affecter un entier 1 à la variable x, on


écrira x = 1 (ce n’est pas une égalité mais une affectation,
certains langages utilisent x := 1. L’opération est bien
imagée par la symbolique x ← 1).

L’interpréteur va servir d’interface entre le programmeur (la


variable x) et l’adresse physique, qui représente son
contenu.

Python est d’ailleurs capable de vous dire le type de votre


variable et son adresse comme dans l’exemple ci-dessous

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]

Le type nombre est le plus riche, il possède plusieurs


sous-types : entier (int), réel (float), complexe (complex).

Le problème est que la représentation d’une variable en


mémoire dépend du type et du sous-type de l’entité qu’elle
représente (ajouter deux entités dont les représentations
sont différentes c’est comme vouloir ajouter une vitesse et
une position, l’opération n’ayant aucun sens).

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]

implicite que toutes les variables commençant par les


lettres I, J, K, L, M, N sont entières); rien de tel avec
Python qui examine d’abord ce que vous avez
mis dans la variable avant de décider du type de
variable.

Une propriété que vous devez retenir est que les
entiers sont toujours représentés de manière exacte
en mémoire.

Ce n’est pas le cas des réels dont la représentation
est approchée, ce qui est compréhensible.

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 ?

2. L’opération In [5] est-elle exacte ? Quel est le


type de a, b et c ?
Nous avons affirmé que l’on ne peut pas effectuer
Dr. S.K. Mehdi smehdi@[Link]

d’opérations avec des représentations différentes, à


votre avis que fait Python lorsqu’il effectue
l’opération In [7] ?

3. Quel est le type de d+d+d+d ? Comment


s’appelle cette opération ?

4. Quel est le type de f ? Quel est l’équivalent du


symbole mathématique imaginaire en Python ? Que
représente g pour f ? Le résultat In [10] est-il exact ?

39
Opérateurs booléens et
logiques

Considérons les variables :


a = 1, b = 1, c = ”Physique”
et d = ”physique”.
Dr. S.K. Mehdi smehdi@[Link]


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

Dr. S.K. Mehdi smehdi@[Link]

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.

Les propositions inverses (a n’est pas égal à b et c n’est


pas égal à d) donnent évidemment les résultats
complémentaires.

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]

Exercice Évaluez les relations suivantes


1. 5 < 6
2. 5 <= 6
3. 5 == 6
4. 5 > 6
5. 5 >= 5

Exercice On donne a = −5.0, b = 0.1, c = 2.5 et trois variables logiques


l1 = True, l2 = False, l3 = False. Compléter le tableau suivant (faites
l’exercice de tête avant de vérifier vos prédictions avec Python).
Attention, il se peut qu’il y ait des expressions illégales.

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

Dr. S.K. Mehdi smehdi@[Link]


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.

Commençons par expliquer l’instruction en tête du fichier


# − ∗ − coding: utf − 8 − ∗− .
Dr. S.K. Mehdi smehdi@[Link]


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

Sans ce codage (appelé Unicode utf-8), python ne peut


pas gérer les accents y compris dans des commentaires.

Quand on travaille dans une langue autre que l’anglais il
faut penser à ajouter cette ligne en tête de votre fichier.
48
UTF-8 est un encodage universel qui a pour objectif de
réunir les caractères utilisés par toutes les langues. Il n'y a
donc en théorie plus de problèmes de communication si
tous les programmes sont encodés avec de l' UTF8.
Dr. S.K. Mehdi smehdi@[Link]

Par défaut dans python 2.7 l'encoding est ASCII , il est


donc nécessaire d'indiquer l'encodage UTF8 à chaque fois

Pour cela il vous faudra indiquer dans l'entête l' encodage


UTF-8 les lignes suivantes:
# -*- coding: utf-8 -*-
Ou bien :
# coding: utf-8

Ce n’est plus le cas pour Python 3.x ; car par défaut


l'encoding est en utf-8 pour python 3.

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]

syntaxe .format(variable1,variable2, ...).


La méthode format vous permet également d’afficher les
nombres avec la précision que vous voulez. Supposons
que vous désirez afficher les énergies avec une seule
décimale, il vous faudra préciser, dans les accolades, le
format désiré.


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é.

Reprenons l’exemple utilisé précédemment; nous allons


simplement rediriger la sortie vers un fichier nommé [Link]

Tapez le code suivant et sauvegardez le nom sous le nom


[Link].

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]

maintenant un tel fichier.



Ouvrez le avec l’éditeur et vérifiez qu’on y trouve bien ce
à quoi on s’attend.

Nous avons choisi d’utiliser le nom du fichier à créer
comme argument, on peut évidemment faire le choix de
le donner dans le programme ou bien, de façon à ce que
le programme le demande (dans ces deux cas on n’a
plus besoin d’importer le module sys).

L’important réside dans la façon de créer le fichier et d’y
écrire.
55

La première opération fait appel à la commande
open(nom_de_fichier,’w’ ) ou nom_de_fichier est une
chaîne de caractères, l’option ‘w’ signifie qu’il sera ouvert
en mode écriture (si vous ne précisez aucune option, il
sera par défaut ouvert en mode lecture, donc Python
s’attend à ce qu’il soit présent sur le disque).
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.

étant donné que chaque appel à la fonction open() doit


Dr. S.K. Mehdi smehdi@[Link]

avoir un appel correspondant avec la fonction close(),


l’instruction with ferme automatiquement le fichier lorsque
le code est exécuté.

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]

chaîne de caractères (par exemple, pour donner des


informations). La touche Enter termine la saisie.

Exemple : a = input()
b = input()
s=a+b
print(s)

Faut pas oublier de faire la conversion caractère (string)


vers un float (ou bien un int) si le calcul demande ça.

Pour mieux comprendre la fonction input(), exécuter (dans
IPython) l’exercice suivant, en donnant comme réponses à
l’invite les valeurs suivantes : 1, a, 1, 10−3, a, ‘a’ . 59
In [1]: prompt = ’Entrer quelque chose: ’
In [2]: x = input(prompt)
In [3]: y = input(prompt)
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]

même ligne de python, on utilise alors en plus de la


fonction input, une autre fonction nommée split().

Cette fonction permet d’obtenir plusieurs entrées de
l’utilisateur. Il rompt l’entrée donnée par le séparateur
spécifié. Si aucun séparateur n’est fourni, tout espace
blanc est un séparateur.

Exemple :

var1, var2 = input (“votre nom et votre age”).split ()

(“/”) : ici le symbole / est utilisé comme séparateur


61
2.2.2.b : Dans un fichier

Tapez dans votre éditeur, un texte qui ressemble à celui


qui suit, et sauvegardez le dans votre répertoire courant
sous un nom quelconque (ici [Link]),
Dr. S.K. Mehdi smehdi@[Link]

Exécutez alors le script suivant

fichier = open(input(’Entrer le nom du fichier à lire : ’),’r’)


texte = [Link]()
[Link]()
print (texte)

A l’invite donnez le nom de votre fichier ([Link]),


vous devez obtenir à l’écran son contenu.
62

Chaque fois que vous ouvrez un fichier, il est fortement
recommandé de le fermer à la fin de son utilisation. Si
vous utilisez l’instruction with, vous n’avez plus besoin
d’invoquer explicitement la méthode close().

Le script suivant effectue le même travail que le précédent
Dr. S.K. Mehdi smehdi@[Link]

fichier = input(’Entrer le nom du fichier à lire: ’)


with open(fichier, "r") as fichier:
print ([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.

La méthode présentée se contente de lire et d’afficher du


texte. Nous verrons plus loin comment lire des données
numériques. 63
Les modes d’ouverture de fichier les plus couramment
Dr. S.K. Mehdi smehdi@[Link]
utilisés sont montrés dans le tableau ci-dessous

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]

Par structure de contrôle nous entendons une


instruction qui permet de modifier, ou de dévier l’ordre du
flot d’exécution (les instructions du programmes) suivant
des critères définis par le programmeur.
Nous allons décrire ici les structures de contrôles
fondamentales de la programmation impérative.

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

Si test est une variable ou une relation logique dont le


résultat est true (vrai), le bloc_if est exécuté, sinon il est
Dr. S.K. Mehdi smehdi@[Link]

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.

Ce bloc permet de réaliser plusieurs tests (le nombre de


blocs elif n’est pas limité). Un premier test est effectué sur
test_1, si le résultat est true, le bloc_if est exécuté, dans le
Dr. S.K. Mehdi smehdi@[Link]

cas contraire, la condition test_2 est testée et le bloc_elif


exécuté si la réponse est true. Si les tous les tests
renvoient false, c’est le bloc_else qui est exécuté.

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

Un exemple avec la résolution de l’équation du second


degré 69
Dr. S.K. Mehdi smehdi@[Link]

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]

est le nombre d’objets d’une collection (nombres,


chaînes de caractères, ...).

L’algorithme de la boucle est :

for var in collection:


bloc_for
...

var est la variable qui prend à chaque itération, la


valeur d’un élément de la collection. Les deux exemples
qui suivent explicitent le fonctionnement :

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]

le cas d’une boucle for.



La syntaxe de la commande est la suivante,

while condition:
bloc_while

Il faut prendre soin à ce que la condition soit initialisée à


« vrai » avant la boucle et qu’elle soit susceptible d’être
modifiée dans le corps de la boucle, pour que l’on ne
répète pas indéfiniment le bloc.
De nouveau c’est l’indentation qui définit les instructions
à répéter.
77
Sortir d’une boucle
On a besoin parfois de quitter un cycle d’itérations lorsqu’une
condition particulière est remplie. L’instruction qui permet de
le faire est break ( elle stoppe la boucle).
Dr. S.K. Mehdi smehdi@[Link]

Sauter des itérations


Pour sauter des étapes dans l’itération,
on peut utiliser la commande
continue. (elle saute à l’itération
suivante, sans exécuter la suite
du bloc d’instructions de la boucle).

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]

Requiert: a et b encadrant la racine, Epsilon précision


Assure: zéro approché par la méthode dichotomique

1: procédure Dichotomie(a, b) solution approchée de f(x) = 0


2: tant que (b − a ) > e faire
3: m ← (a + b) /2
4: si f(a) ∗ f (b) < 0 alors
5: b←m
6: sinon
7: a←m
8: afficher a et b valeurs encadrant la racine à Epsilon près

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

Le nombre d’itérations dépend de la précision Epsilon


demandée.
Nous limiterons le nombre d’itérations et laisserons le choix
à l’utilisateur de continuer la recherche ou de quitter le
script.

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]

ii. Éléments séparés par des virgules, et entourés de crochets.

Exemples :

particule = [‘électron’, ‘proton’, ‘neutron’]


charges = [−1.6 10−19, 1.6 10−19,0]

Python autorise le mélange des genres comme dans

mix = [‘électron’,−1.6 10−19, ‘proton’,1.6 10−19,‘neutron’,0 ]

où des chaînes de caractères (str) côtoient des réels


(float) et des entiers (int).

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)

liste = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


Dr. S.K. Mehdi smehdi@[Link]

liste[0:] # liste de tous les éléments


liste[:] # liste de tous les éléments
liste[2] # valeur du troisième élément
liste[2:3] # liste ne contenant que le troisième élément
liste[-1] # valeur du dernier élément
liste[:-1] # liste de tous éléments sauf le dernier
liste[1:] # liste de tous éléments sauf le premier
liste[::2] # liste de tous éléments de la liste en en sautant un
len(liste) # longueur de liste

88
Quelques opérations sur les listes

Concaténation

Elle est réalisé à l’aide de l’opérateur + .

Duplication
Dr. S.K. Mehdi smehdi@[Link]

Elle est réalisée à l’aide de l’opérateur ∗ .

Quelques opérations sur les listes


Concaténation Elle est réalisé à l’aide de l’opérateur + .
Duplication Elle réalisée à l’aide de l’opérateur ∗ .

89
Liste de listes

On peut construire des listes de listes qui sont d’un
Dr. S.K. Mehdi smehdi@[Link]

usage très pratique.



L’accès aux éléments se fait également par un indexage
que nous allons expliciter.


Si l1, l2, . . . , ln sont n listes regroupées dans une liste L

L= [l1,l2,. . . , ln]

l’accès à l’élément i de la liste lj est donné par L[j][i] .

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]

peuvent être de tout type.



Les dictionnaires sont des collections non ordonnées
d’objets, c’est-à-dire pas d’indice.

Ces objets sont sous formes de couples cle : valeur
séparés par des virgules et entourés d’accolades.

Exemple :

cage = { ' nom ': ' girafe ' , ' taille ': 5.0 , ' poids ': 1100}

Nom du dictionnaire objets 92


Dans un shell python, on écrit les commandes suivantes :

>>> 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]

>>> dico1 [" taille "]


5.0

On peut aussi utiliser les méthodes .keys() et .values() qui
renvoient, comme vous pouvez vous en doutez, les clés et les
valeurs d’un dictionnaire :
>>> [Link] ()
dict_keys ([ ' poids ' , 'nom ' , ' taille '])
>>> dico2 . values ()
dict_values ([70 , ' singe ' , 1.75])

Nous allons montrer sur un exemple les manipulations simples sur


les dictionnaires.
Considérer le script ci-dessous
94
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]

élément (indice 1).



Si on veut itérer sur les éléments d’un dictionnaire (de
manière automatique), il faut itérer sur ses clés.

On peut connaître toutes les clés d’un dictionnaire en
utilisant la méthode keys() , ainsi [Link]() renvoie une
liste contenant tous les mots clés de dict (alternativement
[Link]() renvoie la liste de toutes les valeurs
associées aux clés).

Donc [Link]()[0] est la première clé de la liste. Toutes
les manipulations sur les listes vues précédemment,
s’appliquent ici, ce qui permet de comprendre l’écriture
des lignes 25 et 26.
97
2.3.4 Les tuples

On appelle tuple une forme de liste que l’on ne peut pas
modifier. Pour le définir on utilise les parenthèses ().

Les tuples seront utilisés avantageusement dans des
Dr. S.K. Mehdi smehdi@[Link]

situations où on a affaire à des objets « constants ».

Des exemples avec des explications en commentaires.

98
Soit le tuple noté t : >>> t = (23, ‘abc’, 4.56, (2,3), ‘def’)

Dr. S.K. Mehdi smehdi@[Link]


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.

Les fonctions en programmation sont un moyen d’associer


Dr. S.K. Mehdi smehdi@[Link]

à un ensemble d’opérations complexes, un objet que l’on


invoquera pour les réaliser.

Du point de vue de l’efficacité la tâche n’est rentable que si
cet ensemble d’opérations est fréquemment utilisé.

Du point de vue de la flexibilité, il est préférable que l’objet
effectue une tâche unique.

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 :

def nom_fonction(liste de paramètres):


bloc d’instructions

où les deux points et l’indentation sont obligatoires..

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

Utilisation d’un return multiple :

return multiple

103
[Link] Portée d’une variable

En Python, nous pouvons déclarer des variables n’importe


où dans notre script : au début du script, à l’intérieur de
boucles, au sein de nos fonctions, etc.
Dr. S.K. Mehdi smehdi@[Link]

L’endroit où on définit une variable dans le script va


déterminer l’endroit où la variable va être accessible c’est-à-
dire utilisable.

Le terme de “portée des variables” sert à désigner les


différents espaces dans le script dans lesquels une variable
est accessible c’est- à-dire utilisable.

En Python, une variable peut avoir une portée locale ou


une portée globale.

104
Les variables définies dans une fonction sont appelées
variables locales.

Elles ne peuvent être utilisées que localement c’est-à-dire


qu’à l’intérieur de la fonction qui les a définies.
Dr. S.K. Mehdi smehdi@[Link]

Tenter d’appeler une variable locale depuis l’extérieur de la


fonction qui l’a définie provoquera une erreur.

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.

Ces variables sont accessibles (= utilisables) à travers


l’ensemble du script et accessible en lecture seulement à
Dr. S.K. Mehdi smehdi@[Link]

l’intérieur des fonctions utilisées dans ce script.

Une fonction va pouvoir utiliser la valeur d’une variable


définie globalement mais ne va pas pouvoir modifier sa
valeur c’est-à-dire la redéfinir.

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]

Un grand nombre de modules, de bibliothèques, viennent se


greffer à Python (ils constituent les raisons de son succès).
Les scientifiques en utilisent certains de manière courante,
le plus utile étant probablement le module math que nous
avons déjà rencontré. Mais rien n’empêche un utilisateur de
fabriquer ses propres modules.

Import d’un module


Deux syntaxes possibles :
• la commande import <nom_module> importe la totalité des
objets du module :

• la commande from <nom_module> import obj1, obj2...


n’importe que les objets obj1, obj2... du module 108
Imaginez que vous preniez un cours de Radioactivité et que
vous trouvez que c’est toujours les mêmes calculs barbants
qui reviennent, vous décidez d’écrire des petits scripts que
vous allez associer à un module que vous appelez
radioactivité. Vous choisissez d’écrire trois scripts, un script
qui calcule l’activité d’une source, un autre qui calcule les
Dr. S.K. Mehdi smehdi@[Link]

activités d’une filiation de deux radioéléments et un dernier


qui calcule les rapports d’embranchement d’un radioélément
qui décroît selon deux voies.

Voilà comment procéder pour fabriquer votre module


1. Écrire vos scripts (appelés ici activite() , filiation() et
branchement().
2. Les enregistrer dans un fichier (.py) (ici [Link])
dans votre répertoire de travail (pour ceux qui ne savent pas
modifier une variable d’environnement).
3. Importer votre module dans votre programme ou dans
l’interpréteur
4. Utilisez vos scripts en tant que méthodes.
109
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]

[Link] (faut pas oublier d’importer le module importlib,


par la commande import importlib)

113
2.4 Calculs scientifiques avec NumPy

NumPy, acronyme de Numerical Python, est un


Dr. S.K. Mehdi smehdi@[Link]

module d’extension pour Python, spécialisé dans la


manipulation des vecteurs et matrices.

Sa puissance provient de routines pré-compilées et
s’exprime pleinement lorsque la taille des matrices est
très grande, ne le rendant pas ridicule face aux
langages adaptées comme le Fortran90 et le C++.

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]

d’une liste à une dimension en objet array :

Nous avons converti la liste [1, 2, 3] en array. Nous aurions obtenu le


même résultat si nous avions converti le tuple (1, 2, 3) en array.

117
Dr. S.K. Mehdi smehdi@[Link]

Lorsqu’on demande à Python d’afficher le contenu d’un


objet array, le mot array et les symboles ([ et ]) sont
utilisés pour le distinguer d’une liste (délimitée par les
caractères [ et ]) ou d’un tuple (délimité par les
caractères ( et )).

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]

Notez que la multiplication, l’array final correspond à la multiplication


élément par élément des deux array initiaux.

120
linspace()

Cette méthode permet également d’obtenir un tableau à une


dimension mais ici c’est le nombre d’éléments composant
le tableau qui est privilégié. La syntaxe générale est la
suivante :
Dr. S.K. Mehdi smehdi@[Link]

linspace ( début, fin [ , n = 50 ] [ , endpoint = True ] , [ ,


retstep = False ])
— linspace (a, b ) renvoie par défaut 50 valeurs
régulièrement espacées entre a et b inclus.
— linspace (a, b, n ) renvoie cette fois n valeurs, a et b sont
inclus.

— linspace (a, b, n, endpoint = False ) , renvoie n valeurs


mais b est exclu.

— linspace (a, b, n, retstep = True ) renvoie n valeurs plus le


pas entre deux valeurs consécutives. 121
Dr. S.K. Mehdi smehdi@[Link]

122
— Aide à la construction de matrices

— Fonction zeros() : permet de construire une matrice de dimensions


données contenant des 0 à partir de rien.
Exemple de matrice 3 × 3,
Dr. S.K. Mehdi smehdi@[Link]

— Fonction ones() : les valeurs sont des 1,

— Fonction identity() : construction de matrices identité,

123
— Fonction reshape() : Supposons que vous ayez à saisir
dans Python la matrice suivante :
Dr. S.K. Mehdi smehdi@[Link]

il est probablement plus commode d’entrer ses valeurs ligne


par ligne et d’utiliser la méthode reshape,

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

Dr. S.K. Mehdi smehdi@[Link]

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,

Noter que la méthode eig() appartient à un sous-module linalg


de NumPy, spécialisé dans les calculs d’algèbre linéaire.
Le retour de eig() est constitué de deux parties, les valeurs
propres et les vecteurs propres.
127
Dr. S.K. Mehdi smehdi@[Link]

On peut aussi inverser une matrice, calculer son déterminant ou la


diagonaliser. Les fonctions pour , sont :

[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]

de réaliser des graphes 3D et des animations...).


Il n'est pas question d’énumérer les nombreuses possibilités.

Pour ce cours l'objectif est de :



Tracer plusieurs courbes sur un même graphique avec
différentes couleurs.

Préciser les unités sur X et Y.

Mettre une légende sur le graphique.

Agrandir une zone du graphique.

Tracer plusieurs graphiques sur une même page.

Remarque : on peut aussi utiliser la bibliothèque pylab

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.

Essayez ces outils pour vous familiariser avec :



Pour revenir au graphe original cliquez sur « home »

Pour visualiser le graphe en plein écran taper Ctrl + F (pour
revenir au format original tapez de nouveau Ctrl + F).

Pour afficher une grille appuyer sur la touche g.

En bas du graphe vous avez la position courante du
curseur.

Pour revenir à l’interpréteur fermer le graphe. 130
Dr. S.K. Mehdi smehdi@[Link]
Exemple 1

131
Dr. S.K. Mehdi smehdi@[Link]

132
Exemple 2

Nous allons maintenant définir explicitement les points du graphe et


ajouter des options. Dans cet exemple, on va rajouter un titre au graphe et
des légendes aux axes (abscisses et ordonnés). On utilisera pour cela les
commandes : [Link]() ainsi que [Link]() et [Link]()
Dr. S.K. Mehdi smehdi@[Link]

133
Dr. S.K. Mehdi smehdi@[Link]

134
Exemple 2

Cette fois ci on va tracer deux courbes sur le même graphe (c’est


l’affichage de plusieurs courbes sur le même graphe), en les identifiant
par une légende.
Dr. S.K. Mehdi smehdi@[Link]

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.

Cette fonction possède de nombreuses options d’appel.


Dr. S.K. Mehdi smehdi@[Link]

Nous présentons la forme conventionnelle, probablement la plus


souvent utilisée :
t, x, v = [Link]("[Link]", unpack=True) ,

l’argument unpack=True permet d’obtenir des tableaux séparés


des valeurs :
ici un tableau des valeurs de t,
un tableau des x
et un tableau des v.

La méthode twinx() permet de créer le deuxième système d’axes


avec l’échelle différente.

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]

comprendre comment on a testé le théorème).

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]

t(s) N(ua) Err=√N


0 100 10
1 60.65 7.78
2 36.79 6.06
3 22.31 4.72
4 13.53 3.68
5 8.21 2.86
6 4.98 2.23
7 3.02 1.74
8 1.83 1.35
9 1.11 1.05
10 0.67 0.82 144
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.

Pour cela nous utilisons la méthode polyfit (x,y, deg) de numpy


Dr. S.K. Mehdi smehdi@[Link]

qui permet un ajustement de données par un tableau de degré


deg.

Les paramètres sont renvoyés dans la variable tableau appelée
parametre (la constante dans parametre [0] et celle du
paramètre linéaire dans parametre [1]).

Les coefficients de l’ajustement sont : log(N) = at + log(A).

A = 100.08501870535282
a = -0.5003003950476441

148

Vous aimerez peut-être aussi