Sciences de l'ingénieur (Spé) — Programmation
Programmation Python en SI
Algorithmes, structures de données, interfaces et simulation numérique
Résumé synthétiqueFiche en 4 sectionsQuiz de 10 questionsGratuit, sans pub
Cours de spé Sciences de l'ingénieur. Même notion dans une autre matière : Algorithmique et programmation Python — maths du tronc commun · Algorithmique et programmation Python — spé Maths
Résumé
Python est le langage de programmation utilisé en SI pour le traitement de données, la simulation et la création d'interfaces. Les structures de base incluent les variables (entier, flottant, chaîne, booléen), les structures conditionnelles (if/elif/else), les boucles (for et while) et les fonctions. Par exemple, pour calculer la vitesse d'un moteur à partir du nombre d'impulsions d'un codeur, on écrit une fonction qui divise le nombre d'impulsions par le temps et multiplie par le pas angulaire. Les listes et les tableaux NumPy permettent de stocker et traiter des séries de mesures : on peut calculer la moyenne, tracer des courbes avec Matplotlib ou comparer des résultats simulés à des mesures expérimentales. La bibliothèque Tkinter permet de créer des interfaces graphiques avec boutons, curseurs et zones d'affichage pour piloter un système ou visualiser des données en temps réel.
Python est le langage de référence en SI : lisible, gratuit, riche en bibliothèques scientifiques. On commence par les briques universelles : variables, opérateurs, conditions, boucles et fonctions.
- Variables :
x = 5(int),y = 3.14(float),nom = 'SI'(str),ok = True(bool). - Opérateurs :
+,-,*,/,//(division entière),%(modulo),**(puissance). - Condition :
if…elif…else(l'indentation délimite les blocs). - Boucle
for:for i in range(10):parcourtide $0$ à $9$. - Boucle
while: répète tant que la condition est vraie. - Fonction :
def ma_fonction(p1, p2):…return résultat.
Exemple
Vitesse d'un codeur :
def vitesse(impulsions, temps): return impulsions / temps * pas_angulaire. Avec $200$ impulsions en $0{,}5\ \mathrm{s}$ et un pas de $1{,}8$° : $\dfrac{200}{0{,}5} \times 1{,}8 = 720$ °/s.Piège à éviter
En Python, l'indentation (les espaces en début de ligne) définit les blocs : un décalage incohérent provoque une
IndentationError. Ne mélange pas espaces et tabulations.Pour traiter des séries de mesures, on a besoin de conteneurs : les listes (séquences), les dictionnaires (couples clé-valeur) et les tableaux NumPy (calcul scientifique vectorisé).
- Liste :
mesures = [23.5, 24.1, 22.8]; accès par indicemesures[0]$= 23.5$. - Ajout :
mesures.append(25.0); longueur :len(mesures); parcours :for m in mesures:. - Compréhension :
carres = [x**2 for x in range(10)]. - Dictionnaire :
capteur = {'nom': 'LM35', 'sensibilite': 10}; accèscapteur['nom']. - Tableau NumPy :
import numpy as np;t = np.linspace(0, 10, 100)crée $100$ points de $0$ à $10$. - Vectorisation :
y = np.sin(2*np.pi*t)calcule le sinus pour chaque élément det.
Exemple
Moyenne de mesures :
mesures = [23.5, 24.1, 22.8] puis moyenne = sum(mesures) / len(mesures) donne $\dfrac{23{,}5 + 24{,}1 + 22{,}8}{3} \approx 23{,}5$ °C.Piège à éviter
Les indices commencent à $0$ :
mesures[0] est le premier élément. mesures[3] sur une liste de $3$ éléments lève une IndexError (le dernier est mesures[2]).Matplotlib transforme des données en graphiques : courbe de réponse d'un circuit, comparaison simulation/mesure… Indispensable pour analyser visuellement un système.
- Import :
import matplotlib.pyplot as plt. plt.plot(x, y, 'r-', label='tension')traceyen fonction dexen rouge continu.plt.xlabel('Temps (s)'),plt.ylabel('Tension (V)'),plt.title(...)légendent les axes.plt.legend()affiche la légende ;plt.grid()ajoute un quadrillage.plt.show()affiche ;plt.savefig('courbe.png')enregistre en image.- Comparer simulation et mesure : tracer les deux courbes et analyser l'écart.
Exemple
Tracé d'une charge RC :
t = np.linspace(0, 5, 100) ; u = 12 * (1 - np.exp(-t/1)) ; plt.plot(t, u) ; plt.show(). On visualise la montée exponentielle vers $12\ \mathrm{V}$ avec $\tau = 1\ \mathrm{s}$.Piège à éviter
Sans appel à
plt.show() (ou plt.savefig), aucune figure n'apparaît : tous les plt.plot se cumulent en mémoire mais ne s'affichent qu'au show().Au-delà des calculs, Python pilote de vraies applications : interfaces graphiques (Tkinter), lecture de fichiers de mesures, régulation, et dialogue série avec l'Arduino.
- Tkinter : bibliothèque standard d'IHM (fenêtres, boutons, curseurs).
- Exemple : un curseur (
Scale) règle la consigne de vitesse d'un moteur. - Simulation RC :
u = E * (1 - np.exp(-t/tau))tracé avec NumPy et Matplotlib. - Fichier CSV :
import csvpour charger des mesures expérimentales à comparer au modèle. - Régulation : lire le capteur, comparer à la consigne, calculer la commande (proportionnelle P).
- pyserial (
import serial) : communiquer avec l'Arduino (lire capteurs, envoyer commandes).
Exemple
Correcteur proportionnel :
erreur = consigne - mesure puis commande = Kp * erreur. Si consigne $= 100$, mesure $= 80$ et $K_p = 2$ : commande $= 2 \times (100 - 80) = 40$.Piège à éviter
En régulation proportionnelle seule, une erreur résiduelle (erreur statique) subsiste souvent : la commande tend vers $0$ quand l'erreur tend vers $0$, ce qui peut empêcher d'atteindre exactement la consigne.
Quiz - Programmation Python en SI
10 questions
S'entraîner
Articles utiles
Questions fréquentes
Les points clés à retenir sur Programmation Python en SI, extraits du quiz de révision.
Quel est le résultat de 7 // 2 en Python ?
Réponse :
3
L'opérateur // est la division entière : 7 // 2 = 3 (partie entière du quotient). Le reste est obtenu avec 7 % 2 = 1.
Comment crée-t-on une liste de 100 valeurs de 0 à 10 avec NumPy ?
Réponse :
np.linspace(0, 10, 100)
np.linspace(0, 10, 100) crée un tableau de 100 valeurs uniformément réparties entre 0 et 10 inclus.
Quelle instruction affiche un graphique avec Matplotlib ?
Réponse :
plt.show()
plt.show() affiche la figure avec tous les tracés, labels et options définis auparavant.
Que retourne len([1, 2, 3, 4, 5]) ?
Réponse :
5
len() retourne le nombre d'éléments dans la liste. [1, 2, 3, 4, 5] contient 5 éléments.