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 :
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.
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 :
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 :
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 :
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.
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 :
>>> "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.
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) :
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.
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 :
04° A votre avis, que font ces instructions ?
>>> print("Hello World !")
>>> "Hello World !"
>>> print( "Hello W" + "orld !" )
>>> "Hello W" + "orld !"
...CORRECTION...
Dans les 4 cas, on voit s'afficher Hello World ! dans la console mais ...
La première fois entouré de ' et ' pour indiquer qu'il s'agit d'une chaîne de caractères.
La seconde fois, on utilise la fonction print qui permet d'afficher le résultat. La différence ? Uniquement l'absence des guillements simples pour l'instant. Nous verrons néanmoins que lorsque nous réaliserons un programme en mode non interactif, il faudra utiliser print de façon à afficher le résultat. Pour l'instant les deux méthodes fonctionnent mais le print est ici inutile : en mode interactif, la console affiche directement les contenus qu'on lui demande.
Dans les cas 3 et 4, on parvient à "coller" les deux chaînes de caractères : 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 ?
>>> "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 ?
>>> "I(mA)\tU(V)\tR(Ω)"
>>> "200\t6.0\t30"
>>> "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.
Bon alors, on met print ou non en mode interactif ? Mes collègues de maths m'ont dit qu'il ne fallait surtout pas ! Et bien regardez ci-dessous, c'est un peu plus compliqué que cela :
La fonction print
permet de forcer l'affichage de quelque chose sur la console.
Tant qu'on est en mode interactif ( >>>
), on n'a pas besoin d'utiliser print. Par contre, lorsque nous réaliserons des programmes enregistrés dans un fichier, il faudra l'utiliser pour forcer l'affichage.
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 :
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 :
>>> "Comme on dit souvent : \"Hello World !\""
'Comme on dit souvent : "Hello World !"'
>>> print("Comme on dit souvent : \"Hello World !\"")
Comme on dit souvent : "Hello World !"
Ici, on voit que la première méthode SANS PRINT est préférable : on affiche bien la même chose.
Pour afficher les guillemets simples en utilisant également des guillemets simples en ouveture et fermeture :
>>> 'Comme on dit souvent : \'Hello World !\''
"Comme on dit souvent : 'Hello World !'"
>>> print('Comme on dit souvent : \'Hello World !\'')
Comme on dit souvent : 'Hello World !'
Idem : la méthode SANS PRINT est préférable : on affiche bien la même chose.
Pour créer des tabulations :
>>> "I(mA)\tU(V)\tR(Ω)"
'I(mA)\tU(V)\tR(Ω)'
>>> "200\t6.0\t30"
'200\t6.0\t30'
>>> print("I(mA)\tU(V)\tR(Ω)")
I(mA) U(V) R(Ω)
>>> print("200\t6.0\t30")
200 6.0 30
Cette fois, on voit que c'est différent : pour interpréter correctement nos tabulations, nous avons besoin du print !
Attention donc : en mode interactif, vous n'aurez quasiment jamais besoin du print, c'est vrai. Sauf si vous voulez faire des affichages de mesures ou de calculs propres. Celles avec des colonnes bien propres par exemple.
Pour créer des antislashs :
>>> "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
Et sans le print ?
>>> "Bon\njour"
'Bon\njour'
Et oui : sans le print, l'interpréteur n'interprète pas le passage à la ligne !
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.
Pour afficher un nombre (120 par exemple), il y a deux façons de faire qui semblent similaires pour un humain :
>>> "120"
'120'
>>> 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.
>>> 120*2
>>> "120"*2
>>> "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.
>>> "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
>>> 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.
11° Vérifier le bon fonctionnement du code suivant :
>>> a*2
10
Et si nous placions un string dans la variable a ?
>>> a = "5"
>>> 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 variable | Nom du type pour Python | Ce qu'il peut contenir |
---|---|---|
Booléen/Boolean | bool | False or True (avec une majuscule) |
Entier/Integer | int | Un nombre entier comme 12 |
Nombre réel | float | Un nombre à virgule comme 12.0 ou 12.5 |
Nombre complexe | complex | Un nombre complexe comme z = 145 + 2i |
Chaîne de caractère | string | Une 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)
>>> a*2
>>> b = str(a)
>>> type(b)
>>> 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 :
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
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 :
...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.
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 |
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 :
Pour ouvrir l'environnement de développement IDLE fourni avec Python, il faut utiliser cette icône blanche :
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 !
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 :
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.
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 :
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 :
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 :
plt.scatter(x=I, y=U, label="U=f(I)")
plt.grid()
plt.savefig("loiOhm.png")
plt.show()
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])
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.
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+')
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.
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. |