Infoforall

Python-Physique 01 : Installer et découvrir Python

python

Le but de cette première activité Python pour la Physique-Chimie est de vous faire découvrir Python et de réaliser une représentation graphique en nuage de points. Vous pourrez alors réaliser des interfaces graphiques de ce type :

nuage de points

1 - Python ? Pourquoi ?

Python est un langage de programmation assez récent.

Sa première version date de 1991. Le nom Python vient de l'intérêt du développeur néerlandais Guido van Rossum, grand fan des Monty Python, notamment la série télévisée Monty Python's Flying Circus.

Python 2 sort en 2000 et il a assez rapidement connu un beau succès. De très nombreux programmes de gestion de données sont basés sur cette version de Python. Elle possède néanmoins de nombreux petits défauts.

Pour corriger ces défauts, Python 3 sort en 2008. Cette version casse néanmoins la compatibilité ascendante. De nombreux développeurs restent encore aujourd'hui sur Python 2 malgré la présence de la version 3. Mettre à jour des programmes sensibles pour le commerce, la finance ou la défense peut s'avérer plus dangereux que de garantir la maintenance d'un programme solide tournant en version 2.

Pourquoi un tel succès ? Difficile d'y répondre. D'autres langages aussi performants ont eu moins de succés. Voici par contre, les points forts de Python pour les sciences physiques :

Avantage 1 - Langage de programmation assez proche du langage naturel :

L'apprentissage de Python est assez simple car les lignes de code à produire n'utilisent pas une codification complexe à retenir.

C'est un avantage manifeste pour les enseignants et les élèves. On divise le nombre de lignes de code par 2, 3 ou 4 par rapport à d'autres langages plus verbeux.

De la même façon, on peut cacher ou mettre de côté certaines notions assez facilement lors d'une explication. C'est plus compliqué à faire en C++ par exemple.

Avantage 2 - Langage multiplateforme et interprété :

Lorsqu'on fournit un programme Python, on fournit un fichier .py contenant du texte. Ce texte sera interprété et exécuté sur la machine qui lance le code. Il n'y a donc pas problème de compatibilité : c'est la machine qui veut exécuter le code qui va le transformer en son propre langage machine.

interprété

Vous pouvez donc programmer sur un système d'exploitation Windows et fournir votre programme à un utilisateur Linux.

C'est un intêret énorme d'un point de vue pédagogique : on pourra demander aux élèves de travailler chez eux sur un programme Python très facilement.

DEFAUT : l'utilisateur devra NECESSAIREMENT avoir installé un interpréteur Python sur sa propre machine. Est-ce un réel défaut ? Pas vraiment car l'installation est gratuite et facile.

Si on prend un langage compilé comme C++, on obtient plutôt un schéma de ce type :

compilateur

Cette fois, vous ne parviendrez pas à faire fonctionner directement un programme créé pour Windows sur un système tournant sous Linux.

Avantage 3 - Facilité de création et distribution de modules :

Python peut s'embarquer facilement sur de petits systèmes. Toutes les fonctionnalités de base sont présentes sans représenter un poids énorme.

Si on veut faire quelque chose d'un peu particulier, on peut le coder à la rude ou simplement télécharger l'extension à Python (on parle de modules ou de bibliothèques) de quelqu'un qui a déjà fait le travail.

Au fil du temps, de très nombreux contributeurs ont réalisé des bibliothèques. Le téléchargement puis l'importation de ces modules sont très simples et permettent alors de réaliser tout ou presque tout.

Pour télécharger la bibliothèque matplotlib (pour tracer des graphiques) avant de l'utiliser, il suffit de taper une ligne dans la console ou le bash :

> pip install matplotlib

Le téléchargement et l'installation se fera automatiquement. C'est tout.

Il ne restera plus qu'à l'importer dans votre programme avec une ligne. Par exemple :

import matplotlib

Voici quelques exemples de choses gérables facilement en important la bonne bibliothèque :

  • Réalisation d'un programme avec interface graphique
  • Réalisation de graphes
  • Calculs mathématiques formels
  • Gestion d'un site web
  • Communication avec les ports USB
  • Communication avec une carte Arduino
  • Gestion d'une base de données
  • Gestion d'un GPS
  • Création de programmes communiquant sur un réseau
  • Réalisation d'objets 3D
  • . . .

Avantage 4 - Les référentiels y font désormais référence :

Après application de la réforme, on trouvera l'utilisation de Python :

  • Dans l'enseignement commun Sciences Numériques et Technologie en 2nde
  • Dans l'enseignement commun puis de spécialité de Mathématiques en 2nde, 1er et T
  • Dans l'enseignement commun Mathématiques en 1er technologique
  • Dans l'enseignement commun puis de spécialité de Physique Chimie en 2nde, 1er et T
  • Dans l'enseignement de spécialité Sciences de l’ingénieur en 1er et T
  • Dans l'enseignement de spécialité Numérique et sciences informatiques en 1er et T

Sans oublier les CPGE, beaucoup d'IUT et quelques BTS.

Les deux exemples sont issus de la proposition de projet pour la seconde et la spécialité en 1er :

Capacité numérique dans Description
Représenter et exploiter la caractéristique d’un dipôle Représenter un nuage de points associé à la caractéristique d’un dipôle et modéliser la caractéristique de ce dipôle à l’aide d’un langage de programmation.
Déterminer la composition de l’état final d’un système et l’avancement final d’une réaction Déterminer la composition de l’état final d’un système siège d’une transformation chimique totale à l’aide d’un langage de programmation.

Avantage 5 - Logiciel libre et codes produits visibles et modifiables :

Python fait partie du monde du logiciel open source et tout code récupéré sera donc lisible et modifiable.

De nombreuses distributions existent d'ailleurs, rajoutant des couches à la version basique de Python, CPython

Les parties du cours traitant de Python en sciences physiques devraient donc très rapidement être disponibles.

2 - Installation

Inutile de télécharger et d'installer les logiciels si vous êtes en salle informatique. Tout est déjà installé.

Voici les étapes à suivre pour installer correctement Python sur votre ordinateur :

ETAPE 1 : Téléchargement de Python :

Téléchargez et installez la dernière version de Python 3 : Lien vers Python

Vous devriez obtenir sous Windows, quelque chose comme cela :

Vous venez de télécharger le fichier exécutable qui va vous permettre d'installer l'interpréteur Python sur votre ordinateur.

ETAPE 2 : Installation de Python :

Lancez le programme d'installation : COCHEZ BIEN ADD PATH en bas de page puis cliquez sur INSTALL.

Si ce n'est pas fait, sélectionner les options de la page suivante :

Sur la page suivante, vous aurez le choix du répertoire d'installation et d'autres options encore.

Finissez l'installation et vous aurez normalement une installation correcte.

Il est temps de voir si tout ceci fonctionne correctement.

ETAPE 3 : Essai de fonctionnement :

Vous avez normalement un menu comportant deux icones importantes :

L'icône noire correspond à la console Python (Python 3.5 32 bits sur l'image). Ce programme permet de taper du code en direct mais sans le sauvegarder. La commande en ligne se repère par une invite de commande composée de trois chevrons  >>> 

L'icône blanche correspond à l'IDLE Python, un environnement de développement. Il intégre une console Python interne à l'ouverture mais le menu FILE vous permet de créer un fichier de code à enregister. On pourra ainsi lancer le code simplement en cliquant sur le fichier, sans avoir à tout taper à chaque fois.

Pour vérifier que cela fonctionne, cliquez sur l'icone noire (la console Python) et tapez ceci par exemple :

>>> print("Hello World !")

Vous devriez voir ceci s'afficher :

Hello World !

Il ne reste plus qu'à installer les bibliothèques supplémentaires que nous allons utiliser.

ETAPE 4 : Installation des bibliothèques supplémentaires :

Pour cela, nous allons avoir besoin d'utiliser la console de votre système d'exploitation, certainement Windows. Windows la nomme Invite de commandes.


Sous Windows 10 : Start Menu / Menu Démarrer pour ouvrir le menu des programmes.

Chercher Système Windows et Invite de Commande.

Dans cette console, il suffit alors d'utiliser un script python nommmé pip (pip install packages). Celui-ci va automatiquement aller chercher les bibliothèques que vous voulez sur Internet.

> pip install Pillow

> pip install matplotlib

> pip install scipy

Si tout ne se passe pas comme prévu, voici un tutoriel Installation, un tutoriel Utilisation et un tutoriel Module.

3 - Premiers calculs avec Python

L’utilisation de Python s’effectue à travers une sorte de console qu’on ouvre en activant le logiciel.

01° Ouvrir la console Python (l'icône noire) : console python

Vous devriez voir trois chevrons  >>> 

02° Testez avec les calculs suivants :

>>> 14/3

>>> 9*9+2

>>> 12-2*0.8888

>>> 3E8*12E-15

Cela fonctionne donc comme une sorte de calculatrice. On lance des calculs en temps réel.

On dispose de quelques opérateurs supplémentaires.

03° Regardons les 4 instructions suivantes :

Opérateur 1/4 :

>>> 14/3

4.666666667

Comme sur les calculatrices, c'est approximatif mais cela devrait permettre une résolution correcte des problèmes.

L'utilisation de  /  représente donc bien l'opérateur division.

On retrouve les autres signes standards pour les opérateurs :  +   -  et  * .

Opérateur 2/4 :

>>> 14//3

4

L'utilisation de  //  permet donc d'obtenir la partie entière de la division de 14 par 3 qui vaut 4,6666666667.

Opérateur 3/4 :

>>> 14%3

2

L'utilisation de  %  permet donc d'obtenir le reste de la divison entière : 14 = 4x3 + 2. On parle également de modulo, comme pour les angles qui sont connus modulo 360° ou 2Π rad.

Opérateur 4/4 :

>>> 3**2

9

L'utilisation de  **  permet donc de calculer la puissance.

4 - Afficher des caractères sur la console

Copier/Coller

Attention, il ne faut pas copier l'intégralité du code puisqu'il contient déjà les 3 chevrons. Ne prenez que le code situé après  >>> .

Le mieux est encore de faire du CTRL + C pour copier et du CTRL + V pour coller.


Si le coller ne fonctionne pas, vous pouvez faire unc oopier avec CTRL + C et un coller en passant par le menu de la console :

  • Faire un clic droit en plaçant le curseur sur le barre du haut
  • Aller dans le menu MODIFIER - COLLER
  • coller dans la console

04° A votre avis, que font ces instructions ?

>>> print("Hello World !")

>>> print( "Hello W" + "orld !" )

...CORRECTION...

Dans les deux cas, on voit s'afficher Hello World ! dans la console.


Python sait donc additionner deux strings. On nomme cela la concaténation.

Ce qui apparaît en bleu se nomme un STRING en python : une chaîne de caractères en français.

Un string commence avec des guillements doubles et finit par des guillemet doubles :

"Hello World !"

Mais on peut également utiliser des guillemets simples :

'Hello World !'

Par contre, on doit fermer un string avec le même type de guillemets en ouverture et en fermeture. Le code suivant ne permet pas de créer un string :

'Hello World !"

Si on utilise un guillemet double pour coder l'ouverture du string, on ne peut donc plus en afficher : Python va croire qu'on ferme le string ! En réalité, on peut afficher un " et c’est simple : on utilise l’antislash  \  avant le signe lui même.

05° A votre avis, que fait ce code ?

>>> print("Comme on dit souvent : \"Hello World !\"")

Remarque :

\ se nomme antislash ou backslash. b comme baisse.

/ se nomme slash. s comme saute.

Dernière chose : pour formater un affichage via des tabulations, on peut utiliser \t, avec t comme tabulations.

Du coup, l’antislash est un caractère spécial puisqu’il sert à coder des fonctions particulières comme la tabulation. Comment afficher un antislash alors ? C’est simple … on en met deux à la suite.

06° Qu’affiche le code ci-dessous ?

>>> print("I(mA)\tU(V)\tR(Ω)")

>>> print("200\t6.0\t30")

>>> print("Voilà un antislash \\")

...CORRECTION...

Vous devriez voir que \t permet de créer une tabulation.

Vous devriez voir que \\ permet d'afficher l'anti-slash.

Résumons :

La fonction  print  permet de forcer l'affichage de quelque chose sur la console.

La chose à afficher doit être précisée entre les parenthèses du  print .

Pour transmettre un texte, on doit transmettre un string qui doit :

  • Commencer ET finir par des guillemets doubles " ou
  • Commencer ET finir par des guillemets simples '.

Il existe du coup quelques caractères qu'on ne peut pas afficher directement :

Pour afficher les guillemets doubles en utilisant également des guillemets doubles en ouveture et fermeture :

>>> print("Comme on dit souvent : \"Hello World !\"")

Pour afficher les guillemets simples en utilisant également des guillemets simples en ouveture et fermeture :

>>> print('Comme on dit souvent : \'Hello World !\'')

Pour créer des tabulations :

>>> print("I(mA)\tU(V)\tR(Ω)")

>>> print("200\t6.0\t30")

Pour créer des antislashs :

>>> print("Voilà un antislash \\")

Voyons le passage à la ligne. Si vous voulez afficher "Bon" sur une ligne et "jour" sur la ligne suivante, il suffit d'utilser un caractère spécial à la fin de "Bon". Lequel ? \n : on obtient alors la chaîne de caractères "Bon\njour".

07° Afficher la chaîne "Bon\njour" pour voir comment Python interprète votre chaîne.

On obtient donc :

>>> print("Bon\njour")

Bon

jour

Pourquoi étudier cela ? Pour parvenir à formater correctement les données et parvenir à comprendre les données qu'on reçoit d'une carte Arduino par exemple. Vous verrez cela plus tard.

Voilà. Vous connaissez les bases de l'affichage via la console et vous savez que Python gère de façon différente les strings et les nombres.

5 - Les variables

Pour afficher un nombre (120 par exemple), il y a deux façons de faire qui semblent similaires pour un humain :

>>> print ("120")

120

>>> print (120)

120

Pour un humain, c'est pareil mais pas pour l'ordinateur : Pour lui, "120" est du même type qu'une chaîne comme "ABC".

08° Tenter de deviner ce que vont afficher les codes suivants. Tapez et exécutez le code une fois que vous pensez avoir la réponse.

>>> print(120*2)

>>> print("120"*2)

>>> print("120"+2)

09° A votre avis, pourquoi le dernier cas ne donne-t-il rien d’interprétable ?

...CORRECTION...

Si on veut deux fois le nombre 120, on obtient 240.

Si on veut deux fois la chaîne "120", on obtient "120120".

Par contre, Python ne sait absolument pas additionner une chaîne de caractères et un nombre ... En même temps, que feriez-vous si on vous demandait de faire la somme de "ABC" et du nombre 2.

Si vous voulez afficher sur la même ligne un string et un integer, il peut utiliser une virgule pour séparer les choses à afficher. Dans ce cas, Python ne cherche pas à additionner ou à concaténer, il va simplement les placer côte à côte.

>>> print("120*2 = ",120*2)

120*2 = 240

Comment parvenir à enregistrer les données et les calculs intermédiaires par exemple ? La réponse est simple : on les place dans une variable.

Voyez dans un premier temps une variable comme une zone de stockage accessible en connaissant son nom. C'est un modèle simple qui permet d'expliquer les cas simples. Nous le compliquerons par la suite.

10° Taper ceci dans la Console Python :

>>> a = 5

>>> print(a)

5

Et voilà, vous venez de déclarer (créer) votre première variable en utilisant le signe  =  pour affecter 5 dans une case mémoire : vous avez stocké 5 dans une zone mémoire qu'on pourra retrouver en tapant simplement a.

Ainsi, à chaque fois qu'on tapera a dans le script, Python remplacera cette variable par ce qui est stocké à l'adresse correspondante.

Ici, votre variable contient un entier, un Integer en langage informatique.

Dans 90% des cas, vous pouvez voir les variables comme le nom d'une boîte contenant quelque chose. Lorsqu'on tape ce nom, Python vous renvoie le contenu de la boîte.

Partie optionnelle

...ESPACE DES NOMS...

Pour ceux qui veulent en savoir un peu plus, une variable est en réalité un raccourci pour atteindre une zone mémoire sans avoir à fournir son adresse réelle.

L'ordinateur se crée une sorte de répertoire faisant la liaison entre le nom que vous avez utilisé et un identifiant mémoire (id) : on nomme cela un espace des noms.

espace des noms

11° Vérifier le bon fonctionnement du code suivant :

>>> print(a*2)

10

Et si nous placions un string dans la variable a ?

>>> a = "5"

>>> print(a*2)

55

12° Pourquoi obtient-on "55" et pas 10 ?

...CORRECTION...

On crée une variable a qui désigne l'adresse d'une zone mémoire qui contient un STRING "5".

Lorsqu'on demande de multiplier le string par 2, Python va alors simplement comprendre qu'on veut 2 "5" , soit "55" .

Comme vous le voyez, connaitre le type des données est important. Comment savoir à l'avance ce que désigne une variable ? Il faut utiliser une fonction native de Python : type.

13° Lancer les instructions suivantes pour comprendre ce que fait cette fonction. Vous remarquerez au passage qu'on n'utilise pas les accents dans les noms de variables.

>>> premiere = 5

>>> type(premiere)

>>> deuxieme = "5"

>>> type(deuxieme)

>>> troisieme = 5.0

>>> type(troisieme)

...CORRECTION...

La fonction type permet donc d'obtenir le type de données stockées à l'adresse mémoire pointée par la variable.

Si on stocke 5, on obtient une variable de type int pour integer (nombre entier)

Si on stocke "5", on obtient une variable de type str pour string (chaîne de caractères)

Si on stocke 5.0, on obtient une variable de type float pour float (nombre réel ou nombre à virgule flottante)

Les types de variables disponibles et les contenus attendus de ces variables sont donnés ci-dessous :

Type de variableNom du type pour PythonCe qu'il peut contenir
Booléen/BooleanboolFalse or True (avec une majuscule)
Entier/IntegerintUn nombre entier comme 12
Nombre réelfloatUn nombre à virgule comme 12.0 ou 12.5
Nombre complexecomplexUn nombre complexe comme z = 145 + 2i
Chaîne de caractèrestringUne chaîne de caractères, c'est-à-dire un mot ou une phrase. On la définit entre deux guillemets ou apostrophes."chaîne de caractère" 'autre chaîne de caractère'

On peut bien entendu tenter de transformer un type de variable en une autre. Pour cela, on utilise les fonctions natives suivantes :

14° Lancer les instructions suivantes pour comprendre ce que fait la fonction str :

>>> a = 5

>>> type(a)

>>> print(a*2)


>>> b = str(a)

>>> type(b)

>>> print(b*2)

...CORRECTION...

1e cas : a est un integer. On obtient un string b.

b désigne "5".

2*b désigne "55"

Remarque 1 : vous remarquerez que tous les noms de variables commencent par une minuscule, pas une majuscule. Les entités informatiques commençant par une majuscule désignent ce qu'on nomme les classes d'objets. En sciences physiques, nous allons certainement assouplir cette codification pour ne pas embrouiller les élèves. Si une grandeur est une majuscule dans le cours, autant garder la majuscule dans le code. A voir.

Remarque 2 : il existe une liste des noms réservés qu'on ne peut pas utiliser car l'interpréteur Python les utilise déjà comme mots-clés : LIEN EXTERNE VERS LA DOCUMENTATION PYTHON

Remarque 3 : Les ordinateurs ont suffisamment de mémoire désormais pour ne plus créer des variables ne comportant qu'une seule lettre. Si possible, tenter de donner à vos variables des noms explicites : des noms permettant de savoir au premier coup d'oeil ce qu'elles contiennent.

Remarque 4 : Python est sensible à la casse. Cela veut dire qu'il distingue les minuscules et les majuscules. Les variables toto et toTO désignent donc bien deux variables différentes. Pour ne pas se perdre dans les notations, on propose souvent d'utiliser l'une des conventions ci-dessous pour les variables composées de plusieurs mots :

6 - Lire le clavier avec input

C'est bien beau tout ceci mais pour l'instant, ce n'est pas très interactif. Avant de passer à la partie sur la réalisation d'un nuage de points sur le TP Loi d'Ohm, tentons de voir comment demander des résultats de mesure.

Nous allons pour cela utiliser l'inverse du print : la fonction input qui affiche un message à l'écran mais attend la réponse de l'utilisateur. On stockera la réponse dans une variable.

>>> I = input("Intensité (A) ? ")

>>> U = input("Tension (V) ? ")

>>> print(I)

>>> I

>>> type(I)

15° Lancer les instructions précédentes pour comprendre ce que fait la fonction input.

...CORRECTION...

La fonction input permet de récupérer la saisie de l'utilisateur. Néanmoins, ATTENTION : cette saisie est automatiquement stockée sous forme d'un string même s'il s'agit de quelque chose qu'un humain interpréterait comme un nombre.

Il faudra donc utiliser la fonction float pour tenter de transformer le string en nombre à virgule flottante.

16° A-t-on vraiment besoin de print pour afficher le contenu d'une variable dans la console ?

...CORRECTION...

Non.

Si on demande simplement I, on aura par contre la présence de guillemets simples pour indiquer qu'il s'agit d'un string.

La fonction print est implantée dans chaque type pour afficher au mieux le contenu de la variable.

17° Rajouter les instructions permettant de calculer la résistance à l'aide de U = R.I.

...CORRECTION POSSIBLE...

>>> I = input("Intensité (A) ? ")

>>> U = input("Tension (V) ? ")

>>> I = float(I)

>>> U = float(U)

>>> R = U/I

>>> R

...CORRECTION CONDENSEE...

>>> I = float(input("Intensité (A) ? "))

>>> U = float(input("Tension (V) ? "))

>>> R = U/I

>>> R

7 - Les listes

En Physique-Chimie, nous avons rarement besoin de stocker une seule valeur. Lors des expériences, nous avons plutôt des séries de mesures à gérer. Il existe un type d'objet bien utile pour cela : la liste.

Nous allons prendre l'exemple du référentiel de seconde avec la loi d'Ohm. Imaginons les mesures suivantes :

I(mA) 0 10.2 19.8 38.9
U(V) 0 1.0 2.0 3.9

Nous n'allons pas créer 8 variables. Ce serait un peu long, surtout s'il faut les convertir en float à chaque fois.

Nous allons stocker les résultats dans :

Voici les mesures sous forme de listes :

>>> I = [ 0, 10.2, 19.8, 38.9 ]

>>> U = [ 0, 1.0, 2.0, 3.9 ]

>>> I

>>> type(I)

>>> I[0]

>>> I[1]

>>> I[2]

>>> I[3]

>>> I[4]

18° Utiliser les instructions ci-dessus pour tenter de répondre aux question suivantes :

  1. Quel est le caractère permettant de préciser qu'on commence à déclarer une liste ?
  2. Quel est le caractère permettant de préciser qu'on termine la déclaration de la liste ?
  3. Quel est le caractère permettant de séparer les différents éléments de la liste ?
  4. Pourquoi est-il important d'utiliser le point plutôt que la virgule lorsqu'on fournit un nombre réel ?
  5. Comment parvient-on à lire le contenu d'une des 'cases' de la liste ?
  6. Pourquoi a-t-on une erreur lorsqu'on tente de lire le contenu de l'index 4 de la liste I ?

...CORRECTION ...

Q1 : Une liste commence par un crocher d'ouverture [

Q2 : Une liste finit par un crocher de fermeture ]

Q3 : Les éléments sont séparés par des virgules

Q4 : Comme la virgule sert de caractères séparateurs, il faut obligatoirement utiliser le point.

Q5 : on lit le contenu d'une position en donnant le nom de la liste suivi du numéro d'index entre crochets.

Q6 : l'index 4 n'existe pas. On a les index 0, 1, 2 et 3. 4 élements de 0 à 3 et pas 4 éléments de 1 à 4.

Je ne parviens pas à taper les crochets !

Il faut d'utiliser les touches ALT GR + ( pour le crochet d'ouverture [.

Il faut d'utiliser les touches ALT GR + ) pour le crochet d'ouverture ].

Si on cherche à représenter le contenu de nos listes, on pourrait faire une représentation de ce type :

Numéro d'index 0 1 2 3
I(mA) 0 10.2 19.8 38.9
U(V) 0 1.0 2.0 3.9

8 - Programme

Une question se pose : pourquoi taper le code print(120*2) puisque le code 120*2 dans la console affiche déjà 240 ?

Regardons l'exemple ci-dessous :

>>> I = [ 0, 10.2, 19.8, 38.9 ]

>>> U = [ 0, 1.0, 2.0, 3.9 ]

>>> print(U[1]/I[1]*1000)

98.03921568627452

>>> U[1]/I[1]*1000

98.03921568627452

C’est simple, pour l’instant, on tape le code ligne par ligne et le code s’exécute instantanément.

Nous allons maintenant voir comment programmer et enregistrer plutôt que de tout taper ligne par ligne.

Pour ouvrir la console, il fallait utiliser cette icône noire : console python

Pour ouvrir l'environnement de développement IDLE fourni avec Python, il faut utiliser cette icône blanche : IDLE python

19-A° Ouvrir IDLE : vous devriez vous retrouver dans la console Python de l'IDLE. On retrouve les trois chevrons. Utiliser NEW dans le menu FILE. Vous devriez cette fois obtenir une page ne contenant pas de chevron : nous ne sommes plus en exécution immédiate. Nous allons pouvoir taper du code, l'enregistrer et l'exécuter à la demande. Sans avoir à tout retaper à chaque fois !

premier programme

19-B° Copier/coller le code suivant :

import matplotlib.pyplot as plt


I = [ 0, 10.2, 19.8, 38.9 ]

U = [ 0, 1.0, 2.0, 3.9 ]


plt.scatter(x=I, y=U)

plt.savefig("loiOhm.png")

plt.grid()

plt.show()

19-C° Avec le menu FILE, utiliser SAVE pour enregistrer le fichier qui sera créé avec une extension .py.

19-D° Dans le menu RUN, activer RUN MODULE ou taper sur F5.

Vous devriez voir ceci apparaitre à l'écran :

nuage de points

19-E° Jouer avec les boutons pour découvrir comment zoomer, comment déplacer la vue, revenir à la vue initiale ou sauvegarder la vue actuelle dans un fichier image.

19-F° Aller dans le répertoire qui contient votre fichier Python. Vous devriez y trouver maintenant un fichier image d'extension png. L'ouvrir.

image enregistrée

Comme vous le voyez, on obtient un beau résultat simplement en utilisant un module créé par quelqu'un d'autre. Par contre, l'image enregistrée ne correspond pas à l'image affichée. Tentons de comprendre pourquoi en analysant le code ligne par ligne :

import matplotlib.pyplot as plt

On importe dans Python le module pyplot contenu dans la bibliothèque matplotlib.

as veut dire qu'on pourra faire référence à ce module en tapant juste plt plutôt que matplotlib.pyplot.

I = [ 0, 10.2, 19.8, 38.9 ]

U = [ 0, 1.0, 2.0, 3.9 ]

On fournit les mesures en les enregistrant dans les listes nommées I et U.

Sur ce site, la couleur bleue implique qu'il s'agit d'une variable. Il s'agit d'une déclaration, la police d'écriture est en gras.

plt.scatter(x=I, y=U)

Ca, on ne peut pas l'inventer. Il s'agit d'aller chercher dans le module plt une fonction nommée scatter qui permet de créer un graphique de type nuage de points.

On doit lui fournir deux arguments :

  • On transmet la liste I comme argument x
  • On transmet la liste U comme argument y

Nous allons donc tracer U = f(I).

plt.savefig("loiOhm.png")

On va chercher dans le module plt une fonction nommée savefig qui permet de sauvegarder dans un fichier le graphique en cours.

On doit lui fournir un argument : le nom du fichier qu'on désire obtenir.

Comme on ne donne pas d'indication supplémentaire, le fichier sera créé dans le même répertoire que votre fichier Python.

plt.grid()

On va chercher dans le module plt une fonction nommée grid qui permet d'activer l'affichage d'une grille de coordonnées sur le graphique.

On ne lui fournit aucun argument entre parenthèses. La grille sera définie par défaut.

plt.show()

On va chercher dans le module plt une fonction nommée show qui permet d'afficher à l'écran le graphique en cours.

On ne lui fournit aucun argument entre parenthèses. L'affichage utilsera les paramètres par défaut.

Regardons comment le programme s'éxécute :

CLIQUEZ ICI POUR VOIR LE DEROULEMENT :

import matplotlib.pyplot as plt


I = [ 0, 10.2, 19.8, 38.9 ]

U = [ 0, 1.0, 2.0, 3.9 ]


plt.scatter(x=I, y=U)

plt.savefig("loiOhm.png")

plt.grid()

plt.show()

20° Maintenant que vous savez comment le programme s'éxécute, pourquoi voit-on une grille à l'écran mais pas sur le fichier ? Modifier le code pour obtenir le même résultat à l'écran et dans le fichier image PNG.

...EXPLICATIONS ...

Nous avons ici de la programmation séquentielle : l'interpréteur Python exécute les lignes les unes à la suite des autres.

On voit donc qu'on crée avec savefig un fichier-image AVANT d'activer la grille avec grid. L'image sauvegardée ne contient donc pas la grille. C'est tout simple.

Si on veut que le fichier-image PNG intégre la grille, il suffit donc d'activer grid AVANT de créer le fichier-image PNG.

...CODE CORRIGE ...

import matplotlib.pyplot as plt


I = [ 0, 10.2, 19.8, 38.9 ]

U = [ 0, 1.0, 2.0, 3.9 ]


plt.scatter(x=I, y=U)

plt.grid()


plt.savefig("loiOhm.png")

plt.show()

QUESTION FINALE° Compléter le code pour obtenir des indications claires sur les axes en utilisant la documentation suivante :

nuage de points

Pour afficher un label sur l'axe des abscisses :

plt.xlabel("Intensité I(mA)")

Pour afficher un label sur l'axe des ordonnées :

plt.ylabel("Tension U(V)")

Pour afficher un titre :

plt.title("Caractéristique électrique U=f(I) d'un résistor")

Pour afficher une légende, deux solutions :

plt.legend(["Mesures expérimentales"], loc = 'lower right')

plt.scatter(x=I, y=U, label="Mesures expérimentales")

plt.legend(loc='lower right')

Pour imposer des échelles sur les axes, il faut transmettre une liste contenant dans l'ordre : Xmin, Xmax, Ymin et Ymax

plt.axis([0,40,0,4])

...CODE CORRIGE ...

import matplotlib.pyplot as plt


I = [ 0, 10.2, 19.8, 38.9 ]

U = [ 0, 1.0, 2.0, 3.9 ]


plt.scatter(x=I, y=U, label="Mesures expérimentales")


plt.xlabel("Intensité I(mA)")

plt.ylabel("Tension U(V)")

plt.title("Caractéristique électrique U=f(I) d'un résistor")

plt.legend(loc='lower right')

plt.axis([0,40,0,4])

plt.grid()


plt.savefig("loiOhm.png")

plt.show()

Résumons les éléments importants de ce premier contact avec Python :

On peut programmer en Python en direct (avec la console) ou en créant un programme (avec IDLE par exemple).

Un programme s'exécute de façon séquentielle et l'ordre des instructions a donc une importance.

On peut stocker des données dans des variables en les déclarant à l'aide du signe =.

Nous avons vu plusieurs types possibles de variables : int, float, string et list.

On peut connaitre le type d'une variable a en utilisant type(a).

On peut déclarer un string en utilisant les guillements doubles comme caractères délimitateurs : a = "bonjour"

On peut déclarer un string en utilisant les guillements simples comme caractères délimitateurs : a = 'bonjour'

On peut déclarer une liste en utilisant les crochets comme caractères délimitateurs : I = [ 0, 10.2, 19.8, 38.9 ]

On peut accéder à un élément d'une liste si on connait son index : I[0] désigne le premier élément. Attention au décalage.

On peut forcer l'affichage dans la console en utilisant la fonction print : print(a) affiche le contenu de a sur la console.

On peut récupérer l'entrée clavier en utilisant la fonction input : reponse = input("Pourriez-vous répondre ?") stocke la réponse dans la variable reponse. Attention, cette variable contient automatiquement un STRING.

On peut tenter de convertir un type de variable en un autre autre en utilisant les fonctions str, int et float.

On peut importer les fonctionnalités d'une bibliothèque en utilisant par exemple import matplotlib.pyplot as plt

On peut alors accéder aux fonctions contenues dans le module plt en utilisant un point entre le nom du module et le nom de la fonction :

  • Pour créer un nuage de points : plt.scatter(x=I, y=U, label="U=f(I)")
  • Pour rajouter la grille : plt.grid()
  • Pour enregistrer dans un fichier-image : plt.savefig("loiOhm.png")
  • Pour afficher le graphique interactif à l'écran : plt.show()
  • Pour afficher un label sur l'axe des abscisses et des ordonnées : plt.xlabel("Intensité I(mA)") plt.ylabel("Tension U(V)")
  • Pour afficher un titre : plt.title("Caractéristique électrique U=f(I) d'un résistor")
  • Pour afficher une légende sur un label : plt.legend(loc='lower right')
  • Pour imposer des échelles sur les axes, il faut transmettre une liste contenant dans l'ordre Xmin, Xmax, Ymin et Ymax : plt.axis([0,40,0,4])

Nous compléterons dans l'activité suivante le graphique que nous venons d'obtenir.

Nous verrons comment modifier les couleurs, tracer une droite moyenne ou une réprésentation mathématique d'une loi.

9 - FAQ

Question : J'ai vu des scripts contenant des fonctions plot. C'est quoi ?

La fonction plot permet de tracer des graphiques reliant les points fournis par des bouts de droite ou simplement d'indiquer les coordonnées avec une croix, un rond ...

Si vous utilisez ceci à la place de la fonction scatter, vous obtenez le graphique ci-dessous :

plt.plot(I, U, 'b+')

nuage de croix avec plot

Le b+ veut dire de tracer des croix(+) en bleu(blue).

Si vous aviez mis ro, vous auriez eu des ronds(o) rouges (red).

Les deux fonctions ont des avantages et des inconvénients.

Question : Comment commenter mon programme pour me souvenir de ce qu'il fait ?

Il suffit de placer un dièse dans le code : tout ce qui est située sur la ligne après le # sera vu comme un commentaire : le programme ne l'analysera pas du tout.

Cela permet d'écrire des indications pour celui qui devra utiliser ou modifier le programme par la suite.

CLIQUEZ ICI POUR VOIR LE DEROULEMENT :

# Importation du modèle pyplot de la bibliothèque matplotlib

import matplotlib.pyplot as plt


# Création de la liste contenant les intensités, en mA

I = [ 0, 10.2, 19.8, 38.9 ]

# Création de la liste contenant les tensions, en V

U = [ 0, 1.0, 2.0, 3.9 ]


# Création du nuage de points

plt.scatter(x=I, y=U)

# Création d'un fichier-image basée sur le graphique précédent

plt.savefig("loiOhm.png")

# Rajout d'un système d'axe avec grille visible

plt.grid()

# Affichage de l'interface à l'écran

plt.show()

Question : Pourquoi certains caractères s'affichent mal dans la console ?

Cela provient du système d'encodage : l'ordinateur n'enregistre pas des caractères mais des octets.

Par défaut, l'interpréteur Python code votre texte et ce qu'il envoit à d'autres programmes en UTF-8. Il transforme donc vos caractères en suite de nombres.

Lorsque la console doit afficher quelque chose, elle reçoit ces octets mais tente de l'interpréter avec son propre système de décodage par défaut. Si ce n'est pas l'UTF-8, il y a donc problème de traduction.

Avec les caractères A-Z, a-z, 0-9, cela ne pose jamais de problème puisque tous les systèmes d'encodage sont compatibles avec la norme d'encodage ASCII.

Le problème vient de caractères accentués et autres qui ne sont pas tous encodés de la même façon.

Question : Pourquoi certains programmes commencent-ils avec deux commentaires étranges ?

On rencontre parfois ceci :

#!/usr/bin/env python

# -*- coding: utf-8 -*-

La première ligne précise que le code fourni est du Python. C'est plutôt destiné aux systèmes Linux, avec Windows l'extension .py devrait être explicite. Mais ça ne coûte rien de le rajouter.

La deuxième ligne précise l'encodage utilisé pour créer le fichier-texte. Pour l'instant, l'encodage par défaut est l'UTF-8 : même si vous ne précisez rien, cela sera le cas.

Question : Peut-on programmer en Python d'une autre façon ?

Vous pourriez utiliser un simple éditeur de texte et lui demander d'enregistrer un fichier-texte d'extension .py.

Ou utiliser un éditeur multilangage comme Notepad++ ou SublimeText.

Il existe également des distributions de Python réalisées spécialement pour les disciplines scientifiques. Elles fonctionnent souvent avec IPython (I pour interactive) : c'est un mélange du fonctionnement de la console Python et des scripts Python.

L'un des plus connus et utilisés actuellement est Spyder, téléchargeable gratuitement.

Références et sites traitant de Python pour la Physique-Chimie :

Pages importantes à retrouver dans les références Python 3 :

Lien Description
Matplotlib Documentation de la bibliothèque matplotlib.
scipy Documentation de la bibliothèque scipy.
Spyder Site de l'environnement de développement SPYDER. Permet d'avoir une interface locale complète dédiée aux enseignements scientifiques. Intègre automatiquement les bibliothèques scientifiques (matplotlib, numpy, scipy ...)
jupyter Le site de l'interface jupyter. En cliquant sur TRY IN YOUR BROWSER, vous pourrez utiliser Python avec les bibliothèques matplotlib... en lignes. Pratique pour dépanner. Attention, le site est parfois pris d'assaut et vous ne pourrez pas y accéder. Attention, seules les images créées sont visibles. Pas les interfaces.
repl.it Un autre site permettant de lancer du script Python pour créer des graphiques avec matplotlib. Attention, seules les images créées sont visibles. Pas les interfaces.
Python Anywhere Un autre site permettant de lancer du script Python pour créer des graphiques avec matplotlib. Il faut créer un compte, gratuit. On accède aux images créées dans la partie FILE. Attention, seules les images créées sont visibles. Pas les interfaces.