đ Scripts et fonctions
- Script
- Débogueur
- Trace
- Fonctions
- Modules
- BibliothĂšques
- Matplotlib
- Exercices
Le mode interactif est pratique pour tester des idées, mais :
- Tout disparaĂźt dĂšs que vous fermez la console (ou PyCharm).
- Vous ne pouvez pas conserver votre code.
- Vous devez tout retaper Ă chaque fois.
C'est pourquoi, à partir de maintenant, nous allons créer des scripts Python, c'est-à -dire des fichiers .py
dans lesquels nous allons écrire et conserver tout notre code.
On va vite vouloir donner plein d'ordres Ă l'ordinateur en lui parlant en Python.
Ăa devient pĂ©nible de les Ă©crire les uns aprĂšs les autres en mode interactif.
Alors, on va écrire les ordres les uns aprÚs les autres dans un fichier.
On va appeler ça un script Python.
ConcrĂštement, c'est juste un fichier texte avec des instructions en Python.
On va faire terminer son nom par .py
pour éviter de le mélanger avec les fichiers .pdf
, .jpg
, etc.
On va taper dans la zone du fichier les instructions, une par ligne.
Par exemple :
# ceci est un commentaire, cette ligne est pour les humains
# l'ordinateur va l'ignorer car elle commence par un "#"
print("bonjour bonjour cher maitre humain")
6 / 2 * (1 + 2)
print("Ca va aujourd' hui?")
print( 4 / 5 * (9 + 6) )
x = 6
y = 7
resultat = x * y
x = 0
y = resultat
On va ensuite exécuter notre script (il ne s'agit pas de le tuer).
On demande à python de suivre nos ordres, d'exécuter nos instructions, une par une.
En suivant cette recette, créez, dans un projet PyCharm, un script Python, copiez-y le code ci-haut, et exécutez-le.
Que voyez-vous?
- L'interpréteur a affiché trois lignes. Pourquoi?
- Il a exécuté les instructions ligne par ligne, de haut en bas.
- Il n'affiche rien pour les 2 premiĂšres lignes, car elles sont des commentaires.
- Il a exécuté la ligne 3, qui est une instruction
print
, et il a affiché le texte entre guillemets. - Il a ensuite exécuté la ligne 4, qui est un calcul, mais comme on ne lui a pas demandé d'afficher le résultat, il ne l'affiche pas.
- Il a ensuite exécuté la ligne 5, qui est encore une instruction
print
, et il a affiché le texte entre guillemets. - Il a ensuite exécuté la ligne 6, qui est encore une instruction
print
, et il a affiché le résultat du calcul entre parenthÚses. - Il a ensuite exécuté les lignes 7 à 11, qui sont des affectations de variables. Comme on ne lui a pas demandé d'afficher quoi que ce soit, il n'affiche rien.
Ăcrire son code dans des fichiers .py
permet :
- â De conserver vos programmes.
- â De pouvoir les exĂ©cuter autant de fois que vous voulez.
- â De pouvoir les amĂ©liorer petit Ă petit.
Le dĂ©bogueur est un outil puissant qui permet de suivre l'exĂ©cution de votre code pas Ă pas. Il vous permet de voir la valeur des variables, d'arrĂȘter l'exĂ©cution Ă des points spĂ©cifiques (points d'arrĂȘt), et de comprendre comment votre programme fonctionne en dĂ©tail.
Utiliser le débogueur est essentiel pour :
- Comprendre le flux d'exécution de votre programme.
- Analyser le comportement de votre code dans des situations spécifiques.
- Identifier et corriger les erreurs dans votre code.
On va ĂȘtre honnĂȘte, vos scripts ne vont pas souvent faire ce que vous voulez. Par contre, ils vont faire exactement ce que vous avez Ă©crit. On va donc avoir besoin d'une mĂ©thode efficace pour comprendre ce qui se passe dans notre code.
Dans un environnement de développement (ou IDE, Integrated Developpement Environment) comme PyCharm, on pouvoir :
- arrĂȘter le temps!
- et voir à l'intérieur de l'ordinateur!
Lisez la section Déboguer pour apprendre à utiliser le débogueur dans PyCharm.
Ensuite, mettez un point d'arrĂȘt Ă la ligne de la premiĂšre instruction (les commentaires ne sont pas des instructions) dans le script Python créé Ă la section Script, donc Ă la ligne print("bonjour...
:
# ceci est un commentaire, cette ligne est pour les humains
# l'ordinateur va l'ignorer car elle commence par un "#"
print("bonjour bonjour cher maitre humain")
6 / 2 * (1 + 2)
print("Ca va aujourd' hui?")
print( 4 / 5 * (9 + 6) )
x = 6
y = 7
resultat = x * y
x = 0
y = resultat
Roulez votre script, mais cette fois, en mode dĂ©bogage (en cliquant sur l'icĂŽne du bug đȘČ).
- L'exĂ©cution va s'arrĂȘter sur le point d'arrĂȘt.
- La ligne de code oĂč se trouve le point d'arrĂȘt sera mise en surbrillance et n'aura pas encore Ă©tĂ© exĂ©cutĂ©e.
- Si vous cliquez sur le bouton Step Over
, l'instruction sera exécutée et vous pourrez voir le résultat dans la console.
- Si vous continuer Ă cliquer sur
, vous pourrez exécuter le script ligne par ligne et observer son comportement.
- Si vous avez plus d'un point d'arrĂȘt, vous pouvez cliquer sur le bouton Resume
qui permet de continuer l'exĂ©cution jusqu'au prochain point d'arrĂȘt.
- Vous pouvez Ă©galement arrĂȘter l'exĂ©cution Ă tout moment en cliquant sur le bouton Stop
.
Lorsque vous arrivez Ă la ligne x = 6
, avancez une ligne Ă la fois et observez les variables qui sont créées et affichĂ©es dans la fenĂȘtre de dĂ©bogage, ainsi que leurs modification. En particulier, notez le changement du contenu des variables x
et y
lorsqu'elles sont modifiées.
Si vous avez des difficultés à utiliser le débogueur, n'hésitez pas à demander de l'aide à votre enseignant ou à vos camarades de classe.
La trace est un outil qui permet de suivre l'exécution d'un programme en affichant les valeurs des variables et les instructions exécutées à chaque étape. C'est un excellent moyen de comprendre comment votre code fonctionne et de détecter les erreurs.
Lisez la section Trace d'exécution pour apprendre à rédiger une trace.
Ensuite, avec un crayon et du papier, générez la trace (en tableau) pour le script Python créé à la section Script, montré ci-bas.
Une fois votre trace faite, vous allez exécuter le code pour valider qu'elle est correcte, en suivant ces étapes :
- Placez un point d'arrĂȘt sur la premiĂšre ligne qui s'exĂ©cute.
- Lancez l'exécution en mode débogage.
- Sautez de ligne en ligne pour voir si la trace est correcte (valeurs des variables, instructions exécutées).
# ceci est un commentaire, cette ligne est pour les humains
# l'ordinateur va l'ignorer car elle commence par un "#"
print("bonjour bonjour cher maitre humain")
6 / 2 * (1 + 2)
print("Ca va aujourd' hui?")
print( 4 / 5 * (9 + 6) )
x = 6
y = 7
resultat = x * y
x = 0
y = resultat
Vous devriez normalement obtenir cette trace :
# ligne | x | y | resultat | affichage |
---|---|---|---|---|
3 | bonjour bonjour cher maitre humain | |||
4 | ||||
5 | Ca va aujourd' hui? | |||
6 | 12 | |||
7 | 6 | |||
8 | 6 | 7 | ||
9 | 6 | 7 | 42 | |
10 | 0 | 7 | 42 | |
11 | 0 | 42 | 42 |
Une fonction est un ensemble dâinstructions rĂ©utilisables regroupĂ©es sous un nom.
đ Le nom doit ĂȘtre significatif : par exemple, on devine que print()
sert Ă afficher quelque chose.
⥠Comprendre une fonctionâ
Quand on utilise une fonction, il nâest pas nĂ©cessaire de savoir tout son code interne.
Il faut surtout comprendre :
- Quels paramĂštres attend-elle ? (les infos entre
()
) - Est-ce quâelle retourne une valeur quâon peut stocker ?
- Y a-t-il des cas limites ou erreurs possibles (exceptions) ?
đŻ Les paramĂštresâ
Pour appeler une fonction :
nom_de_fonction(param1, param2, ...)
âĄïž Le nombre et lâordre des paramĂštres sont importants.
đŸ Conserver une valeur de retourâ
On peut stocker le rĂ©sultat dâune fonction dans une variable, par exemple :
mon_age_arrondi = round(17.8)
Vous trouverez dans la section Fonctions utiles de l'aide-mémoire une liste non-exhaustive de fonctions utiles.
Découvrons-en quelques-unes :
La fonction input()
â
La fonction input()
permet de demander à l'utilisateur de saisir une entrée.
Elle peut ĂȘtre utilisĂ©e avec ou sans paramĂštre.
- Sans paramĂštre, elle attend une saisie de l'utilisateur.
- Avec un paramĂštre, elle affiche un message pour guider l'utilisateur.
Par exemple (essayez ce code dans un script Python) :
# Exemple : input() sans paramĂštre
saisie_utilisateur = input() # attend une saisie de lâutilisateur
print(saisie_utilisateur)
# Exemple : input() avec un paramĂštre
saisie_utilisateur = input("Veuillez saisir votre prénom : ")
print(saisie_utilisateur)
# Longueur d'une chaĂźne de caractĂšres
longueur = len(saisie_utilisateur)
La fonction len()
â
La fonction len() permet de calculer la longueur d'une chaĂźne de caractĂšres (le nombre de caractĂšres qu'elle contient).
Elle prend une chaßne de caractÚres en paramÚtre et retourne un entier représentant le nombre de caractÚres.
Voici quelques exemples de fonctions utiles en Python, qui prennent différents nombres de paramÚtres :
# Conversion de types
valeur_entier = int("3")
valeur_flottant = float("3.41")
# Puissances et arrondi
valeur_puissance = pow(2, 3)
valeur_arrondie = round(3.14159, 2)
# Type dâune variable
type_variable = type(longueur)
On peut imbriquer les appels de fonctions pour combiner plusieurs opérations en une seule ligne.
Ainsi, la valeur retournĂ©e par une fonction peut ĂȘtre utilisĂ©e directement comme paramĂštre d'une autre fonction.
Par exemple, pour obtenir des entrées numériques en une seule ligne :
# Exemple dâentrĂ©es numĂ©riques
nombre1 = int(input("Entrez un premier nombre : "))
nombre2 = int(input("Entrez un second nombre : "))
est beaucoup compacte que :
nombre1_en_str = input("Entrez un nombre : ")
nombre1 = int(nombre1_en_str)
nombre2_en_str = input("Entrez un second nombre : ")
nombre2 = int(nombre2_en_str)
La fonction print()
â
Comme on a déjà vu, la fonction print()
permet d'afficher du texte ou des valeurs dans le terminal.
Elle peut prendre un nombre variable de paramÚtres, séparés par des virgules, qu'elle concaténera avec des espaces par défaut.
Par exemple, roulez ce code dans un script Python pour voir comment elle fonctionne :
# Exemple dâentrĂ©es numĂ©riques
nombre1 = int(input("Entrez un premier nombre : "))
nombre2 = int(input("Entrez un second nombre : "))
# Fonction avec paramĂštres multiples
print("Le résultat de", nombre1, "x", nombre2, "est :", nombre1 * nombre2)
# Variante moderne : f-string
message = f"Le résultat de {nombre1} x {nombre2} est : {nombre1 * nombre2}"
print(message)
Les f-stringsâ
Les f-strings (ou formatted strings) permettent de créer des chaßnes de caractÚres formatées en insérant des variables directement dans la chaßne.
Elles commencent par f
avant les guillemets et utilisent des accolades {}
pour insérer des variables.
Par exemple, dans le code ci-dessus, f"Le résultat de {nombre1} x {nombre2} est : {nombre1 * nombre2}"
crée une chaßne avec les valeurs des variables nombre1
et nombre2
directement intégrées.
Certaines fonctions ne sont pas disponibles par défaut.
Pour les utiliser, il faut dâabord importer un module (un fichier qui contient des fonctions prĂȘtes Ă
lâemploi).
đ En gĂ©nĂ©ral, on Ă©crit les import
au début du fichier Python.
đĄ Remarque : pour appeler une fonction dâun module, on utilise nom_du_module.fonction()
.
Exemple simple avec le module math
:
import math # Importer le module "math"
print(math.sqrt(16)) # Résultat : 4.0
đ Modules utiles en Pythonâ
math
â fonctions mathĂ©matiques avancĂ©es (racines, logarithmes, trigonomĂ©trie, etc.) - (documentation officielle)random
â gĂ©nĂ©ration de nombres alĂ©atoires, choix au hasard, tirages probabilistes - (doc)os
â interaction avec le systĂšme dâexploitation (fichiers, dossiers, etc.) - (doc)sys
â informations sur lâenvironnement du programme, gestion des entrĂ©es/sorties - (doc)time
â manipulation du temps et des dates (mesurer le temps Ă©coulĂ©, conversions de format) - (doc)csv
â lecture/Ă©criture de fichiers CSV (format courant pour stocker des donnĂ©es tabulaires) - (doc)
đ€ Vulgariser des modules et des fonctions avec lâIAâ
Si bien utilisĂ©s, des outils dâintelligence artificielle comme Copilot (basĂ© sur la technologie de ChatGPT et accessible gratuitement en ligne) peuvent vous aider Ă mieux comprendre le fonctionnement de modules et de fonctions Python.
Cela peut ĂȘtre particuliĂšrement utile lorsque la documentation officielle vous semble complexe ou si vous avez des doutes sur lâutilisation dâune fonction.
AccĂ©dez Ă Copilot đ§ Ă lâaide de ce lien et essayez le prompt suivant :
Peux-tu me donner une liste des principales fonctions du module Python math ?
Jâaimerais avoir pour chacune une brĂšve description et un exemple de code pour les utiliser.
RĂ©pĂ©tez ce prompt pour explorer dâautres modules comme random
et time
.
Parfois plusieurs modules sont regroupés ensemble pour former un tout réutilisable et
partageable facilement.
Nous appelons ce regroupement une bibliothĂšque.
⥠Points clés :
- Chaque module dâune bibliothĂšque peut contenir des fonctions, classes ou constantes spĂ©cifiques.
- Pour utiliser une bibliothĂšque externe, il faut d'abord l'installer avec
pip install nom_de_la_bibliothĂšque
. - Une fois installée, on peut importer ses modules comme pour un module Python classique :
import numpy # Importer la bibliothĂšque "numpy"
print(numpy.array([1, 2, 3]))
Voici quelques bibliothĂšques populaires en Python :
numpy
â calculs numĂ©riques avancĂ©s, manipulation de tableaux multidimensionnels - (documentation officielle)pandas
â manipulation et analyse de donnĂ©es tabulaires (DataFrames) - (doc)matplotlib
â crĂ©ation de graphiques et visualisation de donnĂ©es - (doc)scikit-learn
â apprentissage automatique (machine learning), modĂšles prĂ©dictifs - (doc)keras
â crĂ©ation et entraĂźnement de rĂ©seaux de neurones pour l'apprentissage profond (deep learning) - (doc)
On peut donner un alias Ă une bibliothĂšque lors de son importation pour simplifier son utilisation.
Par exemple, on peut importer la bibliothĂšque numpy
avec l'alias np
pour faciliter son utilisation dans le code.
Il suffit d'utiliser le mot-clé as
lors de l'importation :
import numpy as np # Importer la bibliothĂšque "numpy" avec l'alias "np"
print(np.array([1, 2, 3])) # Utiliser l'alias "np" pour accéder à la fonction "array"
Nous allons utiliser Matplotlib, une bibliothÚque Python trÚs flexible pour la visualisation de données.
Elle permet de créer des graphiques simples ou complexes et de personnaliser pratiquement tous les éléments :
- Graphiques Ă lignes, Ă barres, histogrammes, nuages de points
- Superposition de plusieurs graphiques sur une seule figure
- Compatibilité avec d'autres bibliothÚques scientifiques comme NumPy, Pandas ou SciPy
Il existe aussi d'autres excellentes bibliothĂšques de visualisation graphique, comme Seaborn ou ggplot2.
Voici un exemple simple, testez-le dans un script Python!
Ne vous inquiétez pas si vous ne comprenez le code pour l'instant, on verra plus en détail comment faire des graphiques dans un prochain cours.
import matplotlib.pyplot as plt
# Ăge en annĂ©es
age = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# Taille correspondante en cm (exemple fictif)
taille = [50, 75, 85, 95, 105, 112, 118, 124, 130, 135, 140]
# Création du graphique
plt.plot(age, taille, marker='o', linestyle='-', color='g', label="Taille en fonction de l'Ăąge")
# Ajout de titres et labels
plt.xlabel("Ăge (annĂ©es)")
plt.ylabel("Taille (cm)")
plt.title("Courbe de croissance de l'enfant")
plt.legend()
# Affichage du graphique
plt.show()
âïž Exercices de comprĂ©hensionâ
Pour les exercices de cette section, vous pouvez écrire vos réponses sur papier (comme ce sera le cas en examen)
ou vous pouvez créer un fichier markdown dans votre projet PyCharm créé plus haut.
Vous allez exécuter un script auquel on ne comprend rien pour l'instant.
Le but est de se familiariser avec le débogueur.
Tout d'abord, créez un nouveau fichier points_arrets.py et copiez-y le code suivant :
# ceci est une fonction, nous verrons au prochain cours comment les écrire
# l'indentation de la 2e ligne est importante (les espaces au début de la ligne)
def calcul_complexe(a, b, c):
return a ** b + c * (b - a)
print("ArrĂȘter le temps, c'est impossible Marty.")
a = calcul_complexe(3, 5, 7)
b = calcul_complexe(a, 6, 9)
c = calcul_complexe(b, a, b)
a = calcul_complexe(a, a, a)
print("Le resultat est ", calcul_complexe(a, b, c))
On veut savoir quelles sont les valeurs de a
au fil de l'exécution du script.
- Faites d'abord une trace de ce script, en essayant de deviner les valeurs de
a
Ă chaque Ă©tape. - Ensuite, placez un point d'arrĂȘt sur la ligne
a = calcul_complexe(3, 5, 7)
et exécutez le script en mode débogage. - Avancez ligne par ligne et observez les valeurs de
a
,b
etc
dans la fenĂȘtre de dĂ©bogage. - Notez les valeurs de
a
à chaque étape et comparez-les avec votre trace. - Si vous avez des différences, essayez de comprendre pourquoi.
- N'hésitez pas à demander de l'aide si vous avez des difficultés.
đš Exercices de crĂ©ationâ
Pour les exercices de cette section, vous devez créer des fichiers .py
dans un nouveau projet PyCharm.
Dans un fichier la_sequence.py, écrivez une dizaine de lignes de commandes Python.
Vous pouvez inclure :
- des déclarations de variables
- des calculs avec affectation des résultats dans des variables
- des affichages avec
print
Exécutez votre code en mode débogage pour vous familiariser avec le débogueur.
đ Ce sera l'outil le plus utile de votre vie pour programmer!
La gravité sur Mars est environ 3,71 fois plus faible que sur la Terre.
Ăcrivez un programme qui demande Ă lâutilisateur de saisir une masse en kilos sur Terre.
Le programme doit ensuite calculer et afficher le poids correspondant sur Mars.
â Exemple de sortie attendue
Masse sur Terre (kg) : 50
50 kg sur Terre correspondent Ă 18.55 kg sur Mars.
Ăcrire un programme pour convertir des degrĂ©s Celsius en Fahrenheit.
- Le programme doit demander à l'utilisateur une température en degrés Celsius.
- Le programme doit afficher la valeur initiale en Celsius (°C) ainsi que la valeur en Fahrenheit (°F).
- La formule pour convertir est la suivante :
Ăcrivez un programme Python qui demande Ă l'utilisateur la longueur et la largeur de son rectangle et affiche ensuite son pĂ©rimĂštre.
Ăcrivez un programme qui demande Ă lâutilisateur deux informations :
- un chiffre (entre 1 et 9),
- une position décimale (un entier positif).
Le programme doit ensuite construire et afficher le nombre dĂ©cimal correspondant, câest-Ă -dire un nombre dont le seul chiffre non nul est placĂ© Ă la position dĂ©cimale donnĂ©e.
Par exemple :
- Si le chiffre est 5 et la position dĂ©cimale est 3, le rĂ©sultat doit ĂȘtre
0.005
. - Si le chiffre est 2 et la position dĂ©cimale est 1, le rĂ©sultat doit ĂȘtre
0.2
.
Indice : les puissances de 10 peuvent vous aider.
Lâutilisateur doit saisir 2 nombres entiers Ă lâaide de la console :
- un nombre minimal
- un nombre maximal
Vous devez ensuite générer un nombre entier aléatoire compris entre ces 2 nombres inclusivement.
Le module random
sera nécessaire :
- Vous pouvez lire la (documentation) du module pour trouver la fonction et des exemples.
- Vous pouvez aussi demander à ChatGPT ou un autre outil d'IA quelle fonction utiliser pour générer un nombre compris entre deux bornes inclusives, et de vous expliquer son fonctionnement.
đ§ Exemple de prompt :
Quelle est la fonction du module random en Python qui permet de générer
un nombre entier aléatoire compris entre deux valeurs données (inclusivement) ?
Peux-tu mâexpliquer comment elle fonctionne et me donner un exemple dâutilisation ?
â Exemple de sortie attendue
Nombre le plus bas : 50
Nombre le plus haut : 100
Nombre aléatoire généré : 56
CrĂ©ez un programme qui calcule la moyenne de la pression systolique dâun patient pour une journĂ©e.
đ ïžINSTRUCTIONSâ
- Déclarez trois variables pour stocker les mesures de pression systolique :
- Une pour le matin
- Une pour le midi
- Une pour le soir
- Calculez la moyenne des trois mesures
- Affichez le résultat de façon claire et lisible.
â EXEMPLE DE SORTIE ATTENDUEâ
Pression systolique
Mesure du matin : 125
Mesure du midi : 130
Mesure du Soir : 180
Moyenne de la pression systolique : 145.0 mmHg
Créez un programme qui demande les coordonnées de 2 points, puis calcule et affiche la distance entre les 2 points arrondie à 2 décimales.
La formule de la distance entre 2 points et est :
Pour réaliser la racine carrée de la formule, vous aurez besoin d'une fonction du module math
.
â Exemple de sortie attendueâ
Point A - X1 : 50
Point A - Y1 : 70
Point B - X2 : 80
Point B - Y2 : 60
Distance : 31.62
Créez un programme qui calcule la note finale obtenue par un étudiant dans ce cours.
La rĂšgle de la double sanction nâest pas Ă appliquer dans cet exercice, car les notions nĂ©cessaires nâont pas encore Ă©tĂ© vues.
đ ïžINSTRUCTIONSâ
- Créez une variable pour chaque évaluation du cours :
- nom_etudiant : le nom de lâĂ©tudiant (chaĂźne de caractĂšres)
- note_tp1 : note du TP1 (sur 10)
- note_tp2 : note du TP2 (sur 10)
- examen_1 : note de lâexamen 1 (sur 100)
- examen_2 : note de lâexamen 2 (sur 100)
- Appliquez les pondérations suivantes pour calculer la note finale :
- TP1 : 20%
- TP2 : 20%
- Examen 1 : 30%
- Examen 2 : 30%
- Affichez un résumé clair des notes des évaluations et de la note finale.
â EXEMPLE DE SORTIE ATTENDUEâ
Ătudiant : Nicola Tesla
Note TP1 (20%) : 8/10
Note TP2 (20%) : 9/10
Note examen #1 (30%) : 90/100
Note examen #2 (30%) : 95/100
Note obtenue pour ce cours : 89.5/100
Attention, l'application de la double sanction n'a pas été réalisée!
Ăcrire un programme permettant de dĂ©composer un montant en billets de 100, 50, 20, 10 et 5$.
Le programme doit privilégier les billets de plus grandes valeurs.
Voici un exemple d'exécution :
Saisir un montant : 376.54
Billets :
3 x 100$
1 x 50$
1 x 20$
0 x 10$
1 x 5$
Reste 1.54$
Indices :
- Commencer une étape à la fois, d'abord par les billets de 100$, seulement ensuite ceux de 50$, etc.
- Créer autant de variables que vous le croyez nécessaire (ex : montant_initial, montant_restant, nb_billets100, etc.)
- Vous aurez besoin de l'opérateur pour la division entiÚre (
//
), par exemple :376 // 100 == 3
95 // 100 == 0
Pour vous aider à débuter :
# Demander Ă l'utilisateur de saisir un montant
montant_initial = float(input("Saisir un montant : "))
montant_restant = montant_initial