đ Scripts et fonctions
- Script
- Débogueur
- Trace
- Fonctions
- f-strings
- Modules et bibliothĂšques
- Liste (list)
- Précision des flottants
- Activités
- *Matplotlib*
Le mode interactif (dans la console) est pratique pour tester des idées, mais :
- Tout disparaĂźt dĂšs qu'on ferme la console (ou PyCharm).
- On ne peut pas conserver notre code.
- On doit 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 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'exécute 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 notre code dans des fichiers .py permet de :
- â Conserver nos programmes.
- â Pouvoir les exĂ©cuter autant de fois qu'on veut.
- â Pouvoir les amĂ©liorer petit Ă petit.
PyCharm sauvegarde automatiquement vos fichiers Ă chaque modification.
Inutile d'appuyer sur Ctrl + S ou de chercher une option Enregistrer. Vos changements sont toujours préservés sur votre poste.
â ïž Attention toutefois : cette sauvegarde est locale. Pour envoyer vos modifications vers GitHub, un
commit-pushreste nécessaire.
Les boutons d'exĂ©cution lancent le fichier indiquĂ© Ă leur gauche, et non nĂ©cessairement celui que vous ĂȘtes en train de modifier!
Assurez-vous que ce sélecteur affiche toujours la valeur "Current File".
Parfois, PyCharm modifie cette valeur pour indiquer le nom d'un fichier script en particulier.
PyCharm exécutera alors ce fichier-là plutÎt que celui ouvert, ce qui peut mener à des résultats inattendus.
Les explications de cette section étaient-elles claires ?
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 va 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
.
Avancez une ligne Ă la fois et, lorsque vous arrivez Ă la ligne x = 6, 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.e ou à vos camarades de classe.
Vous pouvez exécuter les actions de débogage plus rapidement en utilisant des raccourcis clavier.
| Action | IcĂŽne | Windows | macOS |
|---|---|---|---|
| Step Over | F8 | F8 | |
| Resume | F9 | â„ Option + â Command + R | |
| Stop | Ctrl + F2 | â Command + F2 |
Lorsquâune erreur de syntaxe apparaĂźt en rouge dans PyCharm, Python est incapable dâexĂ©cuter votre script, que ce soit en mode normal ou en mode dĂ©bogage. Le programme ne comprend tout simplement pas ce quâil doit faire. Pour le dĂ©bogueur, il faut garder en tĂȘte que :
- Le dĂ©bogueur ne fonctionne que sur un programme valide, c'est-Ă -dire sans erreur de syntaxe, mĂȘme si le code contient des erreurs de logique.
- Une erreur de syntaxe empĂȘche le code dâĂȘtre transformĂ© en instructions comprĂ©hensibles pour l'ordinateur.
- Tant que la syntaxe nâest pas corrigĂ©e, le dĂ©bogueur reste inutilisable.
Par exemple, si vous tentez d'exécuter le programme suivant, avec ou sans le débogueur :

Vous obtiendrez un message indiquant une erreur de syntaxe Ă la ligne 4 :

Les erreurs de syntaxe Ă corriger dans cet exemple sont :
- Ligne 4 : Le symbole d'assignation
=est manquant - Ligne 5 : Il manque une parenthĂšse fermante
) - Ligne 7 : Le nom de la variable est invalide, les espaces sont interdites, utilisez plutĂŽt des underscores
_
Il faut aussi garder en tĂȘte que Python fait rĂ©ellement de son mieux pour identifier lâemplacement exact dâune erreur. Selon la nature du problĂšme, ce nâest pas toujours simple pour lui : lâerreur peut se trouver avant ou aprĂšs la ligne indiquĂ©e. Il arrive donc que le numĂ©ro de ligne signalĂ© ne corresponde pas parfaitement Ă la source du problĂšme.
Les explications de cette section étaient-elles claires ?
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).
Il faut d'abord faire la trace à la main, sans regarder le débogueur, pour que ce soit un véritable exercice de compréhension du code. C'est seulement aprÚs avoir fait votre propre trace que vous devez utiliser le débogueur pour vérifier votre travail. à l'examen, vous n'aurez pas accÚs au débogueur, donc il est important de s'entraßner à faire des traces à la main
# 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 |
Les explications de cette section étaient-elles claires ?
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 connaĂźtre 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 :
Les fonctions min() et max()â
Les fonctions min() et max() permettent de connaĂźtre le paramĂštre ayant la plus petite ou la plus grande valeur.
Ces deux fonctions doivent ĂȘtre utilisĂ©es avec des paramĂštres.
Par exemple :
# Trouver le plus petit
note1 = 85
note2 = 72
note3 = 91
plus_petite = min(note1, note2, note3)
print(f"La plus petite note est : {plus_petite}") # 72
# Trouver le plus grand
plus_grande = max(note1, note2, note3)
print(f"La plus grande note est : {plus_grande}") # 91
Ă noter : les fonctions min() et max() sont particuliĂšres en ce sens qu'elles peuvent prendre un nombre variable de paramĂštres, contrairement Ă la plupart des fonctions qui attendent un nombre fixe de paramĂštres.
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.
prenom = "Alice"
longueur_prenom = len(prenom)
print(f"La longueur du prénom {prenom} est : {longueur_prenom}") # La longueur du prénom Alice est : 5
Diverses fonctionsâ
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")
chaine_texte = str(42)
# Puissances et arrondi
valeur_puissance = pow(2, 3)
valeur_arrondie = round(3.14159, 2)
# Type dâune variable
type_variable = type(longueur_prenom)
Appels imbriquĂ©sâ
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.
print(len(str(42)))
Dans cet exemple, oĂč trois appels de fonctions sont imbriquĂ©s, l'exĂ©cution se fait de l'intĂ©rieur vers l'extĂ©rieur :
- La fonction
str(42)convertit le nombre entier42en une chaĂźne de caractĂšres"42", - puis la fonction
len(...)calcule la longueur de cette chaĂźne, qui est2, - et enfin la fonction
print(...)affiche ce résultat.
La fonction print()â
Comme on a déjà vu, la fonction print() permet d'afficher du texte ou des valeurs dans la console.
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 = 6
nombre2 = 7
# 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)
Par dĂ©faut, le contenu affichĂ© Ă la console par la fonction print() est suivi dâun saut de ligne.
print("1")
print("2")
print("3")
La console affichera :
1
2
3
Il est possible de remplacer le saut de ligne automatique en ajoutant un paramÚtre nommé end.
Par exemple :
print("1", end=" ") # Remplacer le saut de ligne par une espace " "
print("2", end=" ")
print("3", end=" ")
La console affichera :
1 2 3
Le concept de paramÚtre nommé (comme end=) sera étudié dans la prochaine rencontre.
Il est possible de créer une ligne vide en utilisant la fonction print() sans lui passer de valeur.
Par exemple :
print("Hello")
print()
print("World")
La console affichera :
Hello
World
\nIl est également possible de faire un saut de ligne à l'aide du caractÚre spécial \n (un backslash suivi de la lettre n).
Si vous exécutez ce code :
print("A\nB\nC")
La console affichera :
A
B
C
" à l'aide du caractÚre \Comme une chaßne de caractÚres est délimitée par des guillemets ("), écrire un guillemet à l'intérieur de cette chaßne poserait problÚme : Python croirait que la chaßne se termine là .
Pour insérer un guillemet dans la chaßne, on le fait précéder d'un backslash \. On dit qu'on échappe le caractÚre.
print("Elle a dit : \"Bonjour!\"")
La console affichera :
Elle a dit : "Bonjour!"
Le backslash \ permet d'Ă©chapper d'autres caractĂšres spĂ©ciaux de la mĂȘme façon :
\'pour afficher une apostrophe dans une chaßne délimitée par des apostrophes\\pour afficher un backslash
đĄ Une autre astuce consiste Ă dĂ©limiter la chaĂźne avec des apostrophes (') si elle contient des guillemets (ou l'inverse) :
print('Elle a dit : "Bonjour!"')
Les explications de cette section étaient-elles claires ?
Une f-string (ou formatted string), c'est similaire Ă une phrase Ă trous : on Ă©crit le texte normalement, et partout oĂč on veut insĂ©rer une valeur, on laisse un trou avec des accolades {}. Python remplit ensuite chaque trou avec la valeur correspondante.
Pour créer une f-string, on place un f juste avant les guillemets. Par exemple, dans f"Le résultat de {nombre1} x {nombre2} est : {nombre1 * nombre2}", les trois trous {nombre1}, {nombre2} et {nombre1 * nombre2} sont remplis par leurs valeurs.
nombre1 = 3.14159265
nombre2 = 2
print(f"Le résultat de {nombre1} x {nombre2} est : {nombre1 * nombre2}.")
Cet exemple affiche le résultat :
Le résultat de 3.14159265 x 2 est : 6.2831853.
On pourrait obtenir un résultat semblable avec la concaténation (+) ou en séparant les éléments par des virgules dans print().
Mais la f-string est souvent plus lisible et Ă©vite d'avoir Ă convertir les nombres en str soi-mĂȘme : on insĂšre directement les variables et les expressions entre accolades, et Python s'occupe du reste.
Les f-strings permettent un contrÎle trÚs précis de la présentation des nombres entiers et flottants.
Il suffit dâajouter, Ă lâintĂ©rieur des accolades {}, aprĂšs lâexpression, un : suivi dâoptions pour contrĂŽler le format.
Voici différentes options permettant de contrÎler le format :
| Syntaxe | Effet | Exemple |
|---|---|---|
| :.2f | Arrondi Ă 2 dĂ©cimales, complĂ©tĂ© par des 0 | 3.14159265 â 3.14 / 3.5 â 3.50 |
| :.0f | Arrondi sans dĂ©cimale | 3.99 â 4 |
| :, | SpĂ©cifier le sĂ©parateur de milliers | 1000000 â 1,000,000 |
| :05d | Entier sur 5 chiffres, complĂ©tĂ© par des 0 | 42 â 00042 |
| :+.2f | Affiche le signe + ou - et conserve 2 dĂ©cimales | 3.5 â +3.50 / -2 â -2.00 |
Par exemple, le code ci-dessous :
# le résultat est arrondi à 2 décimales :
nombre1 = 3.14159265
nombre2 = 2
print(f"Le résultat de {nombre1} x {nombre2} est : {nombre1 * nombre2:.2f}.")
affiche le résultat de la multiplication arrondi à deux décimales :
Le résultat de 3.14159265 x 2 est : 6.28.
Ces options modifient seulement la façon dont le nombre est affiché.
La variable, elle, garde sa valeur et son type d'origine (un float reste un float).
Il est possible de forcer une chaĂźne de caractĂšres Ă occuper un certain nombre de positions et de contrĂŽler son alignement. Ceci est particuliĂšrement utile lorsque lâalignement vertical entre plusieurs lignes affichĂ©es dans la console doit ĂȘtre respectĂ© (par exemple, lors de lâaffichage dâun tableau en console).
Voici différentes options permettant de contrÎler l'alignement :
| Syntaxe | Effet | Exemple |
|---|---|---|
| :<10 | AlignĂ© Ă gauche sur 10 caractĂšres | Mots â Mots      |
| :>10 | AlignĂ© Ă droite sur 10 caractĂšres | Mots â       Mots |
| :^10 | CentrĂ© sur 10 caractĂšres | Mots â    Mots   |
Par exemple, le code ci-dessous :
prenom1 = "John"
prenom2 = "Dessendre"
nom1 = "Doe"
nom2 = "Renoir"
print(f"{'Nom':<10} {'Prénom':<10}") # Affiche la str "Nom" et "Prénom" sur 10 caractÚres chacun
print(f"{nom1:<10} {prenom1:<10}") # Affiche le contenu des variables nom1 et prenom1 sur 10 caractĂšres chacun
print(f"{nom2:<10} {prenom2:<10}") # Affiche le contenu des variables nom2 et prenom2 sur 10 caractĂšres chacun
affiche les noms et les prénoms sur 10 caractÚres chacun, alignés à gauche, séparés d'une espace :
Nom Prénom
Doe John
Renoir Dessendre
đ C'est cette technique d'alignement qui vous permettra d'afficher des donnĂ©es bien lisibles dans la console, en alignant proprement les valeurs les unes sous les autres.
Les explications de cette section étaient-elles claires ?
Python contient de nombreuses fonctions prĂȘtes Ă lâemploi pour effectuer des calculs, manipuler des fichiers, gĂ©rer du texte, produire des nombres alĂ©atoires, etc.
Cependant, elles ne sont pas toutes chargées automatiquement au démarrage.
Pourquoi? Pour garder Python plus lĂ©ger et Ă©viter de charger inutilement des outils dont on nâa pas besoin.
đ Ces fonctions sont regroupĂ©es dans des fichiers Python (.py) appelĂ©s modules.
đ Un module, câest donc un fichier qui contient des fonctions organisĂ©es autour dâun thĂšme.
Pour utiliser les fonctions dâun module, il existe deux approches principales :
Importer le module complet
# Importer le module "math"
import math
print(math.sqrt(16)) # Résultat : 4.0
print(math.cos(5)) # Résultat : 0.28366218546322625
Câest la mĂ©thode la plus courante.
On accĂšde aux fonctions du module avec la syntaxe :
nom_du_module.nom_de_la_fonction()
Par exemple :
math.sqrt(16)
Importer une fonction spécifique
# Importer juste les fonctions "sqrt" et "cos"
from math import sqrt, cos
print(sqrt(16)) # Résultat : 4.0
print(cos(5)) # Résultat : 0.28366218546322625
Cette mĂ©thode est utile lorsquâon utilise seulement quelques fonctions prĂ©cises dâun module.
Lâavantage est quâon nâa pas besoin de rĂ©pĂ©ter le nom du module devant chaque fonction.
đ En gĂ©nĂ©ral, on Ă©crit les import et les from au dĂ©but du fichier Python.
Pourquoi? Quand quelquâun ouvre le fichier, il peut voir immĂ©diatement quels modules le programme utilise.
On peut donner un surnom à un module ou à une fonction avec le mot-clé as.
Câest trĂšs courant en Python, surtout pour les modules dont le nom est long.
# Donner un alias Ă un module
import random as rd
print(rd.randint(1, 10))
# Donner un alias à une fonction spécifique
from time import sleep as pause
pause(2) # Le programme s'arrĂȘte pendant 2 secondes
Vous trouverez la documentation officielle des modules de base sur le site officiel de Python.
Il n'est pas nĂ©cessaire de la consulter pour l'instant : elle est trĂšs technique et peut ĂȘtre difficile Ă apprivoiser lorsqu'on dĂ©bute la programmation.
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)