đ 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 votre 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, 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'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 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.
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}.")
Cette 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é d'un 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)
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 :
Agis comme un formateur expert en Python.
Je suis étudiant en science de la nature débutant l'apprentissage de la programmation.
Peux-tu me donner une liste des principales fonctions du module Python math ?
Pour chaque fonction, je souhaite :
- Une explication simple (vulgarisée).
- Un exemple de code court et commenté.
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 la ligne de commande
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 et éviter d'écrire numpy au long.
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" (au lieu d'écrire numpy) pour accéder à la fonction "array()"
Les explications de cette section étaient-elles claires ?
Jusqu'ici nous avons vu les 4 types de données de base en Python :
- les entiers (
int) : 5, -3, 42, 0, ... - les nombres Ă virgule (
float) : 3.14, -0.001, 2.0, ... - les chaĂźnes de caractĂšres (
str) : "Bonjour", 'a', "123", ... - les booléens (
bool) : True, False
Python propose aussi des types de données plus complexes, comme les listes. Une liste permet de stocker plusieurs valeurs dans une seule variable, dans un ordre précis.
Les listes sont définies par des crochets [], avec les éléments séparés par des virgules :
heros = ["Mario", "Link", "Kirby", "Sonic"]
annees_creation = [1981, 1986, 1992, 1991]
Les Ă©lĂ©ments d'une liste peuvent ĂȘtre de n'importe quel type (str, int, float, bool).
Une liste peut mĂȘme contenir des Ă©lĂ©ments de types diffĂ©rents :
melange = ["Alice", 42, 3.14, True]
Chaque élément d'une liste est associé à un index (sa position), qui commence à 0.
heros â ["Mario", "Link", "Kirby", "Sonic"]
index â 0 1 2 3
On accÚde à un élément en écrivant le nom de la liste suivi de l'index entre crochets :
print(heros[0]) # Affiche "Mario"
print(heros[2]) # Affiche "Kirby"
Les index négatifs permettent de compter à partir de la fin :
heros â ["Mario", "Link", "Kirby", "Sonic"]
index â 0 1 2 3
index nĂ©gatif â -4 -3 -2 -1
print(heros[-1]) # Affiche "Sonic" (dernier élément)
print(heros[-2]) # Affiche "Kirby" (avant-dernier)
La notation de tranche (slicing) permet d'extraire une sous-liste.
On indique l'index de départ (inclus) et l'index de fin (exclus). Le dernier élément retourné est donc celui juste avant cet index :
print(heros[1:3]) # Affiche ["Link", "Kirby"] (index 1 et 2, pas 3)
print(heros[:2]) # Affiche ["Mario", "Link"] (depuis le début)
print(heros[2:]) # Affiche ["Kirby", "Sonic"] (jusqu'Ă la fin)
Si on essaie d'accéder à un index qui n'existe pas, Python génÚre une erreur IndexError :
heros = ["Mario", "Link", "Kirby", "Sonic"]
print(heros[4]) # IndexError: list index out of range
La liste heros contient 4 éléments, donc les index valides sont 0, 1, 2 et 3 (ou -4, -3, -2, -1).
Pour éviter cette erreur, on peut vérifier la longueur avec len() avant d'accéder à un index.
On peut modifier un élément en utilisant son index :
annees_creation[2] = 1992
print(annees_creation) # Affiche [1981, 1986, 1992, 1991]
La méthode append() ajoute un élément à la fin de la liste :
heros.append("Pikachu")
print(heros) # Affiche ["Mario", "Link", "Kirby", "Sonic", "Pikachu"]
append() est particuliĂšrement utile pour construire une liste progressivement Ă partir d'une liste vide :
ma_liste = []
ma_liste.append("Mario")
ma_liste.append("Link")
ma_liste.append("Kirby")
print(ma_liste) # Affiche ["Mario", "Link", "Kirby"]
Plusieurs opérations sur les listes utilisent des méthodes. Une méthode est une fonction rattachée à un type de données en particulier. On l'appelle en faisant suivre le nom de la variable d'un point et du nom de la méthode :
maVariable.maMethode()
maVariable.maMethode(parametre1)
Les méthodes disponibles varient selon le type de la variable. Par exemple, voici des méthodes propres aux chaßnes de caractÚres :
texte = "python est génial "
print(texte.upper()) # "PYTHON EST GĂNIAL " â MAJUSCULES
print(texte.capitalize()) # "Python est gĂ©nial " â PremiĂšre lettre en majuscule
print(texte.strip()) # "python est gĂ©nial" â Supprime les espaces au dĂ©but et Ă la fin
print(texte.strip().upper()) # "PYTHON EST GĂNIAL" â On peut enchaĂźner les mĂ©thodes
print(texte.replace("gĂ©nial", "adorable")) # "python est adorable " â Remplace un mot par un autre
La méthode remove() supprime la premiÚre occurrence d'une valeur :
heros.remove("Samus")
print(heros) # Affiche ["Mario", "Link", "Kirby", "Sonic", "Pikachu"]
La méthode pop() supprime et retourne l'élément à une position donnée. Sans argument, elle supprime le dernier élément. On peut aussi lui passer un index :
heros = ["Mario", "Link", "Kirby", "Sonic", "Pikachu"]
dernier = heros.pop() # Supprime le dernier
print(dernier) # Affiche "Pikachu"
print(heros) # Affiche ["Mario", "Link", "Kirby", "Sonic"]
premier = heros.pop(0) # Supprime l'élément à l'index 0
print(premier) # Affiche "Mario"
print(heros) # Affiche ["Link", "Kirby", "Sonic"]
La fonction len() retourne le nombre d'éléments dans une liste :
heros = ["Mario", "Link", "Kirby", "Sonic"]
annees_creation = [1981, 1986, 1992, 1991]
print(len(heros)) # Affiche 4
print(len(annees_creation)) # Affiche 4
L'opérateur in permet de vérifier si une valeur est présente dans une liste. Il retourne True ou False :
mario_present = "Mario" in heros
print(mario_present) # Affiche True
La fonction sorted() retourne une nouvelle liste triée sans modifier l'originale :
annees_creation = [1981, 1986, 1992, 1991]
annees_triees = sorted(annees_creation)
print(annees_triees) # Affiche [1981, 1986, 1991, 1992]
print(annees_creation) # Affiche [1981, 1986, 1992, 1991] (originale non modifiée)
La méthode sort() trie la liste en place (modifie la liste directement) :
annees_creation.sort()
print(annees_creation) # Affiche [1981, 1986, 1991, 1992]
Pour trier en ordre décroissant, on ajoute le paramÚtre reverse=True :
heros = ["Mario", "Link", "Kirby", "Sonic"]
heros.sort(reverse=True)
print(heros) # Affiche ["Sonic", "Mario", "Link", "Kirby"]
Si les éléments de la liste sont des chaßnes de caractÚres, le tri se fait par ordre alphabétique (en respectant la casse : les majuscules sont triées avant les minuscules).
On peut combiner deux listes avec l'opérateur + :
nintendo = ["Mario", "Link"]
sega = ["Sonic", "Knuckles"]
tous = nintendo + sega
print(tous) # Affiche ["Mario", "Link", "Sonic", "Knuckles"]
Attention : assigner une liste Ă une nouvelle variable ne crĂ©e pas une copie, mais une deuxiĂšme rĂ©fĂ©rence vers la mĂȘme liste. Modifier l'une modifie l'autre :
liste_a = [1, 2, 3]
liste_b = liste_a
liste_b.append(4)
print(liste_a) # Affiche [1, 2, 3, 4] (liste_a est aussi modifiée!)
Pour faire une vraie copie indépendante, on peut utiliser la méthode copy() :
liste_a = [1, 2, 3]
liste_b = liste_a.copy()
liste_b.append(4)
print(liste_a) # Affiche [1, 2, 3]
print(liste_b) # Affiche [1, 2, 3, 4]
Python offre des fonctions intégrées pratiques pour analyser rapidement une liste de nombres :
max(liste): retourne la valeur la plus grandemin(liste): retourne la valeur la plus petitesum(liste): retourne la somme de tous les éléments
annees_creation = [1981, 1986, 1992, 1991]
print(max(annees_creation)) # Affiche 1992
print(min(annees_creation)) # Affiche 1981
print(sum(annees_creation)) # Affiche 7950
On peut aussi combiner sum() et len() pour calculer une moyenne :
moyenne = sum(annees_creation) / len(annees_creation)
print(moyenne) # Affiche 1987.5
Si la liste contient des chaĂźnes de caractĂšres ou des types mixtes, Python lĂšvera une erreur :
heros = ["Mario", "Link", "Kirby", "Sonic"]
print(sum(heros)) # TypeError: unsupported operand type(s) for +: 'int' and 'str'
L'opérateur * permet de répéter les éléments d'une liste plusieurs fois :
zeros = [0] * 5
print(zeros) # Affiche [0, 0, 0, 0, 0]
Une liste peut elle-mĂȘme contenir d'autres listes. C'est utile pour reprĂ©senter des donnĂ©es en tableau, comme un horaire ou une grille.
Par exemple, on peut représenter un tableau de héros avec une liste par entrée (nom + année de création + plateforme de premiÚre apparition) :
heros = [
["Mario", 1981, "Arcade"],
["Link", 1986, "NES"],
["Kirby", 1992, "Game Boy"],
]
Pour accéder à un élément, on utilise deux index : le premier pour choisir la ligne, le second pour choisir la colonne :
print(heros[0]) # Affiche ["Mario", 1981, "Arcade"]
print(heros[0][0]) # Affiche "Mario"
print(heros[1][1]) # Affiche 1986
print(heros[2][2]) # Affiche "Game Boy"
heros[0] â ["Mario", 1981, "Arcade"]
heros[0][0] â "Mario"
heros[0][1] â 1981
heros[0][2] â "Arcade"
Liste ordonnée et modifiable, définie avec des crochets [].
| Opération | Syntaxe | Description |
|---|---|---|
| Créer | heros = ["Mario", "Link"] | Nouvelle liste |
| AccĂ©der | element = heros[0] | ĂlĂ©ment Ă l'index 0 |
| Modifier | heros[0] = "Samus" | Remplacer un élément |
| Longueur | nb_elements = len(heros) | Nombre d'éléments |
| Présence | est_present = "Mario" in heros | Retourne True ou False |
| Ajouter (fin) | heros.append("Pikachu") | Ajoute Ă la fin |
| Insérer | heros.insert(1, "Samus") | InsÚre à l'index 1 |
| Supprimer (valeur) | heros.remove("Samus") | Supprime la 1re occurrence |
| Supprimer (dernier) | element_retire = heros.pop() | Supprime et retourne le dernier élément |
| Supprimer (index) | element_retire = heros.pop(0) | Supprime et retourne l'élément à l'index 0 |
| Trier (nouvelle liste) | liste_triee = sorted(heros) | Retourne une copie triée |
| Trier (en place) | heros.sort() | Modifie la liste directement |
| Combiner | liste_combinee = liste1 + liste2 | ConcatĂšne deux listes |
| Copier | liste_copie = heros.copy() | Copie indépendante |
| Maximum | valeur_max = max(heros) | Plus grande valeur (nombres seulement) |
| Minimum | valeur_min = min(heros) | Plus petite valeur (nombres seulement) |
| Somme | total = sum(heros) | Somme de tous les éléments (nombres seulement) |
Les explications de cette section étaient-elles claires ?
Essayez ce code dans un script Python :
resultat = 0.1 + 0.2
print(resultat)
Vous obtiendrez :
0.30000000000000004
Surprenant? Pourtant, Python n'a pas fait d'erreur.
C'est le comportement normal et attendu de tous les langages qui utilisent les nombres flottants selon la norme internationale IEEE 754.
Les ordinateurs stockent les donnĂ©es en binaire (des 0 et des 1). Or, certaines fractions dĂ©cimales simples, comme 0.1, ne peuvent pas ĂȘtre reprĂ©sentĂ©es exactement en binaire, tout comme 1/3 ne peut pas ĂȘtre Ă©crit exactement en dĂ©cimal (0.333333...).
Quand Python écrit 0.1 en mémoire, il stocke en réalité quelque chose comme :
0.1000000000000000055511151231257827021181583404541015625
C'est parce que 0.1 est une fraction dĂ©cimale qui ne peut pas ĂȘtre reprĂ©sentĂ©e exactement en binaire.
En binaire, 0.1 est une fraction périodique infinie, et l'ordinateur doit faire un compromis en stockant une approximation trÚs proche de 0.1, mais pas exactement égale :
0.1 (décimal) = 0.0001100110011001100110011001100110011001100110011001101... (binaire)
C'est infiniment proche de 0.1, mais pas exactement égal. Et quand on additionne plusieurs de ces approximations, l'erreur s'accumule et peut devenir visible.
Imaginez que vous devez mesurer 1 litre d'eau, mais votre seul outil est une cuillÚre à thé de 5 ml légÚrement imprécise (5,002 ml). Chaque mesure introduit une toute petite erreur. Au bout de 200 cuillÚres, l'erreur accumulée devient perceptible. C'est exactement ce qui se passe avec les flottants!
Ce problÚme peut causer des bugs subtils et difficiles à détecter.
Comparaison de flottants : ne jamais comparer des flottants avec == !
a = 0.1 + 0.2
b = 0.3
print(a) # Affiche 0.30000000000000004
print(b) # Affiche 0.3
print(a == b) # Affiche False â les deux valeurs semblent identiques, pourtant!
đ L'opĂ©rateur == vĂ©rifie si deux valeurs sont exactement identiques et retourne True (vrai) ou False (faux). Il sera Ă©tudiĂ© Ă la rencontre 4.
Accumulation d'erreurs dans un calcul répété :
# Additionner 0.1 dix fois devrait donner 1.0... mais :
total = 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1
print(total) # Affiche 0.9999999999999999 au lieu de 1.0
print(total == 1.0) # Affiche False
Résultats inattendus dans des conditions financiÚres ou scientifiques :
prix = 1.15
taxe = 0.05
total = prix + taxe
print(total) # Affiche 1.1999999999999998 au lieu de 1.2
Il existe plusieurs stratégies selon le contexte.
â StratĂ©gie 1 : Arrondir l'affichage avec les f-stringsâ
Si le problÚme est uniquement visuel, on peut simplement contrÎler le nombre de décimales affichées :
resultat = 0.1 + 0.2
print(f"Résultat : {resultat:.2f}") # Affiche : Résultat : 0.30
C'est la solution la plus simple et suffisante dans la grande majorité des cas de ce cours.
â
StratĂ©gie 2 : Arrondir avec round()â
La fonction round() permet de limiter la précision d'un nombre flottant :
resultat = round(0.1 + 0.2, 2)
print(resultat) # Affiche : 0.3
round() réduit l'erreur visible, mais n'élimine pas complÚtement les approximations internes.
Pour des comparaisons fiables, préférez la stratégie 3.
â StratĂ©gie 3 : Comparer avec une tolĂ©ranceâ
Pour vérifier si deux flottants sont "pratiquement égaux", on compare leur différence à un seuil trÚs petit :
a = 0.1 + 0.2
b = 0.3
tolerance = 1e-9 # 0.000000001
difference = abs(a - b)
print(difference) # Affiche 5.551115123125783e-17 (quasi zéro)
print(difference < tolerance) # Affiche True â la diffĂ©rence est nĂ©gligeable
đ L'opĂ©rateur < vĂ©rifie si la valeur de gauche est plus petite que celle de droite. Il sera Ă©tudiĂ© Ă la rencontre 4.
â
StratĂ©gie 4 : Utiliser le module decimalâ
Quand la précision absolue est critique, Python offre le module decimal qui effectue les calculs en base 10, comme le ferait un humain :
from decimal import Decimal
a = Decimal("0.1")
b = Decimal("0.2")
print(a + b) # Affiche exactement : 0.3
Notez que les valeurs sont passées comme des chaßnes de caractÚres ("0.1" et non 0.1).
Si on passait 0.1 directement, Python convertirait d'abord le flottant imprécis, et le problÚme reviendrait.
Alors, pourquoi ne pas utiliser decimal systématiquement?
đ Parce que c'est beaucoup plus lent et plus complexe Ă manipuler que les flottants classiques.
Dans ce cours d'introduction, les deux réflexes essentiels sont :
- Afficher des flottants â utiliser
:.2f(ou un autre nombre de dĂ©cimales) dans une f-string pour contrĂŽler la prĂ©sentation. - Comparer des flottants â Ă©viter
==ouround()et préférer une tolérance.
Le module decimal est rĂ©servĂ© aux situations oĂč la prĂ©cision absolue est indispensable (ex. logiciels bancaires).
Pour la majorité des calculs scientifiques ou pédagogiques, arrondir l'affichage est tout à fait suffisant.
Les explications de cette section étaient-elles claires ?
Pour favoriser une progression efficace, ce cours adopte une approche de classe inversée. Ce modÚle déplace l'acquisition théorique hors de la classe pour transformer les heures de rencontre en véritables séances d'application pratique.
-
Ă la maison (Exploration et Appropriation) : Vous ĂȘtes le maĂźtre de votre rythme. Ces activitĂ©s vous permettent de dĂ©couvrir les nouveaux concepts et tester les exemples au moment oĂč vous ĂȘtes le plus concentrĂ©. Si une notion vous semble obscure, n'hĂ©sitez pas Ă poser des questions Ă votre prof au fur et Ă mesure.
-
En classe (Application et Consolidation) : Le temps en prĂ©sentiel est une ressource prĂ©cieuse. Nous l'utilisons pour nous attaquer aux dĂ©fis plus complexes et aux exercices de programmation qui demandent une mobilisation active de vos connaissances. Câest le moment idĂ©al pour obtenir une rĂ©troaction immĂ©diate, collaborer avec vos pairs et bĂ©nĂ©ficier de l'accompagnement de votre enseignant au moment oĂč vous en avez le plus besoin.
- đ ActivitĂ©s Ă faire Ă la maison
- đ« ActivitĂ©s Ă faire en classe
đ§ Auto-validation des connaissancesâ
Ce formulaire sert à vérifier votre compréhension des éléments les plus importants de la rencontre R02. Ne faites ce questionnaire que lorsque vous vous sentez en trÚs bonne maßtrise de la matiÚre. En classe, dÚs votre arrivée, vous aurez un questionnaire trÚs similaire, évalué sommativement, à compléter sans accÚs à aucune documentation.
Ne pas remplir le formulaire diminue fortement vos chances de rĂ©ussir lâĂ©valuation sommative en dĂ©but de rencontre.
Assurez-vous de bien comprendre toutes les notions derriĂšre chaque question.
âïž Exercices de comprĂ©hensionâ
đš Pour rĂ©aliser cet exercice, imprimez le tableau de trace d'exĂ©cution.
En situation d'examen, vous devrez compléter une trace d'exécution sur papier sans utiliser d'ordinateur.
Sans exécuter le code, déterminez ce que le programme ci-dessous va afficher dans la console.
En suivant la recette simplifiée, complétez le tableau de trace d'exécution ligne par ligne.
La feuille de trace contient plus de colonnes que la recette simplifiée : laissez vides celles qui ne sont pas dans la recette.
import math
a = 16
b = math.sqrt(a)
a = a + 4
c = (a / b) ** 2
print(c)
a = 4
print(c)
b = b * 2
print(f"{a} {b} {c}")
Validez ensuite votre trace en exécutant le programme en mode débogage.
Avancez pas à pas et observez l'évolution de chaque variable à chaque ligne.
Variables, réaffectation, module math (racine carrée), opérateurs arithmétiques (/, **), f-strings, trace d'exécution
đŻ Solutionnaire
Consultez le solutionnaire uniquement aprĂšs avoir complĂ©tĂ© l'exercice par vous-mĂȘme.
Comparer votre réponse avec une solution vous permet de valider votre raisonnement et de corriger vos erreurs.
Consulter la solution avant d'avoir tenté l'exercice prive votre cerveau de l'occasion de construire des connexions durables.
- Trace simple â solutionnaire.pdf
đš Exercices de crĂ©ationâ
Pour chacun des exercices de cette section, vous devez créer des fichiers .py avec les noms indiqués.
Pour les exercices de cette section, vous pouvez consulter librement la documentation du site web du cours.
đ CrĂ©ez un fichier r02_free_style.py pour votre rĂ©ponse.
Dans un fichier, é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!
Variables, calculs et affectation, exécution en mode débogage (débogueur)
đ CrĂ©ez un fichier r02_question_de_gravite.py pour votre rĂ©ponse.
La gravitĂ© sur Mars est dâenviron 3,71 m/sÂČ.
Ăcrivez un programme pour convertir une masse (en kilogrammes) en son poids correspondant sur Mars, en newtons (N).
Le début de votre programme est le suivant :
masse = 50
Vous devez écrire le reste du programme.
Le programme doit afficher le bon poids peu importe le contenu de la variable.
đĄ Formule :
â Sortie attendue
Masse sur Terre (kg) : 50
Le poids sur Mars est de 185.5 N.
Variables, opérateurs arithmétiques
đ CrĂ©ez un fichier r02_pression_systolique.py pour votre rĂ©ponse.
Créez un programme calculant la moyenne de la pression systolique d'un patient.
đ ïž INSTRUCTIONSâ
- Déclarez une liste
mesurescontenant les 3 valeurs de pression systolique (matin, midi, soir) :mesures = [125, 130, 180] - Affichez chaque mesure en accédant aux éléments de la liste par leur index (
mesures[0],mesures[1],mesures[2]). - Calculez la moyenne Ă l'aide des fonctions
sum()etlen()appliquées directement sur la liste. - Affichez le résultat de façon claire et lisible.
Validez le bon fonctionnement de votre programme en modifiant les valeurs dans la liste.
Les trois mesures sont des donnĂ©es du mĂȘme type (des pressions) collectĂ©es de façon rĂ©pĂ©tĂ©e. Une liste les regroupe naturellement. De plus, utiliser sum() et len() rend votre calcul gĂ©nĂ©ralisant : il fonctionnerait sans modification avec 4, 5 ou 10 mesures dans la liste.
â Sortie attendue
Pression systolique
Mesure du matin : 125
Mesure du midi : 130
Mesure du soir : 180
Moyenne de la pression systolique : 145.0 mmHg
Listes, accĂšs par index, sum(), len()
đ CrĂ©ez un fichier r02_nombre_aleatoire.py pour votre rĂ©ponse.
Vous devez générer un nombre entier aléatoire compris entre 2 variables :
valeur_min = 50
valeur_max = 100
â Sortie attendue
Nombre le plus bas : 50
Nombre le plus haut : 100
Nombre aléatoire généré : 56
Le module random sera nécessaire :
- Approche courageuse : Vous pouvez lire la (documentation) du module pour trouver la fonction et des exemples.
- Approche plus simple : Vous pouvez 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 ?
Variables, module random (nombre entier aléatoire entre deux bornes), lecture de documentation
đ CrĂ©ez un fichier r02_liste_aleatoire.py pour votre rĂ©ponse.
CrĂ©ez un programme qui part dâune liste vide et lui ajoute 5 nombres entiers alĂ©atoires compris entre 0 et 100.
đ ïžINSTRUCTIONSâ
- Déclarez une liste vide :
nombres = []
- Ajoutez 5 nombres aléatoires (entre 0 et 100 inclusivement) à la liste, un à la fois, en utilisant la méthode
.append(). - Affichez la liste dans la console.
Le module random sera nĂ©cessaire. Si vous ne savez pas quelle fonction utiliser, rĂ©fĂ©rez-vous Ă lâexercice prĂ©cĂ©dent ou consultez la documentation.
Vous remarquerez que les 5 appels Ă .append() sont presque identiques. Câest prĂ©cisĂ©ment ce genre de rĂ©pĂ©tition quâune boucle for Ă©limine : en quelques lignes, elle exĂ©cuterait automatiquement lâajout autant de fois que souhaitĂ© que ce soit 5 ou 500 nombres. Vous verrez ça bientĂŽt!
â Sortie attendue
Liste de nombres aléatoires : [42, 7, 91, 55, 23]
(Les valeurs seront différentes à chaque exécution.)
Listes, liste vide, .append(), module random, accĂšs Ă la documentation
đ CrĂ©ez un fichier r02_distance_2_points.py pour votre rĂ©ponse.
Créez un programme calculant et affichant la distance entre les 2 points, arrondie à 2 décimales.
La formule de la distance entre 2 points et est :
Représentez les deux points dans une seule liste points contenant deux sous-listes :
points = [
[50, 70], # point A : [x1, y1]
[80, 60], # point B : [x2, y2]
]
Accédez aux coordonnées via les index : points[1][0] pour .
Pour réaliser la racine carrée de la formule, vous aurez besoin d'une fonction du module math.
Chaque point est lui-mĂȘme une liste [x, y], et points regroupe tous les points du problĂšme. Cette structure, appelĂ©e liste de listes (ou liste imbriquĂ©e), reflĂšte naturellement la rĂ©alitĂ© : un ensemble de points, chacun dĂ©fini par ses coordonnĂ©es. points[0] est le point A, points[1] est le point B.
â Sortie attendue
Point A
X1 : 50
Y1 : 70
Point B
X2 : 80
Y2 : 60
Distance : 31.62
Listes imbriquées (liste de listes), accÚs par double index, module math (racine carrée), opérateurs arithmétiques (**), round()
đ CrĂ©ez un fichier r02_nombre_decimal.py pour votre rĂ©ponse.
En utilisant les 2 variables suivantes :
chiffre = 5 # un chiffre entre 1 et 9
position_decimale = 2 # une position décimale (un entier positif).
Ăcrivez un programme qui gĂ©nĂšre un nombre dĂ©cimal dont le chiffre est Ă la position dĂ©cimale indiquĂ©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.
â Sortie attendue
chiffre : 5
position décimale : 3
Le nombre généré est : 0.005
Variables, puissances de 10 (**), opérateurs arithmétiques, types numériques
đ CrĂ©ez un fichier r02_montant_billets.py pour votre rĂ©ponse.
Ăcrivez 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 :
Montant : 376.54
Billets :
3 x 100$
1 x 50$
1 x 20$
0 x 10$
1 x 5$
Reste 1.54$
Avant d'écrire une seule ligne, jouez le rÎle du caissier qui doit remettre 376.54$ en utilisant le moins de billets possible. Sur papier, remplissez ce tableau à la main :
| Coupure | Combien de billets? | Montant restant aprĂšs |
|---|---|---|
| 100$ | 3 | 76.54 |
| 50$ | ? | ? |
| 20$ | ? | ? |
| 10$ | ? | ? |
| 5$ | ? | ? |
La premiĂšre ligne est remplie en exemple : 376.54 â (3 Ă 100) = 76.54.
đ Deux constats Ă faire avant de coder :
- Chaque coupure travaille toujours sur le montant qu'a laissĂ© la prĂ©cĂ©dente : la variable « montant restant » est le cĆur de l'algorithme.
- Vous refaites exactement les deux mĂȘmes gestes pour chaque coupure : (1) combien de billets entiers? (2) qu'est-ce qui reste ensuite?
Indices :
- Le début de votre programme est le suivant, déclarez les coupures disponibles dans une liste :
montant_initial = 376.54billets = [100, 50, 20, 10, 5] # coupures disponibles, du plus grand au plus petit
- Traitez les coupures une à la fois, en commençant par
billets[0]. - Accédez à chaque valeur de coupure via son index :
billets[0]pour 100$,billets[1]pour 50$, etc. - Créez autant de variables que vous le croyez nécessaire (ex : montant_restant, nb_billets_requis, etc.)
- Les deux gestes à répéter pour chaque coupure se traduisent ainsi :
- Combien de billets entiers? â la division entiĂšre (
//)376 // 100395 // 1000
- Qu'est-ce qui reste? â soustrayez du montant restant la valeur des billets donnĂ©s :
restant = restant - nb * coupure.
(Le modulorestant % coupuredonne directement ce mĂȘme reste, si vous prĂ©fĂ©rez.)
- Combien de billets entiers? â la division entiĂšre (
Les valeurs de coupures forment une série naturellement ordonnée. Les stocker dans une liste rend l'intention du code plus claire. Vous verrez lors d'un prochain cours qu'une boucle for permettrait de traiter automatiquement toutes les coupures, peu importe leur nombre, en quelques lignes seulement.
Listes, accÚs par index, division entiÚre (//) et modulo, opérateurs arithmétiques, variables intermédiaires