Initial commit
This commit is contained in:
32
training/exercices/02-language-basics/01-prints.asciidoc
Normal file
32
training/exercices/02-language-basics/01-prints.asciidoc
Normal file
@ -0,0 +1,32 @@
|
||||
= Exercices sur la fonction `print()`
|
||||
|
||||
== Exercice 1
|
||||
|
||||
Affichez dans la console le texte suivant :
|
||||
|
||||
- La rue Rostand,
|
||||
- `3 espaces` se trouve au
|
||||
- Feu à droite
|
||||
|
||||
== 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)`
|
||||
|
||||
Affichez, en imitant cette syntaxe, le texte suivant :
|
||||
|
||||
* 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)
|
||||
|
||||
== 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 :
|
||||
|
||||
```python
|
||||
# Ne sépare pas les éléments via un espace et passe deux fois
|
||||
# à la ligne à la fin du print.
|
||||
print("1", "2", "3", sep="", end="\n\n")
|
||||
```
|
70
training/exercices/02-language-basics/02-variables.asciidoc
Normal file
70
training/exercices/02-language-basics/02-variables.asciidoc
Normal file
@ -0,0 +1,70 @@
|
||||
= Variables
|
||||
|
||||
---
|
||||
|
||||
== 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
|
||||
- Affichez dans la console les valeurs de ces trois variables.
|
||||
|
||||
---
|
||||
|
||||
== Exercice 2
|
||||
|
||||
- Demandez à l'utilisateur de saisir du texte, et mettez-le dans une variable
|
||||
- Affichez le contenu de la variable.
|
||||
|
||||
*Fonctions nécessaires* : `variable = input("Texte d'invite:")`, `print()`
|
||||
|
||||
---
|
||||
|
||||
== 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`
|
||||
- Affichez leur contenu dans la console.
|
||||
|
||||
---
|
||||
|
||||
== 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)
|
||||
- Afficher le nombre de mètres restants dans cette valeur (ex. 210)
|
||||
|
||||
*Outils nécessaires* : opérateurs `//` (division entière), `%` (modulo)
|
||||
|
||||
Vous pouvez afficher tout cela sur une ligne avec un seul appel à la fonction `print()`, par exemple :
|
||||
|
||||
```python
|
||||
kilometers = 5
|
||||
meters = 450
|
||||
print(kilometers, "kilomètres et", meters, "mètres.")
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
== 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.
|
||||
|
||||
Vous devrez utiliser les mêmes outils que dans l'exercice précédent, mais il
|
||||
y a deux ordres de grandeur à prendre en compte !
|
||||
|
||||
---
|
||||
|
||||
== 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.
|
||||
|
||||
Sachant que la saisie récupérée est toujours une chaîne de caractères vous devez récupérer une version de la saisie qui est un nombre pour pouvoir faire des comparaisons intéressantes.
|
||||
|
||||
*Rappel* : pour récupérer un entier depuis une chaîne, utilisez `int(valeur)`
|
72
training/exercices/02-language-basics/03-conditions.asciidoc
Normal file
72
training/exercices/02-language-basics/03-conditions.asciidoc
Normal file
@ -0,0 +1,72 @@
|
||||
= Conditions
|
||||
|
||||
---
|
||||
|
||||
== 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
|
||||
- Retestez votre code en changeant la valeur du lancer
|
||||
|
||||
---
|
||||
|
||||
== 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"`.
|
||||
|
||||
(Les majuscules ne sont pas placées ici par hasard, conservez-les)
|
||||
|
||||
---
|
||||
|
||||
== Exercice 2B : `if…else`
|
||||
|
||||
- Assignez à une variable le texte `"Bonjour"`;
|
||||
- Affichez `"Bien le bonjour"` si votre variable est égale à `"Bonjour"`;
|
||||
- Sinon, (dans tous les autres cas) afficher `"Je ne comprends pas !"`.
|
||||
|
||||
---
|
||||
|
||||
== 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é"`;
|
||||
- Sinon, si cette valeur est d'au moins 7, afficher `"Haut"`;
|
||||
- Sinon, si cette valeur est d'au moins 4, afficher `"Standard"`;
|
||||
- Sinon, afficher `"Bas"`.
|
||||
|
||||
---
|
||||
|
||||
== 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"`
|
||||
- Sinon, afficher `"Valeurs incorrectes"`
|
||||
|
||||
---
|
||||
|
||||
== 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"`
|
||||
- Sinon, afficher `"Valeurs incorrectes"`
|
||||
|
||||
---
|
||||
|
||||
== 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é !"
|
||||
- Sinon, si `saisie` vaut "Arrêt" :
|
||||
* Si `is_on` est `True`, afficher "Extinction..."
|
||||
* Sinon, afficher "Déjà éteint !"
|
||||
|
||||
Exemple de rappel :
|
||||
|
||||
```python
|
||||
# Demander de saisir un texte et récupérer le résultat dans une variable
|
||||
saisie = input("Saisissez du texte :")
|
||||
```
|
@ -0,0 +1,6 @@
|
||||
= Exercices sur les blocs vides
|
||||
|
||||
== Exercice 1
|
||||
|
||||
- Écrivez un bloc `if` dont le code, lorsqu'il est exécuté, ne fait rien.
|
||||
- *Outils* : `pass`
|
17
training/exercices/02-language-basics/05-for-loop.asciidoc
Normal file
17
training/exercices/02-language-basics/05-for-loop.asciidoc
Normal file
@ -0,0 +1,17 @@
|
||||
= Exercices sur les boucles `for`
|
||||
|
||||
== Exercice 1
|
||||
|
||||
- Écrivez une boucle `for` sur les nombres de 0 à 9.
|
||||
- Affichez la valeur du nombre parcouru.
|
||||
|
||||
== 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
|
||||
|
||||
- É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`)
|
||||
- Dans cette sous-boucle, affichez sur la même ligne `item1` et `item2`.
|
22
training/exercices/02-language-basics/06-while-loop.asciidoc
Normal file
22
training/exercices/02-language-basics/06-while-loop.asciidoc
Normal file
@ -0,0 +1,22 @@
|
||||
= Exercices sur les boucles `while`
|
||||
|
||||
== 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
|
||||
|
||||
- Écrire une boucle `while` qui tourne indéfiniment (condition `True`, ou soyez créatif)
|
||||
|
||||
== 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
|
||||
|
||||
- É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.
|
60
training/exercices/02-language-basics/07-lists.asciidoc
Normal file
60
training/exercices/02-language-basics/07-lists.asciidoc
Normal file
@ -0,0 +1,60 @@
|
||||
= Exercices sur les listes
|
||||
|
||||
== Exercice 1
|
||||
|
||||
- Écrivez une liste contenant les nombres entiers pairs de 0 à 10 inclus
|
||||
- Assignez la longueur de la liste à une variable (`len()`)
|
||||
- Affichez le dernier élément de la liste (en utilisant la longueur)
|
||||
- Ajoutez un élément à la fin de la liste
|
||||
- Affichez le nouveau contenu de la liste
|
||||
|
||||
== 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)
|
||||
|
||||
- É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)
|
||||
|
||||
[source,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)
|
||||
|
||||
- É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é)
|
||||
|
||||
- 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
|
||||
|
||||
- É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`)
|
||||
|
||||
== Exercice A2
|
||||
|
||||
- Consultez la https://docs.python.org/3/tutorial/datastructures.html#more-on-lists[référence des fonctions de listes]
|
||||
- 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
|
42
training/exercices/02-language-basics/08-sets.asciidoc
Normal file
42
training/exercices/02-language-basics/08-sets.asciidoc
Normal file
@ -0,0 +1,42 @@
|
||||
= Exercices sur les ensembles
|
||||
|
||||
== Exercice 1
|
||||
|
||||
- Écrivez un `set` contenant 5 valeurs
|
||||
- Déclarez un second `set` contenant au moins 2 valeurs du premier set
|
||||
- Essayez d'ajouter une valeur déjà existante à un set
|
||||
- Affichez les valeurs communes aux deux sets (`intersection()`)
|
||||
- Affichez un set contenant toutes les valeurs des 2 sets (`union()`)
|
||||
|
||||
== 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
|
||||
|
||||
Al et Kim sont inscrits sur un réseau social. Al a les amis suivants :
|
||||
|
||||
- Josephine
|
||||
- Meghan
|
||||
- Amy
|
||||
- Bob
|
||||
|
||||
Kim a les amis suivants :
|
||||
|
||||
- Frank
|
||||
- Amy
|
||||
- Josephine
|
||||
- Susan
|
||||
|
||||
Quels sont leurs amis en commun ? Écrivez un code qui représente et résout cet énoncé.
|
||||
|
||||
== Exercice 4
|
||||
|
||||
Partant du tuple suivant :
|
||||
|
||||
`(1, 4, 6, 9, 1, 3, 6, 12, 2, 5, 7, 10, 3, 5, 2, 6, 4, 6, 1, 8, 5, 2, 3, 6)`
|
||||
|
||||
- Affichez le nombre de valeurs différentes présentes dans le tuple.
|
@ -0,0 +1,40 @@
|
||||
= Exercices sur les dictionnaires
|
||||
|
||||
== Exercice 1
|
||||
|
||||
- Écrivez un simple dictionnaire associant des noms à des âges :
|
||||
* Paul → 30
|
||||
* Karim → 22
|
||||
* Gina → 41
|
||||
* Anna → 25
|
||||
- Affichez l'âge de Gina
|
||||
- Ajoutez les associations suivantes :
|
||||
* Alina → 33
|
||||
* Victor → 55
|
||||
- Affichez le contenu du dictionnaire
|
||||
|
||||
== 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é
|
||||
|
||||
== Exercice 3 (parcours + `.items()`)
|
||||
|
||||
- Réutilisez votre dictionnaire
|
||||
- Utilisez une boucle `for` sur `.items()` avec deux variables :
|
||||
* Affichez clé et valeur associée
|
||||
|
||||
== 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)}`
|
||||
- À 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
|
||||
|
||||
== 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()`).
|
48
training/exercices/02-language-basics/10-strings.asciidoc
Normal file
48
training/exercices/02-language-basics/10-strings.asciidoc
Normal file
@ -0,0 +1,48 @@
|
||||
= Exercices sur les manipulations de chaînes
|
||||
|
||||
== Exercice 1
|
||||
|
||||
- Consultez https://docs.python.org/3/library/stdtypes.html#string-methods[les méthodes disponibles sur les chaînes]
|
||||
- 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)
|
||||
|
||||
- Partant de cette liste de mots :
|
||||
|
||||
[source,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)
|
||||
|
||||
- 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)
|
||||
|
||||
- Déclarez plusieurs variables :
|
||||
* `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]*.
|
||||
|
||||
== Exercice A1 (`join` + conversion)
|
||||
|
||||
Partant de cette liste :
|
||||
|
||||
[source, 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)`).
|
37
training/exercices/03-exceptions/01-exceptions.asciidoc
Normal file
37
training/exercices/03-exceptions/01-exceptions.asciidoc
Normal file
@ -0,0 +1,37 @@
|
||||
= Exercices sur les exceptions
|
||||
|
||||
== 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
|
||||
|
||||
- Générez un nombre entier aléatoire entre 0 et 1 :
|
||||
|
||||
[source,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`)
|
||||
- É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)
|
||||
|
||||
- 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
|
||||
|
||||
- Écrivez un bloc `try/except`
|
||||
- Provoquez une erreur dans le bloc `try` (pas une erreur de syntaxe !)
|
||||
- Écrivez un bloc `except` qui ne gère pas la bonne erreur (ex. `IOError`)
|
||||
- Écrivez un bloc `finally` qui affiche du texte
|
||||
- Exécutez votre code et voyez que le bloc `finally` est bien honoré.
|
37
training/exercices/04-functions/01-base.asciidoc
Normal file
37
training/exercices/04-functions/01-base.asciidoc
Normal file
@ -0,0 +1,37 @@
|
||||
= Exercices sur les fonctions
|
||||
|
||||
== 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
|
||||
|
||||
- Écrivez une fonction nommée `return_constant` qui ne prend pas d'argument
|
||||
- Cette fonction affiche dans la console "99"
|
||||
- Cette fonction renvoie à l'appelant la valeur `99`
|
||||
- Appeler la fonction et assigner sa valeur de retour à une variable
|
||||
- Afficher le contenu de la variable
|
||||
|
||||
== 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`
|
||||
|
||||
== 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`
|
||||
- Variez les appels en passant les arguments positionnellement, par nom, etc.
|
19
training/exercices/04-functions/02-advanced-args.asciidoc
Normal file
19
training/exercices/04-functions/02-advanced-args.asciidoc
Normal file
@ -0,0 +1,19 @@
|
||||
= Exercices sur les fonctions
|
||||
|
||||
== 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"`
|
||||
|
||||
== 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}€"`
|
||||
- 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`
|
30
training/exercices/06-extra-types/01-datetime.asciidoc
Normal file
30
training/exercices/06-extra-types/01-datetime.asciidoc
Normal file
@ -0,0 +1,30 @@
|
||||
= Exercices sur les dates et heures
|
||||
|
||||
== 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
|
||||
- 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
|
||||
|
||||
- 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)
|
||||
|
||||
- Conservez les variables du dessus
|
||||
- Affichez `fifteen_ago` sous la forme suivante :
|
||||
* `"03 mars 2006, 16:10:14"`
|
||||
- (utilisez `fifteen_ago.strftime(format 8563.3.3.)`)
|
||||
|
||||
== Exercice 4 (conversion depuis chaîne)
|
||||
|
||||
- Convertissez la chaîne `"31-01-2019 16:48"` vers un objet `datetime`
|
||||
- (utilisez `datetime.strptime(chaine, format)`)
|
57
training/exercices/07-objects/01-base-class.asciidoc
Normal file
57
training/exercices/07-objects/01-base-class.asciidoc
Normal file
@ -0,0 +1,57 @@
|
||||
= Exercices sur les classes (basique)
|
||||
|
||||
== Exercice 1
|
||||
|
||||
(Thème *bibliothèque*)
|
||||
|
||||
- Déclarez une classe `Library`
|
||||
- Avec un attribut `name` (défaut `None`)
|
||||
- Avec un attribut `address` (défaut `None`)
|
||||
- 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
|
||||
|
||||
- Déclarez une classe `Book`
|
||||
- Avec des attributs `title` (`None`), `author` (`None`), `year` (`None`)
|
||||
- Instanciez un nouvel objet de cette classe
|
||||
- Modifiez les attributs `title` et `author`
|
||||
- Affichez la valeur de ces attributs
|
||||
|
||||
== 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"`)
|
||||
|
||||
== 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`.
|
||||
- Instanciez deux nouveaux objets de cette classe
|
||||
- Exécutez la méthode `show_status()` sur ces deux objets
|
||||
|
||||
== 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)`
|
||||
|
||||
== 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)
|
||||
|
||||
- Écrivez une méthode statique dont la syntaxe est correcte.
|
34
training/exercices/08-text-files/01-text.asciidoc
Normal file
34
training/exercices/08-text-files/01-text.asciidoc
Normal file
@ -0,0 +1,34 @@
|
||||
= 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.
|
||||
|
||||
|
||||
|
||||
|
39
training/exercices/08-text-files/02-text-formats.asciidoc
Normal file
39
training/exercices/08-text-files/02-text-formats.asciidoc
Normal file
@ -0,0 +1,39 @@
|
||||
= Exercices sur les fichiers texte JSON, CSV etc.
|
||||
|
||||
== 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"`
|
||||
- Indice : `data["quiz"]["sport"]...`
|
||||
|
||||
== 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)
|
||||
|
||||
- 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.
|
||||
|
||||
|
||||
|
||||
|
100
training/exercices/08-text-files/demo-file.csv
Normal file
100
training/exercices/08-text-files/demo-file.csv
Normal file
@ -0,0 +1,100 @@
|
||||
1,"Eldon Base for stackable storage shelf, platinum",Muhammed MacIntyre,3,-213.25,38.94,35,Nunavut,Storage & Organization,0.8
|
||||
2,"1.7 Cubic Foot Compact ""Cube"" Office Refrigerators",Barry French,293,457.81,208.16,68.02,Nunavut,Appliances,0.58
|
||||
3,"Cardinal Slant-D<> Ring Binder, Heavy Gauge Vinyl",Barry French,293,46.71,8.69,2.99,Nunavut,Binders and Binder Accessories,0.39
|
||||
4,R380,Clay Rozendal,483,1198.97,195.99,3.99,Nunavut,Telephones and Communication,0.58
|
||||
5,Holmes HEPA Air Purifier,Carlos Soltero,515,30.94,21.78,5.94,Nunavut,Appliances,0.5
|
||||
6,G.E. Longer-Life Indoor Recessed Floodlight Bulbs,Carlos Soltero,515,4.43,6.64,4.95,Nunavut,Office Furnishings,0.37
|
||||
7,"Angle-D Binders with Locking Rings, Label Holders",Carl Jackson,613,-54.04,7.3,7.72,Nunavut,Binders and Binder Accessories,0.38
|
||||
8,"SAFCO Mobile Desk Side File, Wire Frame",Carl Jackson,613,127.70,42.76,6.22,Nunavut,Storage & Organization,
|
||||
9,"SAFCO Commercial Wire Shelving, Black",Monica Federle,643,-695.26,138.14,35,Nunavut,Storage & Organization,
|
||||
10,Xerox 198,Dorothy Badders,678,-226.36,4.98,8.33,Nunavut,Paper,0.38
|
||||
11,Xerox 1980,Neola Schneider,807,-166.85,4.28,6.18,Nunavut,Paper,0.4
|
||||
12,Advantus Map Pennant Flags and Round Head Tacks,Neola Schneider,807,-14.33,3.95,2,Nunavut,Rubber Bands,0.53
|
||||
13,Holmes HEPA Air Purifier,Carlos Daly,868,134.72,21.78,5.94,Nunavut,Appliances,0.5
|
||||
14,"DS/HD IBM Formatted Diskettes, 200/Pack - Staples",Carlos Daly,868,114.46,47.98,3.61,Nunavut,Computer Peripherals,0.71
|
||||
15,"Wilson Jones 1"" Hanging DublLock<63> Ring Binders",Claudia Miner,933,-4.72,5.28,2.99,Nunavut,Binders and Binder Accessories,0.37
|
||||
16,Ultra Commercial Grade Dual Valve Door Closer,Neola Schneider,995,782.91,39.89,3.04,Nunavut,Office Furnishings,0.53
|
||||
17,"#10-4 1/8"" x 9 1/2"" Premium Diagonal Seam Envelopes",Allen Rosenblatt,998,93.80,15.74,1.39,Nunavut,Envelopes,0.4
|
||||
18,Hon 4-Shelf Metal Bookcases,Sylvia Foulston,1154,440.72,100.98,26.22,Nunavut,Bookcases,0.6
|
||||
19,"Lesro Sheffield Collection Coffee Table, End Table, Center Table, Corner Table",Sylvia Foulston,1154,-481.04,71.37,69,Nunavut,Tables,0.68
|
||||
20,g520,Jim Radford,1344,-11.68,65.99,5.26,Nunavut,Telephones and Communication,0.59
|
||||
21,LX 788,Jim Radford,1344,313.58,155.99,8.99,Nunavut,Telephones and Communication,0.58
|
||||
22,Avery 52,Carlos Soltero,1412,26.92,3.69,0.5,Nunavut,Labels,0.38
|
||||
23,Plymouth Boxed Rubber Bands by Plymouth,Carlos Soltero,1412,-5.77,4.71,0.7,Nunavut,Rubber Bands,0.8
|
||||
24,"GBC Pre-Punched Binding Paper, Plastic, White, 8-1/2"" x 11""",Carl Ludwig,1539,-172.88,15.99,13.18,Nunavut,Binders and Binder Accessories,0.37
|
||||
25,"Maxell 3.5"" DS/HD IBM-Formatted Diskettes, 10/Pack",Carl Ludwig,1539,-144.55,4.89,4.93,Nunavut,Computer Peripherals,0.66
|
||||
26,Newell 335,Don Miller,1540,5.76,2.88,0.7,Nunavut,Pens & Art Supplies,0.56
|
||||
27,SANFORD Liquid Accent<6E> Tank-Style Highlighters,Annie Cyprus,1702,4.90,2.84,0.93,Nunavut,Pens & Art Supplies,0.54
|
||||
28,Canon PC940 Copier,Carl Ludwig,1761,-547.61,449.99,49,Nunavut,Copiers and Fax,0.38
|
||||
29,"Tenex Personal Project File with Scoop Front Design, Black",Carlos Soltero,1792,-5.45,13.48,4.51,Nunavut,Storage & Organization,0.59
|
||||
30,Col-Erase<73> Pencils with Erasers,Grant Carroll,2275,41.67,6.08,1.17,Nunavut,Pens & Art Supplies,0.56
|
||||
31,"Imation 3.5"" DS/HD IBM Formatted Diskettes, 10/Pack",Don Miller,2277,-46.03,5.98,4.38,Nunavut,Computer Peripherals,0.75
|
||||
32,"White Dual Perf Computer Printout Paper, 2700 Sheets, 1 Part, Heavyweight, 20 lbs., 14 7/8 x 11",Don Miller,2277,33.67,40.99,19.99,Nunavut,Paper,0.36
|
||||
33,Self-Adhesive Address Labels for Typewriters by Universal,Alan Barnes,2532,140.01,7.31,0.49,Nunavut,Labels,0.38
|
||||
34,Accessory37,Alan Barnes,2532,-78.96,20.99,2.5,Nunavut,Telephones and Communication,0.81
|
||||
35,Fuji 5.2GB DVD-RAM,Jack Garza,2631,252.66,40.96,1.99,Nunavut,Computer Peripherals,0.55
|
||||
36,Bevis Steel Folding Chairs,Julia West,2757,-1766.01,95.95,74.35,Nunavut,Chairs & Chairmats,0.57
|
||||
37,Avery Binder Labels,Eugene Barchas,2791,-236.27,3.89,7.01,Nunavut,Binders and Binder Accessories,0.37
|
||||
38,Hon Every-Day<61> Chair Series Swivel Task Chairs,Eugene Barchas,2791,80.44,120.98,30,Nunavut,Chairs & Chairmats,0.64
|
||||
39,"IBM Multi-Purpose Copy Paper, 8 1/2 x 11"", Case",Eugene Barchas,2791,118.94,30.98,5.76,Nunavut,Paper,0.4
|
||||
40,Global Troy<6F> Executive Leather Low-Back Tilter,Edward Hooks,2976,3424.22,500.98,26,Nunavut,Chairs & Chairmats,0.6
|
||||
41,XtraLife<EFBFBD> ClearVue<75> Slant-D<> Ring Binders by Cardinal,Brad Eason,3232,-11.83,7.84,4.71,Nunavut,Binders and Binder Accessories,0.35
|
||||
42,Computer Printout Paper with Letter-Trim Perforations,Nicole Hansen,3524,52.35,18.97,9.03,Nunavut,Paper,0.37
|
||||
43,6160,Dorothy Wardle,3908,-180.20,115.99,2.5,Nunavut,Telephones and Communication,0.57
|
||||
44,Avery 49,Aaron Bergman,4132,1.32,2.88,0.5,Nunavut,Labels,0.36
|
||||
45,Hoover Portapower<65> Portable Vacuum,Jim Radford,4612,-375.64,4.48,49,Nunavut,Appliances,0.6
|
||||
46,Timeport L7089,Annie Cyprus,4676,-104.25,125.99,7.69,Nunavut,Telephones and Communication,0.58
|
||||
47,Avery 510,Annie Cyprus,4676,85.96,3.75,0.5,Nunavut,Labels,0.37
|
||||
48,Xerox 1881,Annie Cyprus,4676,-8.38,12.28,6.47,Nunavut,Paper,0.38
|
||||
49,LX 788,Annie Cyprus,4676,1115.69,155.99,8.99,Nunavut,Telephones and Communication,0.58
|
||||
50,"Cardinal Slant-D<> Ring Binder, Heavy Gauge Vinyl",Annie Cyprus,5284,-3.05,8.69,2.99,Nunavut,Binders and Binder Accessories,0.39
|
||||
51,"Memorex 4.7GB DVD-RAM, 3/Pack",Clay Rozendal,5316,514.07,31.78,1.99,Nunavut,Computer Peripherals,0.42
|
||||
52,Unpadded Memo Slips,Don Jones,5409,-7.04,3.98,2.97,Nunavut,Paper,0.35
|
||||
53,"Adams Telephone Message Book W/Dividers/Space For Phone Numbers, 5 1/4""X8 1/2"", 300/Messages",Beth Thompson,5506,4.41,5.88,3.04,Nunavut,Paper,0.36
|
||||
54,"Eldon Expressions<6E> Desk Accessory, Wood Pencil Holder, Oak",Frank Price,5569,-0.06,9.65,6.22,Nunavut,Office Furnishings,0.55
|
||||
55,Bell Sonecor JB700 Caller ID,Michelle Lonsdale,5607,-50.33,7.99,5.03,Nunavut,Telephones and Communication,0.6
|
||||
56,Avery Arch Ring Binders,Ann Chong,5894,87.68,58.1,1.49,Nunavut,Binders and Binder Accessories,0.38
|
||||
57,APC 7 Outlet Network SurgeArrest Surge Protector,Ann Chong,5894,-68.22,80.48,4.5,Nunavut,Appliances,0.55
|
||||
58,"Deflect-o RollaMat Studded, Beveled Mat for Medium Pile Carpeting",Joy Bell,5925,-354.90,92.23,39.61,Nunavut,Office Furnishings,0.67
|
||||
59,Accessory4,Joy Bell,5925,-267.01,85.99,0.99,Nunavut,Telephones and Communication,0.85
|
||||
60,Personal Creations<6E> Ink Jet Cards and Labels,Skye Norling,6016,3.63,11.48,5.43,Nunavut,Paper,0.36
|
||||
61,High Speed Automatic Electric Letter Opener,Barry Weirich,6116,-1759.58,1637.53,24.49,Nunavut,"Scissors, Rulers and Trimmers",0.81
|
||||
62,Xerox 1966,Grant Carroll,6182,-116.79,6.48,6.65,Nunavut,Paper,0.36
|
||||
63,Xerox 213,Grant Carroll,6182,-67.28,6.48,7.86,Nunavut,Paper,0.37
|
||||
64,"Boston Electric Pencil Sharpener, Model 1818, Charcoal Black",Adrian Hane,6535,-19.33,28.15,8.99,Nunavut,Pens & Art Supplies,0.57
|
||||
65,Hammermill CopyPlus Copy Paper (20Lb. and 84 Bright),Skye Norling,6884,-61.21,4.98,4.75,Nunavut,Paper,0.36
|
||||
66,"Telephone Message Books with Fax/Mobile Section, 5 1/2"" x 3 3/16""",Skye Norling,6884,119.09,6.35,1.02,Nunavut,Paper,0.39
|
||||
67,Crate-A-Files<65>,Andrew Gjertsen,6916,-141.27,10.9,7.46,Nunavut,Storage & Organization,0.59
|
||||
68,"Angle-D Binders with Locking Rings, Label Holders",Ralph Knight,6980,-77.28,7.3,7.72,Nunavut,Binders and Binder Accessories,0.38
|
||||
69,"80 Minute CD-R Spindle, 100/Pack - Staples",Dorothy Wardle,6982,407.44,39.48,1.99,Nunavut,Computer Peripherals,0.54
|
||||
70,"Bush Westfield Collection Bookcases, Dark Cherry Finish, Fully Assembled",Dorothy Wardle,6982,-338.27,100.98,57.38,Nunavut,Bookcases,0.78
|
||||
71,12-1/2 Diameter Round Wall Clock,Dorothy Wardle,6982,52.56,19.98,10.49,Nunavut,Office Furnishings,0.49
|
||||
72,SAFCO Arco Folding Chair,Grant Carroll,7110,1902.24,276.2,24.49,Nunavut,Chairs & Chairmats,
|
||||
73,"#10 White Business Envelopes,4 1/8 x 9 1/2",Barry Weirich,7430,353.20,15.67,1.39,Nunavut,Envelopes,0.38
|
||||
74,3M Office Air Cleaner,Beth Paige,7906,271.78,25.98,5.37,Nunavut,Appliances,0.5
|
||||
75,"Global Leather and Oak Executive Chair, Black",Sylvia Foulston,8391,-268.36,300.98,64.73,Nunavut,Chairs & Chairmats,0.56
|
||||
76,Xerox 1936,Nicole Hansen,8419,70.39,19.98,5.97,Nunavut,Paper,0.38
|
||||
77,Xerox 214,Nicole Hansen,8419,-86.62,6.48,7.03,Nunavut,Paper,0.37
|
||||
78,Carina Double Wide Media Storage Towers in Natural & Black,Nicole Hansen,8833,-846.73,80.98,35,Nunavut,Storage & Organization,0.81
|
||||
79,Staples<EFBFBD> General Use 3-Ring Binders,Beth Paige,8995,8.05,1.88,1.49,Nunavut,Binders and Binder Accessories,0.37
|
||||
80,Xerox 1904,Beth Paige,8995,-78.02,6.48,5.86,Northwest Territories,Paper,0.36
|
||||
81,Luxo Professional Combination Clamp-On Lamps,Beth Paige,8995,737.94,102.3,21.26,Northwest Territories,Office Furnishings,0.59
|
||||
82,Xerox 217,Beth Paige,8995,-191.28,6.48,8.19,Northwest Territories,Paper,0.37
|
||||
83,Revere Boxed Rubber Bands by Revere,Beth Paige,8995,-21.49,1.89,0.76,Northwest Territories,Rubber Bands,0.83
|
||||
84,"Acco Smartsocket<65> Table Surge Protector, 6 Color-Coded Adapter Outlets",Sylvia Foulston,9126,884.08,62.05,3.99,Northwest Territories,Appliances,0.55
|
||||
85,"Tennsco Snap-Together Open Shelving Units, Starter Sets and Add-On Units",Bryan Davis,9127,-329.49,279.48,35,Northwest Territories,Storage & Organization,0.8
|
||||
86,Hon 4070 Series Pagoda<64> Round Back Stacking Chairs,Joy Bell,9509,2825.15,320.98,58.95,Northwest Territories,Chairs & Chairmats,0.57
|
||||
87,Xerox 1887,Joy Bell,9509,2.13,18.97,5.21,Northwest Territories,Paper,0.37
|
||||
88,Xerox 1891,Joy Bell,9509,707.15,48.91,5.81,Northwest Territories,Paper,0.38
|
||||
89,Avery 506,Alan Barnes,9763,75.13,4.13,0.5,Northwest Territories,Labels,0.39
|
||||
90,"Bush Heritage Pine Collection 5-Shelf Bookcase, Albany Pine Finish, *Special Order",Grant Carroll,9927,-270.63,140.98,53.48,Northwest Territories,Bookcases,0.65
|
||||
91,"Lifetime Advantage<67> Folding Chairs, 4/Carton",Grant Carroll,9927,3387.35,218.08,18.06,Northwest Territories,Chairs & Chairmats,0.57
|
||||
92,Microsoft Natural Multimedia Keyboard,Grant Carroll,9927,-82.16,50.98,6.5,Northwest Territories,Computer Peripherals,0.73
|
||||
93,"Staples Wirebound Steno Books, 6"" x 9"", 12/Pack",Delfina Latchford,10022,-3.88,10.14,2.27,Northwest Territories,Paper,0.36
|
||||
94,"GBC Pre-Punched Binding Paper, Plastic, White, 8-1/2"" x 11""",Don Jones,10437,-191.22,15.99,13.18,Northwest Territories,Binders and Binder Accessories,0.37
|
||||
95,Bevis Boat-Shaped Conference Table,Doug Bickford,10499,31.21,262.11,62.74,Northwest Territories,Tables,0.75
|
||||
96,"Linden<EFBFBD> 12"" Wall Clock With Oak Frame",Doug Bickford,10535,-44.14,33.98,19.99,Northwest Territories,Office Furnishings,0.55
|
||||
97,Newell 326,Doug Bickford,10535,-0.79,1.76,0.7,Northwest Territories,Pens & Art Supplies,0.56
|
||||
98,Prismacolor Color Pencil Set,Jamie Kunitz,10789,76.42,19.84,4.1,Northwest Territories,Pens & Art Supplies,0.44
|
||||
99,Xerox Blank Computer Paper,Anthony Johnson,10791,93.36,19.98,5.77,Northwest Territories,Paper,0.38
|
||||
100,600 Series Flip,Ralph Knight,10945,4.22,95.99,8.99,Northwest Territories,Telephones and Communication,0.57
|
|
38
training/exercices/08-text-files/demo-file.json
Normal file
38
training/exercices/08-text-files/demo-file.json
Normal file
@ -0,0 +1,38 @@
|
||||
{
|
||||
"quiz": {
|
||||
"sport": {
|
||||
"q1": {
|
||||
"question": "Which one is correct team name in NBA?",
|
||||
"options": [
|
||||
"New York Bulls",
|
||||
"Los Angeles Kings",
|
||||
"Golden State Warriros",
|
||||
"Huston Rocket"
|
||||
],
|
||||
"answer": "Huston Rocket"
|
||||
}
|
||||
},
|
||||
"maths": {
|
||||
"q1": {
|
||||
"question": "5 + 7 = ?",
|
||||
"options": [
|
||||
"10",
|
||||
"11",
|
||||
"12",
|
||||
"13"
|
||||
],
|
||||
"answer": "12"
|
||||
},
|
||||
"q2": {
|
||||
"question": "12 - 8 = ?",
|
||||
"options": [
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"4"
|
||||
],
|
||||
"answer": "4"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
81
training/exercices/extra-initiation/library.asciidoc
Normal file
81
training/exercices/extra-initiation/library.asciidoc
Normal file
@ -0,0 +1,81 @@
|
||||
= 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}"`
|
Reference in New Issue
Block a user