Programmation Scientifique avec Python
Programmation Scientifique avec Python
2025-10-28
Table of contents
1 Introduction 5
1.1 Plan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2 Introduction à Python 6
2.1 Environnement Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.1 EDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.2 Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.3 Distribution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.4 Online . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.5 Préparer l’Environnement de Travail . . . . . . . . . . . . . . . . . 6
2.1.6 Crée un répertoire de travail : CoursPSP . . . . . . . . . . . . . . . 6
2.2 Le Langage Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2.2 Caractéristiques principales . . . . . . . . . . . . . . . . . . . . . . 6
2.3 Syntaxe et Implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3.1 Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3.2 Implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3.3 Le lien entre syntaxe et implémentation . . . . . . . . . . . . . . . 7
2.4 Typage Fort et Dynamique . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4.1 Typage Fort (Sécurité des Opérations) . . . . . . . . . . . . . . . . 8
2.4.2 Typage Dynamique (Flexibilité du Code) . . . . . . . . . . . . . . . 8
2.5 Les Mots-clés de Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.5.1 Définition et Rôle � . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.5.2 Le module keyword . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.6 Espace des noms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.6.1 Fonctionnement et Rôle . . . . . . . . . . . . . . . . . . . . . . . . 10
2.6.2 Les Trois Niveaux d’Espaces de Noms . . . . . . . . . . . . . . . . 10
2.6.3 Fonctions pour Examiner les Espaces de Noms . . . . . . . . . . . . 11
2.7 Espace mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.7.1 Tout est Objet en Python . . . . . . . . . . . . . . . . . . . . . . . 11
2.7.2 Anatomie des Objets . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.7.3 Taille des objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.7.4 Attention : Profondeur et Contenu des Conteneurs . . . . . . . . . 13
2.7.5 Hiérarchie des objets . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.7.6 Les Opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.7.7 Le module operator . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1
3 Variables et Fonctions 15
3.1 Entrés-Sorties des données . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2.2 Affectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.3 Nommage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.3.1 Règles de nommage . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.3.2 Notation CamelCase et snake_case . . . . . . . . . . . . . . . . . . 16
3.4 Affichage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.4.1 print() : La Fonction d’Affichage . . . . . . . . . . . . . . . . . . 16
3.4.2 .format() : La Méthode de Formatage . . . . . . . . . . . . . . . 16
3.4.3 Exemple : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.4.4 f-string : La Meilleure Pratique Actuelle (Python 3.6+) . . . . . . . 17
3.4.5 Avantages Majeurs des f-strings : . . . . . . . . . . . . . . . . . . . 17
3.5 Notation Scientifique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.6 Les types de données Python . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.6.1 Liste des objets les plus utilisés . . . . . . . . . . . . . . . . . . . . 18
3.7 Types simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.7.1 string . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.7.2 Type bool (True/False) . . . . . . . . . . . . . . . . . . . . . . . . 19
3.7.3 Type int (Nombres Entiers) . . . . . . . . . . . . . . . . . . . . . . 19
3.7.4 Type float (Nombres Réels) . . . . . . . . . . . . . . . . . . . . . 20
3.7.5 Type complex (Nombres Complexes) . . . . . . . . . . . . . . . . . 22
3.7.6 Fonctions Mathématiques Internes . . . . . . . . . . . . . . . . . . 22
3.7.7 Fonctions Mathématiques Standard: Le module ‘math’ . . . . . . . 25
3.8 Types composés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.8.1 tuple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.8.2 liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.8.3 intervalle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.8.4 ensemble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.8.5 dictionnaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.9 Data flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.9.1 if else elif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.9.2 for while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.10 Les fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.10.1 définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.10.2 paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.10.3 variables internes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.10.4 arguments args et kwargs . . . . . . . . . . . . . . . . . . . . . . . 27
3.10.5 lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.11 Les modules en python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.12 Les fichiers de données en python . . . . . . . . . . . . . . . . . . . . . . . 27
4 Conclusion 28
2
List of Figures
3
List of Tables
4
Chapter 1
Introduction
Ce cours est conçu pour vous guider, que vous soyez étudiant, chercheur ou professionnel,
à travers les fondamentaux de la programmation en Python, en mettant l’accent sur ses
applications scientifiques. Nous commencerons par les bases du langage pour rapidement
nous plonger dans l’utilisation des bibliothèques incontournables comme NumPy pour le
calcul numérique, Matplotlib pour la visualisation de données, ainsi que Pandas pour la
manipulation et l’analyse de données. Nous explorerons également des sujets plus avancés
tels que le calcul scientifique avec SciPy et Sympy. ## Objectifs
1.1 Plan
5
Chapter 2
Introduction à Python
6
• mathématiques : Python est doté d’une bibliothèque de fonctions mathématiques
puissantes, ce qui en fait un langage idéal pour les applications scientifiques et
techniques.
2.3.2 Implémentation
L’implémentation, ou sémantique, est la manière dont la logique du programme
est réalisée en utilisant la syntaxe du langage. Elle se concentre sur ce que fait le
programme, et non sur la validité de sa structure.
• Rôle : Elle s’assure que le code, une fois exécuté, produit le résultat attendu et
résout le problème spécifié. Un programme peut être syntaxiquement correct mais
sémantiquement incorrect (il ne fait pas ce qu’il est censé faire).
• Exemples en Python :
– Erreur de logique : Si vous écrivez resultat = a - b alors que le problème
exigeait une addition (a + b). Le code est valide, mais l’implémentation est
fausse.
– Choix de structures de données : Décider d’utiliser une liste (list) plutôt
qu’un dictionnaire (dict) pour stocker des données.
– Algorithme : Le choix de l’algorithme de tri (tri à bulles, tri rapide, etc.) à
utiliser pour ordonner une liste de nombres.
7
2. Sémantiquement correct (bonne implémentation) pour produire un résultat utile.
Si le code passe l’étape de l’interprétation (pas d’erreur de syntaxe), mais qu’une erreur
survient pendant l’exécution (par exemple, division par zéro ou tentative d’accéder à un
index de liste inexistant), on parle alors d’erreur d’exécution ou d’erreur logique (liée
à l’implémentation), et non d’erreur de syntaxe.
8
** Exemples de Mots-Clés en Python**
Python possède un nombre relativement petit de mots-clés (actuellement 35 dans Python
3.12).
9
28 27 : not
29 28 : or
30 29 : pass
31 30 : raise
32 31 : return
33 32 : try
34 33 : while
35 34 : with
36 35 : yield
37 Soft Key Words:
38 1 : _
39 2 : case
40 3 : match
41 4 : type
Lorsque vous écrivez x = 10, le nom 'x' est inséré dans l’espace de noms actuel, pointant
vers l’objet 10.
10
Niveau Nom Python Durée de Vie Contenu Typique
Local Espace de noms Temporaire : créé Variables définies à
Local lors de l’appel d’une l’intérieur de la
fonction, détruit à la fonction.
fin de son exécution.
Enclosing Espace de noms Similaire au Local, Variables des
Englobant mais concerne les fonctions parentes
fonctions imbriquées immédiates.
(ou nested
functions).
Global Espace de noms Jusqu’à la fin de Variables définies au
Global l’exécution du script niveau supérieur du
ou du module. module (hors de
toute fonction).
Built-in Espace de noms Démarré au Fonctions et classes
Intégré lancement de intégrées de Python
l’interpréteur et (ex: print, len,
jamais détruit. str, object).
11
2. Type (type): Sa classe (ex: int, str).
3. Valeur: Les données qu’il contient.
12
# Affiche généralement : La taille d'une liste vide est : 56 octets
Méthode Utilisation
Opération Magique Classique Équivalent Objets
Addition __add__ x + y x.__add__(y)
Accès à un attribut __getattribute__ x.y x.__getattribute__('y')
Indexation __getitem__ x[y] x.__getitem__(y)
13
1 import operateur
2 L=dir(operateur)
3 print(L)
4 for index,name in enumerate(L):
5 print(index, '--->',name)
6 print(L[98])
7 from operateur import mul
8 print(mul(2,5))
14
Chapter 3
Variables et Fonctions
3.2.2 Affectation
variable=valeur
Types d’affectations
1. Simple > x=1 > y=2 > z=3 >
2. Multiple > x,y,z=1,2,3
3. Parallèle > x=y=z=0
Note : une variable est définie par un nom (identificateur) pour le programmeur et une
adresse par python.
namespce (noms) : identificateur , adresse memoire (objets) : type,taille,valeur…..
1
2 x=2025
3 print('nom de la variable : x')
4 print('valeur de la variable : ', x)
5 print('adresse de la variable : ',id(x))
6
7 # On va modifier la variable x!
8 x=x+1
9 print('nom de la variable : x')
10 print('valeur de la variable : ', x)
11 print('adresse de la variable : ',id(x))
12
3.3 Nommage
3.3.1 Règles de nommage
• Les noms de variables doivent commencer par une lettre (a-z, A-Z) ou un underscore
(_).
• Ils peuvent contenir des lettres, des chiffres (0-9) et des underscores, mais ne peuvent
pas commencer par un chiffre.
15
• Les noms de variables ne doivent pas être des mots réservés de Python (comme if,
for, while, etc.).
• Les noms doivent être significatifs et refléter leur contenu ou leur usage.
• Python est sensible à la casse (X=1 et x=1 sont deux variables différentes)
• Les noms de variables ne doivent pas contenir d’espaces.
• Les noms de variables ne doivent pas contenir de caractères spéciaux (comme !, @,
#, $, etc.).
• Les noms de variables ne doivent pas commencer par un underscore suivi d’un chiffre
(par exemple, _1variable est invalide).
3.4 Affichage
3.4.1 print() : La Fonction d’Affichage
print() est la fonction la plus fondamentale pour afficher des données sur la console
(sortie standard).
Concept Description
Rôle Prendre un ou plusieurs arguments, les
convertir en chaînes de caractères si
nécessaire, et les afficher séquentiellement.
Caractéristiques Par défaut, elle insère un espace entre
chaque argument (défini par le paramètre
sep=' ') et ajoute un saut de ligne (\n)
à la fin (défini par le paramètre end='\n').
Paramètres Clés :
• sep (séparateur) : Modifie la chaîne insérée entre les arguments.
– Exemple : print(1, 2, 3, sep='-') affichera 1-2-3.
• end (fin) : Modifie la chaîne ajoutée à la fin de la sortie (remplace le saut de ligne
par défaut).
– Exemple : print('Début', end='...') affichera Début... et le prochain
print continuera sur la même ligne.
16
Concept Description
Rôle Insérer des valeurs de variables dans une
chaîne et appliquer des règles de formatage
complexes (précision décimale, alignement,
etc.).
Syntaxe "[chaîne avec des
{}]".format(valeur1, valeur2, ...)
3.4.3 Exemple :
Python
position = 5.60
vitesse = 2.5
temps=11.25
position =position+vitesse*temps
# Utilisation des indices de position ou des noms (optionnel)
message = "Le mobile est à la position {} après {} s ."
print([Link](position, temps))
Dans cet exemple, :.2f est un spécificateur qui demande d’afficher la valeur numérique
avec deux décimales (.2f).
Concept Description
Rôle Rendre le formatage de chaîne direct, lisible
et performant.
Syntaxe Préfixer la chaîne par la lettre f et placer
les variables ou expressions directement
entre les accolades {}.
Exemple :
nom = "Riadh"
age = 30
annee_naissance = 2025 - age
# On préfixe la chaîne par 'f'
print(f"{nom} a {age} ans et est née en {annee_naissance}.")
17
pi = 3.14159265
# Affichage avec 3 décimales et aligné à droite sur 10 caractères
print(f"La valeur de Pi est : {pi: >10.3f}")
# Affiche : La valeur de Pi est : 3.142 (Notez les espaces avant 3.142)
18
3 liste_attributs=dir(str)
4 print(liste_attributs)
Exemples :
>>> 5**(1/2) # calcul de la racine carrée de 5
2.23606797749979
>>> x = -6
>>> -x
6
>>> 23.2 // 5.3 # quotient euclidien
4.0
>>> 23.2 % 5.3 # reste euclidien
2.0
19
3.7.4 Type float (Nombres Réels)
1
2 # liste des attributs (propriétés et méthodes) de float
3 liste_attributs=dir(float)
4 print(liste_attributs)
On écrit un nombre à virgule (float) comme ceci :
>>> x = 2.315
>>> y = 12.0
Le séparateur décimal est un point (et non une virgule), Python étant un langage d’origine
anglo-saxonne. On peut utiliser l’écriture scientifique : le nombre 2, 3 × 10−3 , par exemple,
s’écrit:
>>> x = 2.3e-3
>>> x = 2.3E-3 # sans espaces
Les méthodes de float sont: ['as_integer_ratio', 'conjugate', 'fromhex',
'hex', 'imag', 'is_integer', 'real'].
• Si x est un float, la méthode x.as_integer_ratio() retourne une paire
(numérateur, dénominateur) sous forme de tuple qui représente la fraction
irréductible correspondant à x.
• La méthode de classe [Link](s) retourne le float correspondant écrit en
base 10, à partir d’une chaîne s contenant l’écriture hexadécimale.
• Si x est un float, la méthode [Link]() retourne la conversion en base 16 de x sous
forme de str.
• Si x est un float, la méthode x.is_integer() retourne True si x est entier, False
sinon.
Exemples :
>>> x = 4.5
>>> x.as_integer_ratio()
(9,2)
>>> [Link]("0xa5fc.015d")
42492.00532531738
>>> [Link]()
'0x1.2000000000000p+2'
Remarque La méthode fromhex est une méthode de classe contrairement à hex, par
exemple, qui est une méthode d’instance.
20
• Les nombres qui dépassent la limite deviennent inf (infini)35. Par exemple, x =
10.0**308 est 1e+308 36363636, mais x + x et x * x donnent inf.
Observation intéressante :
Python
>>> 0 == 0.0
True
>>> 0 is 0.0
False # 0 et 0.0 sont deux objets distincts
21
[Link] Module fractions
Le module fractions introduit le type Fraction.
>>> from fractions import *
>>> Fraction(7, 9)
Fraction(7, 9)
>>> Fraction(70, 10)
Fraction(7, 1)
Le type Fraction supporte toutes les opérations élémentaires et les fonctions inverses. Le
module fractions contient aussi la fonction gcd (plus grand commun diviseur) :
>>> gcd(24, 8)
8
22
[Link] Fonction valeur absolue : abs
Retourne la valeur absolue. Si le nombre est de type complex, retourne le module.
23
[Link] Fonction d’évaluation : eval
Pour évaluer une chaîne de caractères (à condition qu’elle soit évaluable).
>>> expression = "2+3*10"
>>> eval(expression)
32
24
Le module math possède les fonctions testant (isinf(x), isnan(x)) pour savoir si une
donnée est un infini ou un nan.
Python
>>> from math import isinf, isnan
>>> INF = float("inf")
>>> NINF = float("-inf")
>>> NAN = float("nan")
>>> isinf(INF)
True
>>> isinf(NINF)
True
>>> isnan(NAN)
True
>>> isnan(INF)
False
Python calcule avec les infinis selon les règles mathématiques usuelles.
>>> INF - INF
nan
>>> INF / INF
nan
>>> 1 / INF
0.0
>>> INF + INF
inf
Dès que dans un calcul apparaît un nan, le résultat final est nan. Les informations disent
que nan est absorbant.
La comparaison d’égalité (==) entre deux nan donne True. En revanche, les comparaisons
(<=, <, >=, >) entre deux nan donnent False.
>>> x = float("nan")
>>> y = float("nan")
>>> x == y
True
>>> x < y
False
Pour ce qui est de la comparaison is : rien d’anormal.
>>> x = float("nan")
>>> y = float("nan")
>>> x is y
False
>>> x is not y
True
25
Exemple d’utilisation de isclose :
>>> from math import isclose
>>> 0.1 + 0.1 + 0.1 == 0.3
False
>>> isclose(0.1 + 0.1 + 0.1, 0.3)
True
Fonctions trigonométriques
[Link](x) Sinus
[Link](x) Cosinus
[Link](x) Tangente
[Link](x) Arcsinus
[Link](x) Arccosinus
[Link](x) Arctangente
math.atan2(y, x) Arctangente de 𝑦/𝑥 (gestion des quadrants)
[Link](x) Conversion radians vers degrés
[Link](x) Conversion degrés vers radians
26
[Link] Fonctions hyperboliques
Fonctions hyperboliques
[Link](x) Sinus hyperbolique
[Link](x) Cosinus hyperbolique
[Link](x) Tangente hyperbolique
[Link](x) Arcsinus hyperbolique
[Link](x) Arccosinus hyperbolique
[Link](x) Arctangente hyperbolique
Fonctions
[Link](x) Racine carrée
[Link](x) Exponentielle 𝑒𝑥
[Link](x) Logarithme népérien ln(𝑥)
[Link](x, b) Logarithme de base 𝑏
math.log10(x) Logarithme de base 10
math.log2(x) Logarithme de base 2
[Link](x, y) Puissance 𝑥𝑦
math.expm1(x) 𝑒𝑥 − 1
math.log1p(x) ln(1 + 𝑥)
27
Chapter 4
Conclusion
28