Vous êtes sur la page 1sur 9

Tutoriel Python

2A PO Ingénierie de la Construction

Jean-Charles Passieux
passieux@insa-toulouse.fr
Python est un langage de programmation interprété. Interprété signifie qu’il ne nécessite pas
de compilation avant l’exécution. Il s’agit d’un langage général qui permet de développer toute
sorte d’applications. Nous l’utiliserons assorti de la libraire de calcul numérique Numpy. Cette
librairie permet de faire des calculs matriciels efficacement. Il existe des outils concurrents tels
que Matlab, Octave, Scilab et dans une certaine mesure Excel.
Ces outils permettent de faire du calcul scientifique. Ils permettront de créer des scripts de
quelques lignes jusqu’à des vrais logiciels avec interface graphique. Il est par exemple possible
d’automatiser des procédures de calcul, de faire des mesures, d’analyser ou valoriser des don-
nées expérimentales, d’estimer des tendances, de simuler des modèles numériques, de faire des
calculs de RdM, d’optimiser une conception vis à vis de la résistance mécanique... bref, une
boite à outils de calcul très utile pour l’ingénieur.

Nous vous invitons à télécharger et installer Anaconda qui embarque Python et l’environne-
ment de développement Spyder qui est à Python, ce que Word est au langage Français.
https://www.anaconda.com/downloads

1 Premiers pas dans Spyder


Démarrer Spyder.

Spyder est composé de trois fenêtres. L’éditeur à gauche, qui se comporte comme une feuille
de brouillon dans lequel on va écrire les différentes instructions en langage Python. Le prompt
(ou invite de commande) qui fonctionne comme une calculatrice. C’est ici que l’on va exécuter
les instructions. Enfin l’éditeur de variables, qui permet de contrôler, si besoin, le type, la
taille et les valeurs stockées dans les variables disponibles en mémoire vive.

La première manipulation avant d’aller plus loin consiste à modifier une option graphique
par défaut qui sera utile ultérieurement (opération à faire une fois pour toutes) :
Accéder au menu Outils>Préférences puis cliquer sur Console IPython dans le menu de
gauche, puis onglet Graphiques, puis dans le cadre Sortie Graphique, sélectionner Automatique
dans le menu déroulant.

Eteindre et Redémarrer Spyder.

2 Premières instructions de Python


Dans le prompt (en bas à droite), taper :
>>> import numpy as np # pour importer la librairie numpy
>>> a=3 # cree une variable scalaire a qui a pour valeur 3
>>> print(a) # affiche la valeur de la variable a
>>> b = 5.5 # b vaut 5.5 (les decimaux sont separes par un point)
>>> a + b # l'addition
>>> c = a * b # la multiplication
>>> c = a / b # la division
>>> np.sqrt(c) # la racine carre
>>> c ** 0.5 # meme resultat
>>> c ** .5 # le zero avant le point decimal n'est pas necessaire
>>> d = 1000000 # un million, ce n'est pas commode a ecrire avec 6 zeros
>>> d1 = 10**6 # c'est plus lisible comme ca
>>> d2 = 1e6 # autre notation standard plus compacte
>>> A = 10 # Python est sensible a la casse
>>> print(a,A) # a et A sont 2 variables distinctes
>>> c='bonjour' # c est maintenant une chaine de caracteres
Il est possible de reprendre une commande précédente avec les flèches ↑ et ↓, de l’éditer avec
les flèches ← et →, et de l’exécuter. Essayez.

3 Vecteurs
La puissance de Numpy réside dans sa capacité à faire du calcul vectoriel et matriciel. Il ma-
nipule donc de manière native les vecteurs et les matrices. Taper :
>>> a=np.array([4,5,6.5]) # cree un vecteur [4,5,6.5] (taille 3)
>>> b=np.arange(7,10) # defini un vecteur d'entier avec les
# ... valeurs de 7 a 10 (10 exclu)
>>> c=np.arange(1,10,2) # permet de definir le pas de 2 (debut,fin,pas)
>>> d=np.arange(1,-5,-1) # fonctionne avec un pas negatif
>>> e=np.linspace(0,1,100) # 100 valeurs equi-reparties entre 0 et 1
>>> f=np.zeros(12) # vecteur nul de taille 12
>>> g=np.ones(5) # vecteur rempli de 1 de taille 5
Ne pas confondre la valeur et la position dans le vecteur qui s’appelle l’indice. L’indice est
toujours entier et commence à 0 avec Python. Par exemple pour le vecteur a :

valeurs 4.0 5.0 6.5


a ≡
indices 0 1 2

Par analogie avec Excel, l’indice est le numéro de la case (ex : B12, nécessairement entier) et
la valeur est le contenu de la case (peut-être entier, scalaire, chaine de caractère...).
Ainsi pour accéder aux valeurs :
>>> e[0] # pour acceder a la premiere valeur du vecteur e
>>> e[5] # ...la cinquieme valeur du vecteur e
>>> a[3] # la 4e valeur du vecteur a n'existe pas!
>>> e[-1] # ...la derniere valeur du vecteur e
>>> e[-2] # ...l'avant-derniere valeur du vecteur e
>>> e[:4] # un vecteur des 4 premieres valeurs de e
>>> e[4:] # un vecteur des autres valeurs de e
>>> e[4:11] # valeurs des indices 4 a 11 (11 exclu)
>>> ind = np.array([0,2]) # ind est un vecteur d'indices
>>> a[ind] # premet d'acceder aux 1e et 3e valeurs de a
assigner une valeur : e[1]=3 : la deuxieme valeur de e vaut 3
Question 1 : Que donnent les instructions suivantes. Essayer de deviner
avant de vérifier :
>>> a[1:2]
>>> a[:2]
>>> a[:-2]
Opérations sur les vecteurs :
>>> a + b # addition de vecteurs
>>> a - c # soustraction de vecteurs. Attention a la dimension!
>>> a - c[:3] # ce calcul est autorise
>>> a * b # le produit terme a terme
>>> a.dot(b) # le produit scalaire de deux vecteurs
>>> a@b # autre notation du produit scalaire
>>> a.T # transposee d'un vecteur
>>> np.sqrt(a@a) # defini donc la norme du vecteur a
>>> e = 2*a + 1 # addition et multiplication avec un scalaire simple
>>> a**2 # pour elever les valeurs du vecteur au carre
>>> np.sin(2*np.pi*e/100) # toutes les fonctions de math sont vectorisees
>>> len(a) # pour connaitre la taille d'un vecteur

Question 2 : Créer un vecteur de taille 80 avec toutes les valeurs égales 8.

Question 3 : Créer un vecteur t de 30 valeurs allant de 10 à 11.

Question 4 : Créer un vecteur p de même taille que t et dont toutes les


valeurs sont les images de celles de t par le polynôme
p(t) = 2t2 − 3t + 1

4 La librairie matplotlib.pyplot
Cette librairie permet d’afficher des courbes. Pour l’importer, taper l’instruction suivante :
>>> import matplotlib.pyplot as plt

Question 5 : Taper les instructions suivantes :


>>> t=np.linspace(0,1,4)
>>> f=np.sin(2*np.pi*t)
>>> plt.plot(t,f,'k.-')
Elles permettent d’afficher un sinus. Commenter.
Question 6 : Dans l’explorateur de variables, double cliquer sur la ligne cor-
respondant à la variable t puis f. Remarquer que on a seule-
ment calculé la valeur de f pour les quelques valeurs contenues
dans le vecteur t. Proposez de modifier la première instruction
pour améliorer la représentation de la fonction sinus.
La fonction plt.plot() permet d’afficher un nuage de points dont les abscisses sont données
dans les valeurs du vecteur t et les ordonnées dans celles de f. f et t doivent donc avoir la
même taille. Le troisième argument est la décoration de la ligne avec la couleur (’k’ black, ’r’
red, ’g’ green, ’b’ blue, ’c’ cyan, ’y’ yellow, ’w’ white entre autres), le marqueur (’+’ une croix,
’o’ un cercle, ’*’ une étoile, ’d’ un diamant, ’x’ un x... ) et la forme du trait (’-’ trait plein,
’–’ pointillés, ’-.’ trait mixte). En l’absence de précisions, la décoration est sans marqueur avec
une ligne continue de couleur bleue. si on enleve le point de ‘k.-‘ il n’y a qu’une ligne sans point
Si on refait appel à la fonction plt.plot(), par défaut, Python affiche toujours dans la même
fenêtre, en superposant le nouveau tracé aux anciens graphiques.
>>> f2=np.sin(4*np.pi*t)
>>> plt.plot(t,f2,'b-')
Pour faire une nouvelle fenêtre, il faut utiliser la commande plt.figure() avant d’appeler
une nouvelle fois la fonction plt.plot.
On peut également rajouter un titre, une légende et nommer les axes :
>>> plt.title('Ondes planes') # le titre
>>> plt.xlabel('temps') # nom axe x
>>> plt.ylabel('amplitudes') # nom axe y
>>> plt.legend(('f','f2')) # legende

Question 7 : Faire la figure suivante :

Le bleu et le vert pas d’idée…

D’autres fonction d’affichage :


>>> plt.semilogx(x,y) # abcisses en echelle logarithmique
>>> plt.semilogy(x,y) # ordonnees en echelle logarithmique
>>> plt.loglog(x,y) # les deux en echelle logarithmique

5 Matrices
Très proche des vecteurs, mais avec deux indices.
>>> m=np.array([[1,2,3],[4,5,6]]) # matrice de 2 lignes, 3 colonnes
>>> m.shape # la taille de a,
m (2,3)
>>> v=np.array([0,1,0]) # un vecteur quelconque de taille 3
>>> m.dot(v) # produit matrice vecteur càd ?
>>> m@v # marche aussi pour le produit matrice vecteur
>>> m[1,2] # valeur de m en 2e ligne, 3e colonne
Question 8 : Que donnent les instructions suivantes. Essayer de deviner
avant de vérifier :
valeur de m en 1ere ligne, 2e colonne
>>> m[0,1] vecteur constitué de la 3e ligne et 3e col et
>>> m[:2,2] 3e ligne inexistante donc 3  e ligne
>>> m[-1,[2,0]] Texte
Pour définir des matrices particulières :
>>> m=np.zeros((2,3)) # matrice nulle de 2 lignes, 3 colonnes
>>> m=np.ones((5,1)) # matrice unitaire de 5 ligne, 1 colonne (donc un vecte
>>> m=np.eye(5) # matrice identite de taille 5x5
>>> m=np.diag([1,2,3]) # matrice diagonale 3x3 a partir d'un vecteur
>>> np.diag(m) # valeurs diagonales a partir d'une matrice
>>> m=np.random.rand(5,3) # matrice aleatoire 5x3

6 Instructions FOR et WHILE


On a souvent besoin de faire des boucles ou d’itérer sur les indices d’un vecteur ou d’une
matrice. b=1
while b<100:
L’instruction WHILE : b=2*b
L’instruction FOR le permet :
b=1 print(b)
for i in range(10): n’affiche que b à la fin =128
while b<100:
b=2*i-1 commence à i=0 et finit à i=9
b=2*b
print(b)
print(b)

Attention à l’indentation (4 espaces) qui permet de distinguer les instructions à l’intérieure


de la boucle de celles une fois la boucle terminée.
affiche une ap
Question 9 : Construire un vecteur t qui va de 0 à 5s par pas de 50ms. Puis l’autre les val
créer un deuxième vecteur f ayant les valeurs de la fonction de b : 2, 4 etc,
sin(2πt) pour chaque valeur de t en faisant une boucle FOR 128
sur les indices de t. L’afficher avec la fonction plt.plot()
par l’instruction : plt.plot(t,f,'k+-')
La boucle FOR est pratique, mais comme tout langage interprété, Python est efficace lors-
qu’on évite au maximum d’utiliser des boucles. Il est préférable de programmer de façon vec-
torielle, c’est à dire lorsqu’en une opération, on travaille sur toutes les valeurs du vecteur. Par
exemple, pour ajouter 1 au vecteur f, on peut faire une boucle FOR sur toutes les valeurs de
f et y ajouter 1 :
>>> for i in range(len(f)):
f[i]=f[i]+1
On peut tout simplement écrire f=f+1, ou encore de façon plus compacte f+=1. Ainsi, on aurait
du écrire f2=np.sin(2*np.pi*t)
7 Instructions conditionnelles, IF
Dans un programme, on a souvent besoin de faire des tests conditionnels. Exemple : si la
contrainte dépasse la limite élastique, alors ... sinon, fin. La syntaxe en Python est la suivante :
>>> a=5
>>> if a==2:
txt='ok'
else:
txt='not ok'

a==b # egal
a!=b # different
a>b # superieur strictement
Les autres tests sont : a>=b # superieur ou egal
a>2 and a<3 # ET logique (ici vrai si a est entre 2 et 3)
a>2 or a<3 # OU logique (ici vrai dans le cas contraire)
not a # NON logique

Question 10 : Deviner la réponse du script suivant. Puis coder et vérifier.


a=5; b=6; c=2
if not (a>2 and b>2*c): si not(vrai et vrai) = si not(vrai) = si (faux)
print('reponse A')
else:
print('reponse B')
carré,
On peut division
avoir envie et
desoustraction appliqué
faire des tests à chaque
sur toutes coeff de
les valeurs x indépendamment
d’un vecteur ou d’une matrice.
Là encore, on évitera de faire des boucles au profit de la programmation vectorielle :
>>> x=np.linspace(0,10,15) # un vecteur
>>> y=x**2/25-1 # un autre vecteur
>>> plt.plot(x,y,'b.-') # affichage y=f(x)
>>> test=y>0 # un vecteur booleen =1 quand y positif
?
>>> plt.plot(x,test,'k.') # visualisation graphique de y>0
>>> rep,=np.where(test) # rep contient les indices correspondant a VRA
>>> plt.plot(x[test],y[test],'ro') # cercles rouges uniquement la pour y>0

Question 11 : Faire la figure suivante :


8 Écriture d’un script Python
De puis le début, nous écrivons les instructions directement dans le command prompt de
Python, à la manière d’une calculatrice. Lorsque le nombre d’instruction dépasse 3 ou 4, ça
devient laborieux, surtout quand on se trompe et qu’on veut modifier une seule ligne. Pour
éviter ça, on va créer un fichier texte td1.py. Ce fichier s’appelle un script. Il regroupe un
ensemble d’instructions qui vont être exécutées les unes après les autres. Il est ainsi plus simple
de modifier le script et de tout relancer.
Il est bon de toujours commencer un script par les instructions
import numpy as np # importe la librairie numpy
import matplotlib.pyplot as plt # idem avec matplotlib
Il est possible d’ajouter des commentaires pour améliorer la lisibilité du code. Les commen-
taires sont des instructions non interprétées. Il suffit de commencer l’instruction par un #.
Lorsqu’on met un commentaire et deux pourcents #%% suivis d’un espace, celà permet de
délimiter des section qu’on peut interpréter par morceaux à l’aide de l’éditeur.
Plus précisément, en cliquant sur , tout le script (l’ensemble du fichier) est envoyé dans le
prompt et donc exécuté. En cliquant sur , toutes les instructions du bloc sélectionné (bloc dé-
limité par des #%% actuellement surligné en jaune) sont envoyées au prompt et exécutées. En
cliquant sur , on passe automatiquement au bloc suivant à la fin de l’exécution. En cliquant
sur , on exécute seulement la ligne active (celle ou on a le curseur), ou tout un bloc surligné
avec la souris. Le raccourci correspondant est F9. Cette dernière option est très pratique à
l’usage pour exécuter des morceaux de scripts.
#%% pas compris

9 Définition d’une fonction


Lorsqu’on a besoin de répéter de nombreuses fois une série d’instructions relativement indé-
pendante du reste, et afin de clarifier le code, il est possible de regrouper ces instructions dans
une fonction Python. Par exemple si, à partir d’un vecteur x, on veut construire un vecteur y,
tel que la ième valeur de y soit égale à la somme des valeurs de x pour tous les indices inférieurs
à i :
def MaFonction(x):
y = np.zeros_like(x) =?
y[0] = x[0]
MARCHE PAS; ERREUR DE SYNTAXE
for i in range(1,len(x)): L 10
y[i]=y[i-1]+x[i]
return y

Dès lors, pour appeler cette fonction, on fera :


>>> x=np.array([1,2,3]
>>> y=MaFonction(x)
>>> print(y)

ATTENTION INDENTATION = 4 ESPACES

TRES IMPORTANT
10 Pour aller plus loin
Python/Numpy/Matplotlib est extrêmement bien documenté sur internet. Dès qu’on a le
moindre doute sur la façon d’appeler une fonction ou son existence, il faut avoir le réflexe de
rechercher dans votre moteur de recherche favori.
Python : https://www.python.org/
Numpy : https://numpy.org/
Matplotlib : https://matplotlib.org/
Il est possible de trouver de nombreux tutoriels sur Python, Numpy et Matplotlib, voire
Scipy, la librairie de calcul scientifique, également utile en analyse numérique.
Une page Moodle pour se former à Python (plus large que les seuls librairies numpy et
matplotlib) se trouve même sur le moodle de l’INSA :
http://moodle.insa-toulouse.fr/course/view.php?id=898

Vous aimerez peut-être aussi