Les premiers pas en Python pour les sciences physiques
Ce document permet d’avoir une première approche de Python, de manière à pouvoir faire un programme simple comme nous le demanderons à nos élèves.
Nos élèves font aussi de la programmation en mathématiques, les algorithmes sont écrits en langage naturel ou en langage Python. Les notions de variable, d’instruction conditionnelle et de boucle sont vues en seconde. Les listes sont abordées en classe de première.
Suivre un MOOC dédié à la programmation Python, ou un livre, permettra d’avoir d’avantage de recul. Les chaines de caractères sont assez peu traitées dans ce document. Les objets, les fonctions, les tableaux et beaucoup d’autres choses ne sont pas traitées ici. Juste quelques bases ciblées sur les besoins en physique chimie au lycée.
Au démarrage d’EduPython, la fenêtre suivante s’ouvre :
Cette fenêtre comporte plusieurs zones :
Création d’un nouveau fichier de programme, ouverture d’un fichier existant, sauvegarder …
Forcer l’arrêt : (le bouton apparait quand le programme s’éxecute)
Code
Nom du programme en coursAccès aux autres programmes ouverts
Nous pouvons y saisir directement des instructions pour tester des commandes, elle est aussi utilisée pour afficher des résultats du programme avec la fonction print().
Un onglet variables permet de voir les fonctions appelées par le programme, ainsi que les variables utilisées avec leur valeur.
Le signe = permet d’affecter une valeur à une variable.
Le signe # (appelé dièse ou croisillon) permet d’ajouter un commentaire en fin de ligne.
Trois guillemets en début et en fin de commentaires permettent d’utiliser plusieurs lignes.
Extrait de programme :
Les opérations de base sont les suivantes :
+ addition
- soustraction
* multiplication
/ division
puissance
Extrait de programme :
===== Afficher un résultat : print() =====
La fonction print() permet d’afficher un résultat ou/et une chaine de caractères.
print(variable) affiche la valeur de la variable dans la console.
Exemple de script : Affichage d’une valeur numérique dans la console Python
| Code python| Aperçu console|
| # Initialisation
g=9.81 # g=9.81 m/s²
m=10 # masse en kg
v=5 # vitesse en m/s
z=20 # altitude en m
# Exemple de calcul
Ec=0.5*m*v2 # Energie cinétique en J
# Exemple d'affichage
print(Ec)| Le résultat s’affiche dans la console :
|
print(“TEXTE”) affiche TEXTE dans la console.
Exemple :
On remplace la dernière ligne du code ci-dessus par :
print(“L'énergie cinétique vaut :”)
Le résultat s’affiche dans la console :
print(“TEXTE”,variable) affiche TEXTE variable dans la console.
Exemple :
On remplace la dernière ligne du code ci-dessus par :
print(“L'énergie cinétique vaut”,Ec,“Joules”)
Le résultat s’affiche dans la console :
La fonction input() permet de demander une valeur (une entrée) à l’utilisateur.
Exemple de script :
Code python | Remarque : |
z=input(“Quelle est l'altitude en mètres ?”) | Le contenu de la saisie est affecté à la variable z |
Avec EduPython, une fenêtre s’ouvre :
La fonction input() renvoie une variable de type chaine de caractère, string en anglais, notée str.
Pour connaitre le type d’une variable, utilisez la fonction type() dans la console :
La réponse signifie que z est du type ‘str’, c'est-à-dire une chaine de caractère.
Pour pouvoir faire un calcul avec une variable, il faut la convertir :
| Pour convertir une variable en entier ou en réel, il faut lui affecter sa valeur convertie :
variable = int(variable)
variable= float(variable)
|
Dans notre cas, dans la console :
Ou directement dans le script :
z=input(“Quelle est l'altitude en mètres ?”)
z=int(z)
Ou
z=int(input(“Quelle est l'altitude en mètres ?”))
Le programme suivant demande une masse en kg à l’utilisateur, calcule le poids et affiche un message « Le poids vaut ‘valeur du poids’ N ».
Une boucle pour ( for ) permet de réaliser des instructions un nombre de fois connu à l’avance en parcourant une liste d’itérations (avec la fonction range()), ou une liste de valeurs (voir paragraphe sur le type list).
Algorithmique | Python |
Pour i allant de 0 à n Instructions Fin Pour | for i inrange(n+1) :# penser aux deux points à la fin objectreplacements_object_2# penser à l’indentation |
Remarques :
Exemple de script, programmation d’un compteur :
Calcul de la distance parcourue par un mobile sur coussin d’air :
Faites un programme qui ;
Solution :
La fonction range() permet de parcourir des itérations.
Nous pouvons aussi choisir la valeur initiale, la valeur finale (non atteinte) et le pas (entier) en renseignant davantage de paramètres.
La syntaxe est alors la suivante :
range(valeur initiale, valeur finale, pas)
Exemples :
Fonction python | Incréments parcourus |
range(1,5,1) | 1 ; 2 ; 3 ;4 |
range(5,1,-1) | 5 ; 4 ; 3 ; 2 |
Application directe :
Faites une boucle dont l’itération varie de 10 à 20 par pas de 2 et afficher la valeur de l’itération à chaque itération.
Code python | Aperçu console |
“”“ Test de la fonction range() ”““ # Affichage de l’itération allant de 10 à 20 par pas de2 for i in range(10,21,2): print(i) | ![]() |
Exercice : compte à rebours
Modifiez le programme du compteur (III.A) pour faire un compte à rebours de 5 à 0 en utilisant les trois paramètres de la fonction range().
Pour faire des comparaisons ou des tests, les opérateurs suivants sont utilisables :
== égalité
plus grand que
< plus petit que
= supérieur ou égal
⇐ inférieur ou égal
!= différent
Le résultat du test est du type booléen et peut donc prendre deux valeurs :
Remarque :
Le langage Python est sensible à la casse, True et False s’écrivent avec une majuscule pour être interprété correctement.
Exemples à la console : on affecte 2 à la variable a et on essaie différents tests
Lorsqu’un calcul doit être fait mais que le nombre d’itération n’est pas connu, on peut suivre des instructions en boucle, tant qu’une condition n’est pas vérifiée.
Algorithmique | Python |
Tant que condition Instructions Fin Tant que | while condition :# pensez aux 2 points à la fin objectreplacements_object_4# pensez à l’indentation |
Comme pour la boucle for, la première ligne non indentée qui suit ne fait pas partie de la boucle.
Exemple :
La pression, P[hPa], en fonction de l’altitude, h[m], vaut
P(h) = P(0) objectreplacements_object_6
P(0) est la pression au niveau de la mer, on prend P(0) = 1013 hPa
Trouver l’altitude, à un mètre près (incrément à utiliser), pour laquelle la pression est divisée par deux.
Algorithmique :
DEBUT Affecter 1013 à P0 Affecter 0 à h Affecter P0 à P Tant que P > P0/2 Affecter h+1 à h Calculer P Fin Tant que Afficher « La pression est divisée par deux à l’altitude de (valeur de h) m » FIN |
Solution :
Pour tracer l’évolution d’une température, d’une pression, de la concentration d’un réactif… il faut conserver toutes les itérations de nos calculs. Pour stocker toutes ces valeurs, nous allons utiliser un objet de type liste (list).
Les éléments d’une liste sont notés entre crochets et séparés par des virgules : Liste=[élément 0, élément 1, élément 2, élément 3] On peut faire une liste d’entiers, de flottants, de chaine de caractères, de booléens, ou avoir des éléments de différents types dans la liste. Pour lire le premier élément de la liste, qui est à l’indice 0, taper Liste[0] Pour lire le deuxième élément de la liste, qui est à l’indice 1, taper Liste[1] … Nous pouvons aussi lire la liste en partant de la fin : Pour lire le dernier élément de la liste, qui est à l’indice -1, taper Liste[-1] Pour lire l’avant dernier élément de la liste, qui est à l’indice -2, taper Liste[-2] … |
Exemple, on va faire une liste d’altitudes :
Tapez les instructions suivantes dans la console :
Remarque :
Attention, si vous déclarez votre suite d’éléments entre parenthèses, (), il s’agira d’une structure différente appelée un tuple. Un tuple est une liste non modifiable.
Il faut créer une liste vide : Liste=[] Puis ajouter des éléments avec l’instruction append à chaque itération, syntaxe : Liste.append(élément_à_ajouter_à_la_fin_de_la_liste) |
Remarque :
To append signifie ajouter en anglais
Exemple, ajout de la valeur 10000 à la fin de la liste altitudes :
Exemple, création d’une liste d’altitudes de 0 à 10000 m par pas de 1000 m
En physique, le type liste nous permet d’obtenir des séries de valeurs dans le but de faire un graphique par exemple.
La fonction len() permet d’obtenir le nombre d’éléments d’une liste
Exemple :
Il existe de nombreuses instructions sur les listes non présentées ici : effacer un élément, insérer un élément, ordonner, extraire une partie de la liste … Taper help(list) dans la console pour les découvrir.
Pour parcourir les éléments d’une liste, nous pouvons utiliser une boucle for. La liste remplace la suite d’itérations (fonction range()). La syntaxe est la suivante :
Algorithmique | Python |
Pour i de la liste Liste Faire Instructions Fin Pour | for i inListe : # pensez aux 2 points objectreplacements_object_8 # pensez à l’indentation |
Exemple création d’une liste de pressions, notée LP, aux altitudes de la liste altitudes :
Résultat à la console :
Attention :
Pour travailler sur chaque élément de la liste, nous sommes obligés d’utiliser une boucle. Les opérateurs + et * n’ont pas le même résultat sur le type list que sur un entier ou un flottant.
L’opération + directement sur des variables du type list permet de concaténer des listes
Exemple :
L2 est la concaténation des deux listes
L’opération * permet de concaténer plusieurs fois la liste avec elle même
Exemple :
L2 est la concaténation de L1 à 3 reprises
Il existe plusieurs structures pouvant exécuter des instructions si des conditions sont remplies :
Algorithmique | Python |
Si Condition Alors Instructions Fin Si | ifcondition : objectreplacements_object_10 |
Algorithmique | Python |
Si Condition Alors Instructions Sinon Instructions Fin Si | ifcondition : objectreplacements_object_12 else : objectreplacements_object_14 |
Nous souhaitons faire un programme qui indique si la réflexion est totale, ou pas, dans une fibre optique.
# déterminer si la réflexion est totale dans une fibre optique # Importation de la fonction arcsinus et de la constante pi depuis le module math from math import pi # importation de pi depuis le module math from math import asin as arcsin # importation de la fonction asin, que l’on renomme arcsin # Constantes n1 = 1.456 # indice de réfraction de la silice (coeur de la fibre) n2 = 1.410 # indice de réfraction du silicone (gaine de la fibre) # angle limite pour la réfraction totale i1lim= arcsin(n2/n1) # Demande un angle incident i1deg, en °, dans la fibre i1deg=float(input(“Quel est l'angle incident exprimé en degré ?”)) i1=i1deg*2*pi/360 # conversion de l'angle en radian if i1 > i1lim : print(“il y a une réflexion totale”) else : print(“il y a un angle réfracté”) |
Un module est un fichier python qui comporte des fonctions. Il y a notamment les modules math et time auxquels nous avons plusieurs fois fait appel.
Importation des fonctions utiles depuis un module :
from math import pi, sin # importation de pi et de la fonction sinus depuis le module math
On accède uniquement aux fonctions importées avec le même nom que dans le module : pi, sin
Importation de la fonction souhaitée avec un nom différent :
from math import asin as arcsin
On accède uniquement aux fonctions importées avec les nouveaux noms. Dans l’exemple ci-dessus, on importe la fonction asin du module math, que l’on renomme arcsin pour l’utiliser dans notre programme.
Importation de toutes les fonctions d’un module :
from math import*#importation de toutes les fonctions du module math
On accède à toutes les fonctions du module importé avec le même nom que dans le module : pi, sin, cos …
Importation d’un module :
import math
Ainsi, on accédera aux fonctions pi et asin en tapant math.pi et math.asin.
Dans Python, où tout est objet, cela signifie que la fonction pi ou asin appartient à l’objet math.
Remarque :
Cette méthode a été utilisée précédemment pour l’exemple du compteur :
import time # module de gestion du temps
Et dans le script on retrouve l’écriture :
time.sleep(1) # la fonction sleep appartient à l’objet time
Le module matplotlib.pyplot comporte un ensemble de fonctions qui permettent de tracer des graphiques.
Plus rigoureusement matplotlib est le module et pyplot est un objet de ce module qui possède les fonctions que l’on va utiliser.
Les fonctions de bases pour tracer un graphique sont les suivantes :
Fonctions de l’objet matplotlib.pyplot | |
plot(X, Y) | Fonction qui permet de tracer le graphique de la liste des ordonnées Y en fonction de la liste des abscisses X |
title(“titre”) | Affiche un titre sur le graphique |
xlabel(“Nom de l’abscisse”) | Affiche le nom à coté de l’axe des abscisses |
ylabel(“Nom de l’ordonnée”) | Affiche un nom à coté de l’axe des ordonnées |
grid() | Affiche une grille sur le graphique |
show() | Important ! affiche le graphique |
Choisir ses échelles en abscisse et en ordonnée: axis([xmin, xmax, ymin, ymax]) | Echelle en abscisse : [xmin, xmax] Echelle en ordonnée : [ymin, ymax] |
Exemple de programme python :
Exécutez le programme et la fenêtre suivante s’ouvre :
Quelques outils en bas à gauche de la fenêtre nous permettent de faire des recadrages et d’exporter le graphique comme une image :
Revenir au réglage initial | Annuler ou refaire la dernière modification | Permet de bouger la courbe ou de changer les axes (clic gauche ou droit sur la courbe puis mouvement) | Faire un zoom sur une partie de la courbe | Paramètres de la fenêtre du graphique | Exporter le graphique (png, jpg, etc.) |
Il faut fermer la fenêtre du graphique pour pouvoir relancer le programme python !
Si il y a plusieurs courbes, nous pouvons les différencier avec des paramètres supplémentaires dans la fonction plot :
Fonctions de l’objet matplotlib.pyplot | ||
plot(X, Y, arguments) | Plusieurs arguments permettent de singulariser la courbe | |
Changer la couleur : “r” plot(X, Y, “r”) | L’argument “r” permet d’afficher la courbe en rouge (red) Les couleurs possibles sont : b g r c m y k w | |
Changer la nature du tracer : “–“ plot(X, Y, ”–“) | L’argument ”–” permet d’afficher la courbe en pointillées Les formes de courbes possibles sont : - – -. : | |
Ajouter une légende : plot(X, Y, label=“courbe1”) plot(X, Y2, label=“courbe2”) legend() | Ne pas oublier la fonction legend() qui permet d’afficher la légende. | |
Ajouter des marqueurs aux valeurs de la liste : plot(X, Y, marker=“*”) | Autres marqueurs possibles : o + . x * |
Exemple :
Modification dans le code ci-dessus :
plot(X,Y,“r-.”,marker=“o”,label=“courbe1”) # on indique la couleur et la forme ensemble
Nous pouvons aussi ajouter un texte sur un point, une flèche, faire un histogramme, un diagramme circulaire … voir plus de détails sur :
http://apprendre-python.com/page-creer-graphiques-scientifiques-python-apprendre
Faites un programme qui affiche la pression en fonction de l’altitude de 0 à 10000 m avec les axes annotés et un titre.
Code Python :
“”“
Tracé de la pression en fonction de l'altitude
”“”
from matplotlib.pyplot import plot, show, ylabel, xlabel, title, axis, grid, legend
P0=1013 # initialisation, pression au niveau de la mer en hPa
H=[] # liste des altitudes
P=[] # liste des pression correspondantes aux altitudes de la liste H
for h in range(0,10001,1000): # itération des altitudes
P.append(P0*(1-(0.0065*h/288.15))5.225) # Ajout pression dans la liste P
H.append(h) # Ajout altitude dans la liste H
plot(H,P,“r-.”,marker=“o”,label=“pression”)
title(“Evolution de la pression dans l'atmosphère entre 0 et 10 km d'altitude”)
xlabel(“Altitude [m]”)
ylabel(“Pression [hPa]”)
legend()
grid()
show()
Résultat :
Après exportation en jpg :**