Update first chapters and new questions

Updated first chapter slides.
Added new questions in the new training section.
This commit is contained in:
2025-07-07 21:18:04 +02:00
parent bea28eca14
commit 77aa231f5b
11 changed files with 416 additions and 250 deletions

View File

@ -7,8 +7,9 @@ author: Steve Kossouho
----
En Python, on peut écrire des choses simples avec un seul script. Mais
souvent, et même pour des choses simples, on peut se retrouver à écrire du code, organisé de façon un peu plus complexe, ou même du code qui réutilise des fonctionnalités en dehors de votre script.
En Python, on peut écrire des choses simples qui tiennent dans un seul fichier de script.
Souvent, les projets plus ambitieux écrivent du code organisé de façon un peu plus complexe,
ou encore du code qui réemploie des fonctionnalités décrites dans des scripts externes.
----
@ -16,7 +17,9 @@ souvent, et même pour des choses simples, on peut se retrouver à écrire du co
Jusque là, tout ce que nous avons écrit, c'est des [modules]{.naming}. Ce sont des fichiers .py (vides ou non, ils peuvent contenir du code).
Il existe aussi les [packages]{.naming}. Ce sont des répertoires, pouvant contenir d'autres modules, et qui sont utilisables comme des modules (peuvent contenir du code). Pour pouvoir associer du code à ces répertoires et les considérer comme des packages, le langage Python impose que le code associé repose dans un fichier nommé `__init__.py` dans le répertoire. L'intérêt principal d'un package est d'y ranger d'autres packages et modules, pour organiser son code en arborescence cohérente.
Il existe aussi les [packages]{.naming}. Ce sont des répertoires, pouvant contenir d'autres modules, et qui sont utilisables comme des modules (peuvent contenir du code).
Pour pouvoir associer du code à ces répertoires et les considérer comme des packages, la spécification du langage Python impose que le code associé repose dans un
fichier nommé `__init__.py` dans le répertoire. L'intérêt principal d'un package est d'y ranger d'autres packages et modules, pour organiser son code en arborescence cohérente.
----
@ -24,9 +27,10 @@ Il existe aussi les [packages]{.naming}. Ce sont des répertoires, pouvant conte
Les modules et packages ont la même typographie que les variables (car Python les traite comme des variables de type `module`) :
- Tout en minuscules (ex. `mypackage`)
- <span style="color:red;">Sans espace ni tiret</span> (ex. `my_package`)
- etc.
- Tout en minuscules (ex. `my_package`)
- Sans espace ni tiret (ex. `super_package`). Un module contenant un espace n'est pas réutilisable.
- Aucun caractère accentué (ex. `derogations_generiques`)
- Peut contenir des chiffres, mais doit commencer par une lettre.
----
@ -37,87 +41,135 @@ Python est à la fois un langage et un exécutable interprétant des scripts éc
L'interpréteur est toujours livré avec ce qu'on appelle la bibliothèque standard.
Il s'agit d'une immense bibliothèque de fonctionnalités, que l'on peut réutiliser dans nos programmes.
La bibliothèque propose des outils pour manipuler du texte, du réseau, des bases de données, des fonctions mathématiques etc.
La bibliothèque propose des outils pour manipuler du texte, du réseau, des bases de données, des fonctions mathématiques, etc.
[Liste des modules et packages de la bibliothèque standard](https://docs.python.org/3/library/)
----
Parmi les très nombreux modules de la bibliothèque standard, assez peu vous serviront régulièrement. En voici une liste :
### Modules utiles
Parmi les très nombreux modules (environ `220`) de la bibliothèque standard, assez peu vous serviront régulièrement.
En voici une liste :
- `random` : génération de nombres aléatoires
- `math` : fonctions mathématiques et trigonométriques
- `statistics` : fonctions statistiques, comme l'écart type.
- `math` : fonctions arithmétiques, logarithmiques et trigonométriques
- `statistics` : fonctions statistiques de base, comme l'écart type.
- `pathlib` : outils pour gérer les chemins de fichier
- `datetime` : types pour gérer les dates
- `re` : pour gérer des expressions régulières (compatibles _Perl_)
D'autres peuvent servir ponctuellement, comme `csv` ou `sqlite3` pour nos exemples à venir.
----
Comment accéder à ces nombreuses fonctionnalités ?
Par défaut, elles ne sont pas toutes accessibles dans votre code, excepté celles documentées dans les sections "built-in", et pour pouvoir les utiliser, il faut en faire la demande explicite dans vos modules via la notion d'`import` :
### Importer des fonctionnalités
Variantes :
Par défaut, seules les fonctionnalités documentées dans les sections natives (`builtins`) sont directement utilisables,
et pour pouvoir utiliser les autres fonctionnalités, il faut en faire la demande explicite dans votre code via la notion d'`import` :
```{.python .numberLines}
# Les imports sont écrits au sommet d'un module
import math # vous avez maintenant une variable nommée `math`
from os import path # vous avez une variable `path`
```python {.numberLines}
import math # importe le module math via une variable
from os import path # importe le module path du package os
from os.path import basename # importe directement basename depuis os.path
from math import sin, cos # importer plusieurs fonctions depuis math
import datetime as dt # datetime est utilisable en tant que dt uniquement
from math import sin, cos # importer plusieurs fonctions de la même bibliothèque
math.cos(math.pi / 2.0) # possible grâce à import math
cos(0) # possible grâce à from math import cos
path.join(…)
print(math.cos(math.pi / 2.0)) # utilise uniquement l'import de math
print(cos(math.pi / 2.0), sin(math.pi / 2.0)) # utilise l'import de sin et cos
print(path.basename("/chemin/de/fichier/linux.txt")) # utilise l'import de path
print(basename("/chemin/de/fichier/linux.txt")) # utilise l'import de basename
print(dt.date.today())
```
Chaque script qui utilise directement un _symbole_ doit toujours l'importer.
Chaque script qui référence directement un objet provenant d'une bibliothèque doit toujours l'importer.
**Note** : Pour importer le contenu d'un module, l'interpréteur Python doit toujours exécuter le contenu dudit module, afin d'en connaître le contenu. Attention donc à la présence de `print` dans ledit module.
**Note** : Pour importer le contenu d'un module ou un élément d'un module, l'interpréteur Python doit toujours
exécuter le contenu dudit module, afin d'en connaître le contenu.
----
Note : Normalement, importer un package donne accès uniquement aux variables directement définies dans celui-ci, mais pas
aux sous-modules ou packages qui s'y trouvent. Si vous créez un package `package` contenant un sous-module `module1` :
```{.python .numberLines}
import package
print(package.module1) # ceci provoque une erreur
```
Cela ne fonctionne pas car Python ne charge pas directement les modules et packages présents à l'intérieur du package.
Pour y avoir accès, il faut que le package lui-même importe les éléments qui seront directement accessibles depuis celui-ci :
```{.python .numberLines}
from . import module1 # ajoute une variable module1 dans le package
```
`package/__init__.py`
----
## Faire un petit peu de calcul avec la bibliothèque standard
## Un peu de calcul avec la bibliothèque standard
Avec l'outil que sont les imports, on peut avoir accès à de nombreuses fonctions de calcul.
Par exemple, on pourrait générer un nombre aléatoire et calculer un cosinus :
```{.python .numberLines}
```python {.numberLines}
import random
import math
random_number = random.randint(0, 100) # nombre entre 0 et 100 inclus
cosinus_result = math.cos(random_number) # cosinus du nombre aléatoire
number = random.randint(0, 100) # nombre entre 0 et 100 inclus
cosinus_result = math.cos(number) # cosinus du nombre aléatoire
while True:
try:
guess = int(input("Saisissez un nombre entre 0 et 100 : "))
# Les lignes suivantes s'exécuteront si la ligne du dessus ne génère pas d'erreur
if guess < number:
print("C'est supérieur.")
elif guess > number:
print("C'est inférieur.")
else:
print("C'est gagné !")
break # Quitter la boucle
except ValueError: # si impossible de récupérer l'équivalent entier
print("Saisie incorrecte.")
```
- [Documentation du module `random`](https://docs.python.org/3/library/random.html)
- [Documentation du module `math`](https://docs.python.org/3/library/math.html)
----
## Bonus : Installer des paquets externes ([PyPI](https://pypi.org))
## Extra : Installer des paquets externes ([PyPI](https://pypi.org))
Avec PyCharm, on va installer simplement quelques paquets externes et utiliser leurs fonctionnalités :
Avec PyCharm, on peut installer simplement quelques paquets externes et utiliser leurs fonctionnalités :
1. `requests` : Faire des requêtes HTTP plus simplement
1. `requests` : Faire des requêtes HTTP et consommer des API REST
2. `unidecode` : Translittération et désaccentuation
3. `attrs` : Accélérer l'écriture de classes
3. `faker` : Anonymiser avec des données factices (noms, adresses, téléphone, code pin, etc.)
----
### Gérer un environnement virtuel pour installer des bibliothèques
Python est livré avec un outil en ligne de commande nommé `pip`, qui vous permet facilement de télécharger et
installer des bibliothèques externes publiées sur le site [PyPI](https://pypi.org).
Si pour votre projet, vous avez besoin de la dernière version de la bibliothèque `requests`, par exemple, vous pouvez l'installer
avec la commande suivante dans un terminal :
```sh {.numberLines}
pip install requests
```
La dernière version de la bibliothèque compatible avec votre version de Python sera installée dans un répertoire spécifique
avec le nom `requests`. Vous ne pouvez pas installer plusieurs versions simultanées de la même bibliothèque au même endroit.
----
### Les environnements virtuels pour gérer ses versions de paquets
Un environnement virtuel (`venv`) se présente sous la forme d'un répertoire avec quelques scripts, dont `python`. Lorsqu'un environnement
virtuel est "activé" via l'un de ses scripts, il se passe plusieurs choses :
- Les bibliothèques installées avec `pip` sont installées dans cet environnement virtuel
- L'exécutable `python` de l'environnement peut importer les bibliothèques installées dans ce dernier
L'intérêt est de pouvoir facilement gérer plusieurs projets qui nécessitent des versions différentes des mêmes
bibliothèques.
Les environnements virtuels peuvent être créés, sélectionnés, et utilisés automatiquement avec Visual Studio Code
et PyCharm.
----
#### PyCharm
TODO
----
#### Visual Studio Code
TODO