Convert Asciidoc to markdown

Converted asciidoc to markdown using ai.
This commit is contained in:
2025-07-06 22:07:31 +02:00
parent ebe0844882
commit bea28eca14
26 changed files with 352 additions and 388 deletions

1
.gitignore vendored
View File

@ -164,3 +164,4 @@ cython_debug/
/documentation/slides/
.idea
.vscode

View File

@ -1,17 +1,15 @@
= Exercices
# Exercices
== Exercice 1
## Exercice 1
[source, python]
----
```python
print("La rue Rostand,")
print(" se trouve au")
print("Feu à droite")
----
```
== Exercice 2
## Exercice 2
[source, python]
----
```python
print("Haut", "les", "cœurs", "!")
----
```

View File

@ -1,57 +1,51 @@
= Exercices
# Exercices
== Exercice 1
## Exercice 1
[source, python]
----
```python
prenom = "Paul"
temperature = 24.8
paul_age = 30
print(prenom, temperature, paul_age)
----
```
== Exercice 2
## Exercice 2
[source, python]
----
```python
saisie = input("Saisissez du texte :")
print(saisie)
----
```
== Exercice 3
## Exercice 3
[source, python]
----
```python
val1 = 53 * 46 + 13
val2 = 99 > 13
val3 = "Bonjour " + "chef"
val4 = (59 * 62 + 13) / 6.5
print(val1, val2, val3, val4)
----
```
== Exercice A1
## Exercice A1
[source, python]
----
```python
distance = 42195
print(distance // 1000) # nombre de kilomètres
print(distance % 1000) # nombre de mètres restants
----
```
== Exercice A2
## Exercice A2
[source, python]
----
```python
weight = 4_502_177
print(weight // 1000000, "tonnes") # combien de groupes de 1000000 de grammes
print((weight // 1000) % 1000) # combien de kilos restants, sans compter les tonnes
print(weight % 1000) # combien de grammes restants
----
```
== Exercice A3
## Exercice A3
[source, python]
----
```python
saisie1 = input("Premier nombre :") # attention, je vais récupérer du texte
saisie2 = input("Second nombre :")
saisie1 = float(saisie1) # convertir en flottant
@ -62,4 +56,4 @@ else:
print(saisie2)
# Autre possibilité intéressante
print(max(saisie1, saisie2))
----
```

View File

@ -1,38 +1,34 @@
= Exercices
# Exercices
== Exercice 1
## Exercice 1
[source, python]
----
```python
roll = 5
if roll > 4:
print("Lancer réussi !")
----
```
== Exercice 2
## Exercice 2
[source, python]
----
```python
text = "Bonjour"
if text == "bonjouR":
print("Bien le bonjour")
----
```
== Exercice 2B
## Exercice 2B
[source, python]
----
```python
text = "Bonjour"
if text == "Bonjour":
print("Bien le bonjour")
else:
print("Je ne comprends pas !")
----
```
== Exercice 3
## Exercice 3
[source, python]
----
```python
value = 7
if value >= 9:
print("Élevé")
@ -42,36 +38,33 @@ elif value >= 4:
print("Standard")
else:
print("Bas")
----
```
== Exercice A1
## Exercice A1
[source, python]
----
```python
a1 = 4
a2 = 7
if a1 > 5 and a2 < 6:
print("OK")
else:
print("Valeurs incorrectes")
----
```
== Exercice A2
## Exercice A2
[source, python]
----
```python
a1 = 5
a2 = 5
if a1 > 5 or a2 < 6:
print("Conditions suffisantes")
else:
print("Valeurs incorrectes")
----
```
== Exercice A3
## Exercice A3
[source, python]
----
```python
is_on = True
saisie = input("Saisissez une commande (Marche ou Arrêt) :")
if saisie == "Marche":
@ -84,5 +77,4 @@ elif saisie == "Arrêt":
print("Extinction…")
else:
print("Déjà éteint !")
----
```

View File

@ -1,27 +1,24 @@
= Exercices
# Exercices
== Exercice 1
## Exercice 1
[source, python]
----
```python
for number in range(10):
print(number)
----
```
== Exercice 2
## Exercice 2
[source, python]
----
```python
for number in range(10):
if number % 2 == 0: # Est pair / reste 0 quand on fait la division entière
print(number)
----
```
== Exercice A1
## Exercice A1
[source, python]
----
```python
for item1 in range(10):
for item2 in range(item1):
print(item1, item2)
----
```

View File

@ -1,14 +1,10 @@
= Exercices sur les dictionnaires
# Exercices sur les dictionnaires
'''
## Exercice A1 : compréhension de dictionnaire
== Exercice A1 : compréhension de dictionnaire
*Rappel* : Convertir un dictionnaire en gardant les clés originales, mais y associer comme valeurs uniquement les températures.
*Rappel* : Convertir un dictionnaire en gardant les clés originales,
mais y associer comme valeurs uniquement les températures.
[source,python]
----
```python
# Dictionnaire original
meteo = {
"Pau": (21.0, "Nuageux", 1015),
@ -23,4 +19,4 @@ meteo = {
converted = {key: meteo[key][0] for key in meteo}
# On affiche le résultat pour le vérifier
print(converted)
----
```

View File

@ -1,6 +1,6 @@
= Exercices sur la fonction `print()`
# Exercices sur la fonction `print()`
== Exercice 1
## Exercice 1
Affichez dans la console le texte suivant :
@ -8,19 +8,19 @@ Affichez dans la console le texte suivant :
- `3 espaces` se trouve au
- Feu à droite
== Exercice 2
## Exercice 2
La fonction `print()` accepte plusieurs arguments, dont les valeurs sont affichées sur la même ligne, et par défaut séparés par un espace.
*La syntaxe est la suivante* : `print("a", "b", "c", 19)`
**La syntaxe est la suivante** : `print("a", "b", "c", 19)`
Affichez, en imitant cette syntaxe, le texte suivant :
* Hauts les cœurs !
- Hauts les cœurs !
(sous Linux, le e dans l'o s'obtient avec la combinaison de touches `Alt Gr + O`. Sous Windows, `Alt + 339` devrait donner le même résultat)
(sous Linux, le e dans l'o s'obtient avec la combinaison de touches `Alt Gr + O`. Sous Windows, `Alt + 339` devrait donner le même résultat)
== Exercice A1
## Exercice A1
La fonction `print()` accepte des arguments avec des noms spécifiques, dont `sep` et `end`. `sep` permet de désigner quelle chaîne sépare les arguments à afficher, et `end` permet de préciser par quelle chaîne terminer le `print`.
Par défaut, `sep=" "` et `end="\n"`. La fonction s'utiliserait ainsi :

View File

@ -1,18 +1,18 @@
= Variables
# Variables
---
== Exercice 1
## Exercice 1
- Déclarez trois variables, avec des noms corrects, contenant :
* Le nom d'une personne, ex. "Paul"
* La température courante en °C, ex. 25.3
* L'âge d'une personne, ex. 30
- Le nom d'une personne, ex. "Paul"
- La température courante en °C, ex. 25.3
- L'âge d'une personne, ex. 30
- Affichez dans la console les valeurs de ces trois variables.
---
== Exercice 2
## Exercice 2
- Demandez à l'utilisateur de saisir du texte, et mettez-le dans une variable
- Affichez le contenu de la variable.
@ -21,18 +21,18 @@
---
== Exercice 3 : Expressions
## Exercice 3 : Expressions
- Déclarez plusieurs variables, contenant le résultats de :
* Une opération arithmétique entre nombres
* Une comparaison entre nombres
* Une opération d'addition entre deux chaînes
* L'expression `(59 * 62 + 13) / 6.5`
- Une opération arithmétique entre nombres
- Une comparaison entre nombres
- Une opération d'addition entre deux chaînes
- L'expression `(59 * 62 + 13) / 6.5`
- Affichez leur contenu dans la console.
---
== Exercice A1 : Conversion en ordres de grandeur
## Exercice A1 : Conversion en ordres de grandeur
- Déclarez une variable contenant une distance en mètres (au moins 1001, ex 4210)
- Affichez le nombre de kilomètres dans cette valeur (nombre entier, ex. 4)
@ -50,7 +50,7 @@ print(kilometers, "kilomètres et", meters, "mètres.")
---
== Exercice A2 : Deux ordres de grandeur
## Exercice A2 : Deux ordres de grandeur
- Déclarez une variable contenant une masse en grammes (au moins 1 000 000)
- Affichez le nombre de tonnes, de kilogrammes et de grammes dans cette masse.
@ -60,7 +60,7 @@ y a deux ordres de grandeur à prendre en compte !
---
== Exercice A3 : Saisie de nombres
## Exercice A3 : Saisie de nombres
- Demandez à l'utilisateur de saisir deux nombres (en deux fois).
- Indiquez quel est le nombre le plus grand qui a été saisi.

View File

@ -1,8 +1,8 @@
= Conditions
# Conditions
---
== Exercice 1 : `if` seul
## Exercice 1 : `if` seul
- Déclarez une variable avec une valeur entière entre 1 et 6 (lancer de dé).
- Affichez `"Lancer réussi !"` si la valeur est supérieure strictement à 4
@ -10,7 +10,7 @@
---
== Exercice 2 : `if` seul, comparer du texte
## Exercice 2 : `if` seul, comparer du texte
- Déclarez une variable avec le texte `"Bonjour"`;
- Affichez `"Bien le bonjour"` si votre variable est égale à `"bonjouR"`.
@ -19,7 +19,7 @@
---
== Exercice 2B : `if…else`
## Exercice 2B : `if…else`
- Assignez à une variable le texte `"Bonjour"`;
- Affichez `"Bien le bonjour"` si votre variable est égale à `"Bonjour"`;
@ -27,7 +27,7 @@
---
== Exercice 3 : `if…elif…else`
## Exercice 3 : `if…elif…else`
- Assignez à une variable un entier arbitraire entre 0 et 10 inclus;
- Si cette valeur est d'au moins 9, afficher `"Élevé"`;
@ -37,7 +37,7 @@
---
== Exercice A1 : Multiples conditions
## Exercice A1 : Multiples conditions
- Assignez à deux variables `a1` et `a2` des nombres entiers entre 0 et 10
- Si `a1` est supérieur à 5 *et* `a2` est inférieur à 6, afficher `"OK"`
@ -45,7 +45,7 @@
---
== Exercice A2 (conditions avec `and` et `or`)
## Exercice A2 (conditions avec `and` et `or`)
- Assignez à deux variables `a1` *et* `a2` des nombres entre 0 et 10
- Si `a1` est supérieur à 5 *ou* `a2` est inférieur à 6, afficher `"Conditions suffisantes"`
@ -53,16 +53,16 @@
---
== Exercice A3
## Exercice A3
- Déclarez une variable de statut `is_on` contenant un booléen (`True` ou `False`)
- Demandez à l'utilisateur de *saisir un texte*, et assignez-le à une variable `saisie`
- Si `saisie` vaut "Marche" :
* Si `is_on` est `False`, alors afficher "Allumage en cours..."
* Sinon, afficher "Déjà allumé !"
- Si `is_on` est `False`, alors afficher "Allumage en cours..."
- Sinon, afficher "Déjà allumé !"
- Sinon, si `saisie` vaut "Arrêt" :
* Si `is_on` est `True`, afficher "Extinction..."
* Sinon, afficher "Déjà éteint !"
- Si `is_on` est `True`, afficher "Extinction..."
- Sinon, afficher "Déjà éteint !"
Exemple de rappel :

View File

@ -1,6 +1,6 @@
= Exercices sur les blocs vides
# Exercices sur les blocs vides
== Exercice 1
## Exercice 1
- Écrivez un bloc `if` dont le code, lorsqu'il est exécuté, ne fait rien.
- *Outils* : `pass`

View File

@ -1,16 +1,16 @@
= Exercices sur les boucles `for`
# Exercices sur les boucles `for`
== Exercice 1
## Exercice 1
- Écrivez une boucle `for` sur les nombres de 0 à 9.
- Affichez la valeur du nombre parcouru.
== Exercice 2
## Exercice 2
- Écrivez une boucle `for` sur les nombres de 0 à 9.
- Affichez la valeur du nombre s'il est pair (`nombre % 2 == 0`)
== Exercice A1
## Exercice A1
- Écrivez une boucle `for` sur les nombres de 0 à 9 (variable nommée `item1`).
- Dans cette boucle, écrivez une autre boucle sur les nombres de 0 à `item1` (variable `item2`)

View File

@ -1,22 +1,22 @@
= Exercices sur les boucles `while`
# Exercices sur les boucles `while`
== Exercice 1
## Exercice 1
- Déclarer une variable `number` égale à 10
- Écrivez une boucle `while` tournant tant que `number` est supérieur ou égal à 0.
- Dans la boucle, afficher `number`, et retirer `1` à `number`.
== Exercice 2
## Exercice 2
- Écrire une boucle `while` qui tourne indéfiniment (condition `True`, ou soyez créatif)
== Exercice 3
## Exercice 3
- Écrire une boucle `while` qui ne se lance jamais (condition `False`, ou soyez créatif)
- (il suffit que la condition soit fausse dès le départ)
== Exercice A1 : Fibonacci
## Exercice A1 : Fibonacci
- Écrire du code, affichant dans la console, les éléments successifs de la suite de Fibonacci jusqu'à 10 000 :
* Utiliser deux variables, `left` and `right` qui vont, au départ, contenir les deux premiers éléments de la suite.
* Dans la boucle, modifier `left` and `right` pour ne garder que les deux derniers éléments de la suite.
- Utiliser deux variables, `left` and `right` qui vont, au départ, contenir les deux premiers éléments de la suite.
- Dans la boucle, modifier `left` and `right` pour ne garder que les deux derniers éléments de la suite.

View File

@ -1,6 +1,6 @@
= Exercices sur les listes
# Exercices sur les listes
== Exercice 1
## Exercice 1
- Écrivez une liste contenant les nombres entiers pairs de 0 à 10 inclus
- Assignez la longueur de la liste à une variable (`len()`)
@ -8,53 +8,51 @@
- Ajoutez un élément à la fin de la liste
- Affichez le nouveau contenu de la liste
== Exercice 2
## Exercice 2
- Écrivez une liste contenant les nombres 1, 2, 4, 8, 16, 32, 64
- Supprimez de la liste le nombre 8
- Ajoutez à la fin de la liste le nombre 128
- Affichez le contenu de la liste dans la console.
== Exercice 3 (indices négatifs)
## Exercice 3 (indices négatifs)
- Écrivez une liste contenant 3 éléments
- Affichez le *dernier* élément en utilisant un indice négatif
- Affichez le *premier* élément en utilisant un indice négatif
== Pré-Exercice 4 (slicing)
## Pré-Exercice 4 (slicing)
[source,python]
----
```python
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = a[0:5] # Index 0 à 5 non inclus. Marche aussi sur les chaînes.
c = a[5:0] # L'index de fin est inférieur au départ, renvoie une liste vide
f = a[:] # Renvoie toute la liste
d = a[::-1] # Tout parcourir à l'envers
e = a[::2] # Tout parcourir 2 par 2
----
```
== Exercice 4 (slicing)
## Exercice 4 (slicing)
- Écrivez une liste de 6 nombres
- Affichez la liste comprenant les 3 premiers éléments
- Affichez la liste comprenant tout sauf le premier élément
== Exercice 5 (slicing avancé)
## Exercice 5 (slicing avancé)
- Réutilisez la liste de l'exercice 4
- Affichez toute la liste, mais à l'envers
- Affichez une liste comprenant les éléments aux indices pairs
== Exercice A1
## Exercice A1
- Écrivez une liste contenant les nombres multiples de 3 de 0 à 15.
- Faites une boucle `for` sur cette liste,
* et affichez uniquement les nombres pairs de cette liste (`valeur % 2 == 0`)
- et affichez uniquement les nombres pairs de cette liste (`valeur % 2 == 0`)
== Exercice A2
## Exercice A2
- Consultez la https://docs.python.org/3/tutorial/datastructures.html#more-on-lists[référence des fonctions de listes]
- Consultez la [référence des fonctions de listes](https://docs.python.org/3/tutorial/datastructures.html#more-on-lists)
- Déclarez une liste de nombres flottants
- Utilisez la méthode qui sert à renvoyer le dernier élément et le supprimer de la liste
- Affichez cet élément, puis la liste

View File

@ -1,6 +1,6 @@
= Exercices sur les ensembles
# Exercices sur les ensembles
== Exercice 1
## Exercice 1
- Écrivez un `set` contenant 5 valeurs
- Déclarez un second `set` contenant au moins 2 valeurs du premier set
@ -8,14 +8,14 @@
- Affichez les valeurs communes aux deux sets (`intersection()`)
- Affichez un set contenant toutes les valeurs des 2 sets (`union()`)
== Exercice 2 (conversion)
## Exercice 2 (conversion)
- Écrivez une *liste* contenant des valeurs en doublons
- Affichez le contenu de la liste
- Assignez à une variable la conversion de la liste en set (`set(x)`)
- Affichez la valeur du set obtenu
== Exercice 3
## Exercice 3
Al et Kim sont inscrits sur un réseau social. Al a les amis suivants :
@ -33,7 +33,7 @@ Kim a les amis suivants :
Quels sont leurs amis en commun ? Écrivez un code qui représente et résout cet énoncé.
== Exercice 4
## Exercice 4
Partant du tuple suivant :

View File

@ -1,40 +1,40 @@
= Exercices sur les dictionnaires
# Exercices sur les dictionnaires
== Exercice 1
## Exercice 1
- Écrivez un simple dictionnaire associant des noms à des âges :
* Paul → 30
* Karim → 22
* Gina → 41
* Anna → 25
- Paul → 30
- Karim → 22
- Gina → 41
- Anna → 25
- Affichez l'âge de Gina
- Ajoutez les associations suivantes :
* Alina → 33
* Victor → 55
- Alina → 33
- Victor → 55
- Affichez le contenu du dictionnaire
== Exercice 2 (parcours)
## Exercice 2 (parcours)
- Réutilisez votre dictionnaire
- Utilisez une boucle `for` normale pour :
* Afficher les clés du dictionnaire
* Afficher la valeur associée à chaque clé
- Afficher les clés du dictionnaire
- Afficher la valeur associée à chaque clé
== Exercice 3 (parcours + `.items()`)
## Exercice 3 (parcours + `.items()`)
- Réutilisez votre dictionnaire
- Utilisez une boucle `for` sur `.items()` avec deux variables :
* Affichez clé et valeur associée
- Affichez clé et valeur associée
== Exercice A1 (compréhension)
## Exercice A1 (compréhension)
- Déclarez un dictionnaire de conditions météo (°C, condition, pression)
* `meteo = {"Pau": (21.0, "Nuageux", 1015), "Gap": (20.3, "Dégagé", 1019), "Osny": (19.1, "Brouillard", 1015)}`
- `meteo = {"Pau": (21.0, "Nuageux", 1015), "Gap": (20.3, "Dégagé", 1019), "Osny": (19.1, "Brouillard", 1015)}`
- À l'aide d'une compréhension de dictionnaire, récupérer un dictionnaire :
* Dont les clés sont les mêmes noms de villes
* Dont les valeurs sont uniquement la température associée
- Dont les clés sont les mêmes noms de villes
- Dont les valeurs sont uniquement la température associée
== Exercice A2 (compréhensions)
## Exercice A2 (compréhensions)
- Déclarez une liste via une compréhension, qui contient les nombres pairs de 0 à 98, sauf ceux divisibles par 5. (comprendre, uniquement ceux non divisibles par 5).
- Déclarez une liste de mots manuellement. Puis déclarez un générateur (compréhension de tuple) qui contient uniquement les mots de plus de 4 lettres. (`len()`).

View File

@ -1,48 +1,46 @@
= Exercices sur les manipulations de chaînes
# Exercices sur les manipulations de chaînes
== Exercice 1
## Exercice 1
- Consultez https://docs.python.org/3/library/stdtypes.html#string-methods[les méthodes disponibles sur les chaînes]
- Consultez [les méthodes disponibles sur les chaînes](https://docs.python.org/3/library/stdtypes.html#string-methods)
- Déclarez une chaîne de caractères avec plusieurs mots
- Affichez la version tout en majuscules (`upper`)
- Affichez la version tout en minuscules (`lower`)
- Découpez la autour des espaces (`split`)
== Exercice 2 (joindre les deux bouts)
## Exercice 2 (joindre les deux bouts)
- Partant de cette liste de mots :
[source,python]
----
```python
word_list = ("mon", "vieux", "tonton", "m'a", "jeté", "sur", "une", "nouvelle", "planète")
----
```
Utiliser la méthode `join()` sur une chaîne de séparation pour reconstituer la phrase entière.
(N'utilisez pas de boucle `for`).
== Exercice 3 (slicing)
## Exercice 3 (slicing)
- Déclarez une chaîne de caractères quelconque
- En utilisant le _slicing_, affichez-la à l'envers
- De la même façon, affichez uniquement les 5 premiers caractères
- Affichez le texte, mais uniquement un caractère sur deux
== Exercice 4 (f-strings)
## Exercice 4 (f-strings)
- Déclarez plusieurs variables :
* `number = 14`
* `base_list = [1, 2, 3]`
- `number = 14`
- `base_list = [1, 2, 3]`
- Affichez une *f-string* incluant le contenu de `number` et `base_list` :
* Il est *14* heures. La liste est *[1, 2, 3]*.
- Il est *14* heures. La liste est *[1, 2, 3]*.
== Exercice A1 (`join` + conversion)
## Exercice A1 (`join` + conversion)
Partant de cette liste :
[source, python]
----
```python
items = ["Hello, it's", True, "that", 40, "people have", None]
----
```
- Confectionner une phrase avec `" ".join()`.
- La fonction `join` nécessitant une liste de chaînes pour fonctionner, utilisez une compréhension de liste pour convertir cette liste en liste de chaînes (utilisez `str(x)`).

View File

@ -1,34 +1,33 @@
= Exercices sur les exceptions
# Exercices sur les exceptions
== Exercice 1
## Exercice 1
- Écrivez un bloc `try/except`
- Dans le bloc `try`, provoquez une division par zéro (`ZeroDivisionError`)
- Dans le bloc `except`, affichez "Division impossible !"
== Exercice A1
## Exercice A1
- Générez un nombre entier aléatoire entre 0 et 1 :
[source,python]
----
```python
from random import randint
number = randint(0, 1)
----
```
- Écrivez un bloc `try/except`
- Dans le bloc `try` :
* Si `number` vaut `0`, afficher `[1, 2, 3][4]` (`IndexError`)
* Si `number` vaut `1`, afficher `{}[0]` (`KeyError`)
- Si `number` vaut `0`, afficher `[1, 2, 3][4]` (`IndexError`)
- Si `number` vaut `1`, afficher `{}[0]` (`KeyError`)
- Écrire un bloc `except` pour `IndexError`, qui affiche "Erreur d'index"
- Écrire un bloc `except` pour `KeyError`, qui affiche "Erreur de clé"
== Exercice A2 (variante)
## Exercice A2 (variante)
- Reprenez une copie de l'exercice 1
- Mais cette fois, ayez un seul bloc `except` qui gère à la fois `IndexError` et `KeyError`, et qui affiche "Erreur d'accès".
== Exercice A3
## Exercice A3
- Écrivez un bloc `try/except`
- Provoquez une erreur dans le bloc `try` (pas une erreur de syntaxe !)

View File

@ -1,12 +1,12 @@
= Exercices sur les fonctions
# Exercices sur les fonctions
== Exercice 1
## Exercice 1
- Écrivez une fonction nommée `show_something` qui ne prend pas d'argument
- Cette fonction doit afficher dans la console "Something"
- Appelez cette fonction
== Exercice 2
## Exercice 2
- Écrivez une fonction nommée `return_constant` qui ne prend pas d'argument
- Cette fonction affiche dans la console "99"
@ -14,24 +14,24 @@
- Appeler la fonction et assigner sa valeur de retour à une variable
- Afficher le contenu de la variable
== Exercice 3
## Exercice 3
- Écrivez une fonction nommée `product` qui prend deux arguments positionnels `x` et `y`
- Cette fonction renvoie le produit de `x` et `y`
- Affichez le résultat de cette fonction lorsque vous l'appelez avec les valeurs :
* `10, 10`
* `15, -15`
* `"hello ", 3`
* `[1, 2, 3], 2`
- `10, 10`
- `15, -15`
- `"hello ", 3`
- `[1, 2, 3], 2`
== Exercice 4
## Exercice 4
- Écrivez une fonction nommée `quotient` qui prend un argument positionnel `numerator` et un argument par défaut `denominator`, qui prend la valeur `1` par défaut.
- La fonction renvoie le quotient de `numerator` et `denominator`.
- La fonction gère l'exception de `ZeroDivisionError` en renvoyant la valeur `None`.
- Affichez le résultat de cette fonction lorsque vous l'appelez avec les valeurs :
* `10, 4`
* `10, -1`
* `1, 0`
* `10`
- `10, 4`
- `10, -1`
- `1, 0`
- `10`
- Variez les appels en passant les arguments positionnellement, par nom, etc.

View File

@ -1,19 +1,19 @@
= Exercices sur les fonctions
# Exercices sur les fonctions
== Exercice A1
## Exercice A1
- Écrivez une fonction `print_lines` qui prend un argument étoile `*lines`
- La fonction utilise une boucle `for` pour afficher les éléments de `lines` dans la console
- Appelez la fonction avec des arguments différents :
* `"ligne 1", "ligne 2", 13, 14, 15`
* _aucun argument_
* `"matin", "midi", "soir", "nuit"`
- `"ligne 1", "ligne 2", 13, 14, 15`
- _aucun argument_
- `"matin", "midi", "soir", "nuit"`
== Exercice A2
## Exercice A2
- Écrivez une fonction `mappings` qui prend un argument double-étoile `**prices`
- La fonction parcourt le dictionnaire dans `prices` et affiche pour chaque clé `key` :
* `f"Produit : {key:<16} - Prix : {value:.2f}€"`
- `f"Produit : {key:<16} - Prix : {value:.2f}€"`
- Testez l'appel de cette fonction avec des arguments suivants :
* `pomme=0.8, cassis=1.5, ananas=2.8, raisin=4.99`
* `perrier=1.2, badoit=0.95, san_pellegrino=1.1, vichy=40`
- `pomme=0.8, cassis=1.5, ananas=2.8, raisin=4.99`
- `perrier=1.2, badoit=0.95, san_pellegrino=1.1, vichy=40`

View File

@ -1,30 +1,30 @@
= Exercices sur les dates et heures
# Exercices sur les dates et heures
== Exercice 1
## Exercice 1
- Déclarez trois objets `datetime` :
* `now` : là, tout de suite
* `forty_ago` : le 12 février 1981 à 22h31
* `fifteen_ago` : le 3 mars 2006 à 16h10 et 14 secondes
- `now` : là, tout de suite
- `forty_ago` : le 12 février 1981 à 22h31
- `fifteen_ago` : le 3 mars 2006 à 16h10 et 14 secondes
- Affichez chacun de ces objets dans la console
- Affichez le mois de `forty_ago` (`.month`)
- Affichez les minutes et secondes de `fifteen_ago`
== Exercice 2
## Exercice 2
- Conservez les variables du dessus
- Assignez la différence entre `now` et `forty_ago` dans une variable `interval_40`
- Affichez le nombre de jours contenus dans `interval_40` (`.days`)
- Affichez la date qu'il sera dans `interval_40` (`now + interval_40`)
== Exercice 3 (conversion vers chaîne)
## Exercice 3 (conversion vers chaîne)
- Conservez les variables du dessus
- Affichez `fifteen_ago` sous la forme suivante :
* `"03 mars 2006, 16:10:14"`
- `"03 mars 2006, 16:10:14"`
- (utilisez `fifteen_ago.strftime(format 8563.3.3.)`)
== Exercice 4 (conversion depuis chaîne)
## Exercice 4 (conversion depuis chaîne)
- Convertissez la chaîne `"31-01-2019 16:48"` vers un objet `datetime`
- (utilisez `datetime.strptime(chaine, format)`)

View File

@ -1,6 +1,6 @@
= Exercices sur les classes (basique)
# Exercices sur les classes (basique)
== Exercice 1
## Exercice 1
(Thème *bibliothèque*)
@ -10,7 +10,7 @@
- Instanciez deux nouveaux objets de cette classe (différenciez noms de variables et de classes)
- Affichez la valeur de l'attribut `name` de l'un des objets
== Exercice 2
## Exercice 2
- Déclarez une classe `Book`
- Avec des attributs `title` (`None`), `author` (`None`), `year` (`None`)
@ -18,40 +18,40 @@
- Modifiez les attributs `title` et `author`
- Affichez la valeur de ces attributs
== Exercice 3 (méthodes)
## Exercice 3 (méthodes)
- Réutilisez la classe `Library`
- Ajoutez-y un attribut `is_open` (`True`)
- Ajoutez une méthode `open(value=True)` qui change l'attribut `is_open`
- Ajoutez une méthode `show_status()` qui affiche l'état de la bibliothèque :
* `"Bibliothèque <nom> :"`
* `"État : Ouverte"` (ou `"fermée"`)
- `"Bibliothèque <nom> :"`
- `"État : Ouverte"` (ou `"fermée"`)
== Exercice 4 (Redéfinition de l'instanciation)
## Exercice 4 (Redéfinition de l'instanciation)
- Réutilisez la classe `Library`
- Définissez la méthode `__init__()`, qui accepte des arguments `name` et `address` :
* `name` est un argument à valeur par défaut, à `None`
* `address` possède une valeur par défaut à `None`
* La méthode utilise ces arguments pour initialiser les attributs de `self`.
- `name` est un argument à valeur par défaut, à `None`
- `address` possède une valeur par défaut à `None`
- La méthode utilise ces arguments pour initialiser les attributs de `self`.
- Instanciez deux nouveaux objets de cette classe
- Exécutez la méthode `show_status()` sur ces deux objets
== Exercice 5 (Héritage)
## Exercice 5 (Héritage)
- Définissez une classe `ComicBook` héritant de `Book`
- Cette classe contient en plus un attribut `is_color` (`True`)
- Instanciez un objet de chacune des deux classes `Book` et `ComicBook`
- Vérifiez que l'objet de type `ComicBook` est bien un `Book` :
* en utilisant la fonction `isinstance(object, class)`
- en utilisant la fonction `isinstance(object, class)`
== Exercice 6 (Polymorphisme)
## Exercice 6 (Polymorphisme)
- Ajoutez un attribut `is_published` sur la classe `Book`
- Ajoutez une méthode `publish(value)` sur `Book`, qui change l'attribut `is_published`
- Redéfinissez la méthode `publish(value)` sur `ComicBook`, qui fait la même chose que dans `Book` (fonction `super()`), puis affiche `"Comic book mis à jour"`
- Testez les méthodes sur deux objets, de type `Book` et `ComicBook`.
== Exercice B1 (staticmethod)
## Exercice B1 (staticmethod)
- Écrivez une méthode statique dont la syntaxe est correcte.

View File

@ -1,34 +0,0 @@
= Exercices sur les fichiers texte
== Exercice 1
- Écrivez un fichier texte, dans lequel vous écrivez les lignes suivantes :
* `Il est un feu discret qui se cache en ton âme,`
* `Mais qui tremble et palpite à tous les coups du sort :`
* `C'est l'espoir ! Défends bien cette petite flamme ;`
* `Si la flamme s'éteint, ami, ton cœur est mort.`
- Pensez bien aux `"\n"` pour passer à la ligne !
== Exercice 2
- Ouvrez à nouveau votre fichier texte, mais en lecture
- Pour relire et afficher les lignes du fichier une à une
- Utilisez une boucle `while` :
* `line = <lire une ligne>`
* `while line != "":`
* `<afficher la ligne>`
* `<lire la ligne suivante>`
ou
- Variante de boucle avec la syntaxe de `Python 3.8`
* `while line := <lire une ligne>:`
* <afficher la ligne>
== Exercice 3 (ouverture avec `with`)
- Remplacez le code des deux exercices précédents pour utiliser un gestionnaire de contexte.

View File

@ -0,0 +1,30 @@
# Exercices sur les fichiers texte
## Exercice 1
- Écrivez un fichier texte, dans lequel vous écrivez les lignes suivantes :
- `Il est un feu discret qui se cache en ton âme,`
- `Mais qui tremble et palpite à tous les coups du sort :`
- `C'est l'espoir ! Défends bien cette petite flamme ;`
- `Si la flamme s'éteint, ami, ton cœur est mort.`
- Pensez bien aux `"\n"` pour passer à la ligne !
## Exercice 2
- Ouvrez à nouveau votre fichier texte, mais en lecture
- Pour relire et afficher les lignes du fichier une à une
- Utilisez une boucle `while` :
- `line = <lire une ligne>`
- `while line != "":`
- `<afficher la ligne>`
- `<lire la ligne suivante>`
ou
- Variante de boucle avec la syntaxe de `Python 3.8`
- `while line := <lire une ligne>:`
- <afficher la ligne>
## Exercice 3 (ouverture avec `with`)
- Remplacez le code des deux exercices précédents pour utiliser un gestionnaire de contexte.

View File

@ -1,39 +1,35 @@
= Exercices sur les fichiers texte JSON, CSV etc.
# Exercices sur les fichiers texte JSON, CSV etc.
== Exercice 1 (JSON)
## Exercice 1 (JSON)
- Convertissez le contenu du fichier JSON proposé sur le dépôt Git en structure Python
- La donnée lue depuis le fichier JSON contient un dictionnaire
* Quelle notation d'accès aux données du dictionnaire allez-vous utiliser pour récupérer la valeur suivante ?
* `"New York Bulls"`
- Quelle notation d'accès aux données du dictionnaire allez-vous utiliser pour récupérer la valeur suivante ?
- `"New York Bulls"`
- Indice : `data["quiz"]["sport"]...`
== Exercice 2 (JSON, écriture)
## Exercice 2 (JSON, écriture)
- Créez une structure Python étant une liste ou un dictionnaire
- Écrivez un fichier JSON valide depuis cette structure
- Le fichier doit être indenté (`json.dumps(data, indent=4)`)
== Exercice 3 (CSV)
## Exercice 3 (CSV)
- Ouvrez à nouveau votre fichier texte, mais en lecture
- Pour relire et afficher les lignes du fichier une à une
- Utilisez une boucle `while` :
* `line = <lire une ligne>`
* `while line != "":`
* `<afficher la ligne>`
* `<lire la ligne suivante>`
- `line = <lire une ligne>`
- `while line != "":`
- `<afficher la ligne>`
- `<lire la ligne suivante>`
ou
- Variante de boucle avec la syntaxe de `Python 3.8`
* `while line := <lire une ligne>:`
* <afficher la ligne>
- `while line := <lire une ligne>:`
- <afficher la ligne>
== Exercice 3 (ouverture avec `with`)
## Exercice 3 (ouverture avec `with`)
- Remplacez le code des deux exercices précédents pour utiliser un gestionnaire de contexte.

View File

@ -1,81 +0,0 @@
= Atelier sur la première partie
L'atelier suivant vous fait construire une structure où vous pouvez :
- créer des bibliothèques
- créer des livres
- créer des utilisateurs
Et avec ces objets, vous pouvez :
- ajouter des livres à vos bibliothèques
- emprunter et rendre des livres
- voir les informations sur les emprunts
- voir les informations sur les livres présents dans une bibliothèque
- etc.
L'exercice, qui peut vous prendre un peu de temps, vous permet de :
- manipuler des objets, listes, dictionnaires
- utiliser des f-strings pour afficher des informations en console
- utiliser des méthodes et même découvrir la méthode `_ _ str _ _` (faites une recherche Google)
- structurer un peu votre code (concept limité par la taille de l'exercice)
== Organisation
- un package `entities` contenant
* un module `library` pour y mettre la classe `Library`
* un module `book` pour y mettre la classe `Book`
* un module `user` pour y mettre la classe `User`
- un module `application` vous servant de point d'entrée
l'organisation est simple, ceci dû à la taille du projet. Des projets grandissants impliquent souvent des réorganisations.
== Des bibliothèques
. Créez une classe `Library`
. Avec des attributs
- `name` (`None`)
- `is_open` (`True`)
- `books` (`None`)
. Avec des méthodes
. `_ _ init _ _(self, name=None, is_open=True)` qui initialise les attributs du nouvel objet.
. `open(self, value=True)` pour changer l'état d'ouverture :
- Ne fait rien si `value` a déjà la même valeur que `self.is_open`
. `register_book(self, book)` qui ajoute un livre à l'attribut `.books` (le transforme d'abord en liste s'il est à `None`, puis ajoute le livre)
. `show_books()` qui affiche la liste des livres enregistrés
. `_ _ str _ _(self)` qui renvoie le texte affiché si on fait `print()` sur l'objet
. `get_book_avg_prices()` qui renvoie le prix moyen des livres de la bibliothèque
== Des livres
. Créez une classe `Book`
. Avec des attributs
- `title` (`None`)
- `author` (`None`)
- `is_borrowed` (`False`) : le livre est-il emprunté
- `borrower` (`None`) : personne qui a emprunté
- `history` (`None`) : liste des opérations d'emprunt du livre
- `price` (`0`) : prix de base
. Avec des méthodes
. `_ _ init _ _(self, ...)` pour initialiser les attributs `title`, `price` et `author`
. `borrow(self, user)` qui marque le livre comme emprunté, et modifie `borrower` :
- Ne fait rien si le livre est déjà marqué emprunté, sinon :
- `is_borrowed` devient `True`
- `borrower` prend la référence de l'objet de la classe `User`
- `history` *devient* une liste à laquelle on ajoute le dictionnaire `{"user": user, "when": datetime.now()}`
. `return_borrow(self)` qui marque le livre comme rendu (non emprunté)
- Ne fait rien si le livre est déjà marqué comme non emprunté, sinon :
- `borrower` prend la valeur `None`
. `show_history(self)` qui affiche l'historique formaté des emprunts
. `show_status(self)` qui affiche le statut du livre : titre, emprunté etc.
== Des utilisateurs
. Créez une classe `User`
. Avec des attributs
- `name` (`None`)
. Avec des méthodes
. `_ _ init _ _(self, name=None)` qui initialise l'attribut de l'objet
. `_ _ str _ _ (self)` qui renvoie une chaîne `f"Utilisateur : {self.name}"`

View File

@ -0,0 +1,80 @@
# Atelier sur la première partie
L'atelier suivant vous fait construire une structure où vous pouvez :
- créer des bibliothèques
- créer des livres
- créer des utilisateurs
Et avec ces objets, vous pouvez :
- ajouter des livres à vos bibliothèques
- emprunter et rendre des livres
- voir les informations sur les emprunts
- voir les informations sur les livres présents dans une bibliothèque
- etc.
L'exercice, qui peut vous prendre un peu de temps, vous permet de :
- manipuler des objets, listes, dictionnaires
- utiliser des f-strings pour afficher des informations en console
- utiliser des méthodes et même découvrir la méthode `__str__` (faites une recherche Google)
- structurer un peu votre code (concept limité par la taille de l'exercice)
## Organisation
- un package `entities` contenant
- un module `library` pour y mettre la classe `Library`
- un module `book` pour y mettre la classe `Book`
- un module `user` pour y mettre la classe `User`
- un module `application` vous servant de point d'entrée
L'organisation est simple, ceci dû à la taille du projet. Des projets grandissants impliquent souvent des réorganisations.
## Des bibliothèques
1. Créez une classe `Library`
- Avec des attributs
- `name` (`None`)
- `is_open` (`True`)
- `books` (`None`)
- Avec des méthodes
- `__init__(self, name=None, is_open=True)` qui initialise les attributs du nouvel objet.
- `open(self, value=True)` pour changer l'état d'ouverture :
- Ne fait rien si `value` a déjà la même valeur que `self.is_open`
- `register_book(self, book)` qui ajoute un livre à l'attribut `.books` (le transforme d'abord en liste s'il est à `None`, puis ajoute le livre)
- `show_books()` qui affiche la liste des livres enregistrés
- `__str__(self)` qui renvoie le texte affiché si on fait `print()` sur l'objet
- `get_book_avg_prices()` qui renvoie le prix moyen des livres de la bibliothèque
## Des livres
1. Créez une classe `Book`
- Avec des attributs
- `title` (`None`)
- `author` (`None`)
- `is_borrowed` (`False`) : le livre est-il emprunté
- `borrower` (`None`) : personne qui a emprunté
- `history` (`None`) : liste des opérations d'emprunt du livre
- `price` (`0`) : prix de base
- Avec des méthodes
- `__init__(self, ...)` pour initialiser les attributs `title`, `price` et `author`
- `borrow(self, user)` qui marque le livre comme emprunté, et modifie `borrower` :
- Ne fait rien si le livre est déjà marqué emprunté, sinon :
- `is_borrowed` devient `True`
- `borrower` prend la référence de l'objet de la classe `User`
- `history` *devient* une liste à laquelle on ajoute le dictionnaire `{"user": user, "when": datetime.now()}`
- `return_borrow(self)` qui marque le livre comme rendu (non emprunté)
- Ne fait rien si le livre est déjà marqué comme non emprunté, sinon :
- `borrower` prend la valeur `None`
- `show_history(self)` qui affiche l'historique formaté des emprunts
- `show_status(self)` qui affiche le statut du livre : titre, emprunté etc.
## Des utilisateurs
1. Créez une classe `User`
- Avec des attributs
- `name` (`None`)
- Avec des méthodes
- `__init__(self, name=None)` qui initialise l'attribut de l'objet
- `__str__ (self)` qui renvoie une chaîne `f"Utilisateur : {self.name}"`