| @@ -0,0 +1,113 @@ | |||
| Prinipes fondamentaux | |||
| ===================== | |||
| Définition | |||
| ---------- | |||
| Un dictionaire est une *association* entre des clés et des valeurs. | |||
| * Les clés sont uniques | |||
| * Les valeurs sont arbitraires | |||
| Création de dictionnaires | |||
| ------------------------- | |||
| Les dictionaires sont entourés par des accolades: ``{``, ``}`` :: | |||
| dictionaire_vide = {} | |||
| Ensuite, chaque paire de clé/valeur est séparée par des virgules ``,`` | |||
| avec ``:`` ente la clé et la valer :: | |||
| une_clé_une_valeur = {"a": 42} | |||
| deux_clés_deux_valeurs = {"a": 42, "b": 53} | |||
| Accès aux valeurs | |||
| ------------------ | |||
| Avec ``[]``, comme pour les listes, mais avec une *clé* à la place d'un *index*:: | |||
| scores = {"john": 10, "bob": 42} | |||
| print(scores["john"]) | |||
| # affiche: 10 | |||
| print(scores["bob"]) | |||
| # affiche: 42 | |||
| print(scores["charlie"]) | |||
| # erreur: KeyError | |||
| Modifier la valeur d'une clé | |||
| ----------------------------- | |||
| Comme pour les listes, avec une assignation:: | |||
| scores = {"john": 10, "bob": 42} | |||
| scores["john"] = 20 | |||
| print(scores) | |||
| # affiche: {"john": 20, "bob": 42} | |||
| Créer une nouvelle clé | |||
| ----------------------- | |||
| Même mécanisme que pour la modification des clés existantes:: | |||
| scores = {"john": 10, "bob": 42} | |||
| scores["charlie"] = 30 | |||
| print(scores) | |||
| # affiche: {"john": 20, "bob": 42, "charlie": 30} | |||
| *rappel*: ceci ne fonctionne pas avec les listes: on ne peut | |||
| pas "créer" de nouveaux éléments dans la liste juste | |||
| avec un index:: | |||
| ma_liste = ["a", "b"] | |||
| ma_liste[1] = "c" | |||
| print(ma_liste) | |||
| # affiche: ["a", "c"] | |||
| ma_liste[3] = "d" | |||
| # erreur: IndexError | |||
| del | |||
| --- | |||
| Détruire une clé | |||
| +++++++++++++++++ | |||
| Avec ``del`` - un nouveau mot-clé:: | |||
| scores = {"john": 10, "bob": 42} | |||
| del scores["bob"] | |||
| print(scores) | |||
| # affiche: {"john": 10} | |||
| Détruire un élément d'une liste | |||
| ++++++++++++++++++++++++++++++++ | |||
| Aussi avec ``del``:: | |||
| fruits = ["pomme", "banane", "poire"] | |||
| del fruits[1] | |||
| print(fruits) | |||
| # affiche: ["pomme", "poire"] | |||
| Détruire une variable | |||
| +++++++++++++++++++++ | |||
| Encore et toujours ``del``:: | |||
| mon_entier = 42 | |||
| mon_entier += 3 | |||
| print(mon_entier) | |||
| # affiche: 45 | |||
| del mon_entier | |||
| mon_entier += 1 | |||
| # erreur: NameError | |||
| @@ -0,0 +1,21 @@ | |||
| Itération et dictionaires | |||
| ========================== | |||
| Itérer sur les clés | |||
| ------------------- | |||
| Avec ``for ... in ...``, comme pour les listes:: | |||
| scores = {"john": 10, "bob": 42} | |||
| for nom in scores: | |||
| # on assigne la valeur "john" à la variable `nom`, puis "bob" | |||
| score_associé_au_nom = scores[nom] | |||
| # on assigne la valeur 10 puis la valeur 42 à la variable | |||
| # score_associé_au_nom | |||
| print(nom, score_associé_au_nom) | |||
| .. code-block:: | |||
| john 10 | |||
| bob 42 | |||
| @@ -0,0 +1,42 @@ | |||
| Dictionnaires et booléens | |||
| ========================= | |||
| Falsy et truthy | |||
| ---------------- | |||
| Les dictionaires vides sont falsy, et tous les autres dictionaires sont truthy:: | |||
| mon_dico = {"a": 1, "b": 2} | |||
| if mon_dico: | |||
| print("mon_dico est truthy") | |||
| else: | |||
| print("mon_dico est falsy") | |||
| # affiche: mon_dico est truthy | |||
| mon_autre_dico = {} | |||
| if mon_autre_dico: | |||
| print("mon_autre_dico n'est pas vide") | |||
| else: | |||
| print("mon_autre_dico est vide") | |||
| # affiche: mon_autre_dico est vide | |||
| Test d'appartenance | |||
| --------------------- | |||
| Avec ``in``, comme le listes:: | |||
| scores = {"john": 10, "bob": 42} | |||
| print("charlie" in scores) | |||
| # affiche: False | |||
| Comparaisons de dictionaires | |||
| ----------------------------- | |||
| Deux dictionaires sont considérés égaux s'ils ont les mêmes clés | |||
| et les mêmes valeurs. L'ordre n'importe pas:: | |||
| {"a":1, "b":2} == {"a":1, "b":2} # True | |||
| {"a":1, "b":2} == {"b":2, "a":1} # True | |||
| {"a":1, "b":2} == {"a":1, "b":3} # False | |||
| @@ -0,0 +1,48 @@ | |||
| Exercice | |||
| ======== | |||
| Consignes | |||
| --------- | |||
| Le but de l'exercice est d'implémenter un convertisseur d'unités de distance. | |||
| Il faut être capables de convertir des kilomètres, des miles, des yards, etc.. | |||
| Le programme doit s'utiliser comme suit: | |||
| .. code-block:: console | |||
| python convertisseur.py 1 km miles | |||
| Il y a trois "mots" après le nom du fichier, séparés par des espaces. | |||
| On appelle ces mots les "arguments" du programme. | |||
| Ici, ``1`` est la valeur de départ, ``km`` l'unité d'arrivée | |||
| et ``miles`` l'unité d'arrivée. | |||
| Squelette | |||
| ---------- | |||
| Vous pouvez partir du code suivant: | |||
| .. literalinclude:: /extraits/convertisseur.py | |||
| Vous noterez que le programme est capable de récupérer la valeur, | |||
| l'unité de départ et l'unité d'arrivée correctement, mais que le | |||
| résultat est toujours égal à 1.0. | |||
| Votre objectif est de finir l'implémentation pour réaliser effectivement | |||
| la conversion. | |||
| À noter : vous n'avez pas besoin de changer l'implémentation des | |||
| fonctions ``main()`` et ``convertir()``, et ne vous inquiétez pas si | |||
| vous ne comprenez pas exactement ce que fait la fonction ``main()``, on | |||
| expliquera en détail comment elle fonctionne dans un chapitre ultérieur. | |||
| Pour terminer l'exercice, vous n'avez besoin que de modifier les | |||
| fonctions ``trouver_coefficient()``, ``conversion_en_mètres()`` et | |||
| ``conversion_depuis_mètres()``. | |||
| À vous de jouer! | |||
| @@ -1,147 +1,11 @@ | |||
| Chapitre 8 - Dictionnaires | |||
| ========================== | |||
| Définition | |||
| ---------- | |||
| Un dictionaire est une *association* entre des clés et des valeurs. | |||
| * Les clés sont uniques | |||
| * Les valeurs sont arbitraires | |||
| Création de dictionnaires | |||
| ------------------------- | |||
| Avec des accolades: ``{``, ``}`` :: | |||
| dictionaire_vide = {} | |||
| une_clé_une_valeur = {"a": 42} | |||
| deux_clés_deux_valeurs = {"a": 42, "b": 53} | |||
| Note: tous les dictionnaires sont truthy, sauf les dictionnaires vides. | |||
| Accès aux valeurs | |||
| ------------------ | |||
| Avec ``[]``, comme pour les listes, mais avec une *clé* à la place d'un *index*:: | |||
| scores = {"john": 10, "bob": 42} | |||
| print(scores["john"]) | |||
| # affiche: 10 | |||
| print(scores["bob"]) | |||
| # affiche: 42 | |||
| print(scores["charlie"]) | |||
| # erreur: KeyError | |||
| Test d'appartenance | |||
| --------------------- | |||
| Avec ``in``, comme le listes:: | |||
| scores = {"john": 10, "bob": 42} | |||
| print("charlie" in scores) | |||
| # affiche: False | |||
| Modifier la valeur d'une clé | |||
| ----------------------------- | |||
| Comme pour les listes, avec une assignation:: | |||
| scores = {"john": 10, "bob": 42} | |||
| scores["john"] = 20 | |||
| print(scores) | |||
| # affiche: {"john": 20, "bob": 42} | |||
| Créer une nouvelle clé | |||
| ----------------------- | |||
| Même mécanisme que pour la modification des clés existantes:: | |||
| scores = {"john": 10, "bob": 42} | |||
| scores["charlie"] = 30 | |||
| print(scores) | |||
| # affiche: {"john": 20, "bob": 42, "charlie": 30} | |||
| *rappel*: ceci ne fonctionne pas avec les listes: on ne peut | |||
| pas "créer" de nouveaux éléments dans la liste juste | |||
| avec un index:: | |||
| ma_liste = ["a", "b"] | |||
| ma_liste[1] = "c" | |||
| print(ma_liste) | |||
| # affiche: ["a", "c"] | |||
| ma_liste[3] = "d" | |||
| # erreur: IndexError | |||
| Itérer sur les clés | |||
| ------------------- | |||
| Avec ``for ... in ...``, comme pour les listes:: | |||
| scores = {"john": 10, "bob": 42} | |||
| for nom in scores: | |||
| # on assigne la valeur "john" à la variable `nom`, puis "bob" | |||
| score_associé_au_nom = scores[nom] | |||
| # on assigne la valeur 10 puis la valeur 42 à la variable | |||
| # score_associé_au_nom | |||
| print(nom, score_associé_au_nom) | |||
| .. code-block:: | |||
| john 10 | |||
| bob 42 | |||
| del | |||
| --- | |||
| Détruire une clé | |||
| +++++++++++++++++ | |||
| Avec ``del`` - un nouveau mot-clé:: | |||
| scores = {"john": 10, "bob": 42} | |||
| del scores["bob"] | |||
| print(scores) | |||
| # affiche: {"john": 10} | |||
| Détruire un élément d'une liste | |||
| ++++++++++++++++++++++++++++++++ | |||
| Aussi avec ``del``:: | |||
| fruits = ["pomme", "banane", "poire"] | |||
| del fruits[1] | |||
| print(fruits) | |||
| # affiche: ["pomme", "poire"] | |||
| Détruire une variable | |||
| +++++++++++++++++++++ | |||
| Encore et toujours ``del``:: | |||
| mon_entier = 42 | |||
| mon_entier += 3 | |||
| print(mon_entier) | |||
| # affiche: 45 | |||
| del mon_entier | |||
| mon_entier += 1 | |||
| # erreur: NameError | |||
| Comparaisons de dictionaires | |||
| ----------------------------- | |||
| Deux dictionaires sont considérés égaux s'ils ont les mêmes clés | |||
| et les mêmes valeurs. L'ordre n'importe pas:: | |||
| {"a":1, "b":2} == {"a":1, "b":2} # True | |||
| {"a":1, "b":2} == {"b":2, "a":1} # True | |||
| {"a":1, "b":2} == {"a":1, "b":3} # False | |||
| .. toctree:: | |||
| :maxdepth: 1 | |||
| ./01-bases.rst | |||
| ./02-itération.rst | |||
| ./03-booléens.rst | |||
| ./04-exercice.rst | |||
| @@ -0,0 +1,36 @@ | |||
| import sys | |||
| def trouver_coefficient(unité): | |||
| return 1.0 | |||
| def conversion_en_mètres(valeur, unité_de_départ): | |||
| coefficient = trouver_coefficient(unité_de_départ) | |||
| return valeur * coefficient | |||
| def conversion_depuis_mètres(valeur, unité_d_arrivée): | |||
| return 1.0 | |||
| def convertir(valeur, unité_de_départ, unité_d_arrivée): | |||
| print("Conversion de", valeur, "en", unité_de_départ, "vers", unité_d_arrivée) | |||
| en_mètres = conversion_en_mètres(valeur, unité_de_départ) | |||
| résultat = conversion_depuis_mètres(en_mètres, unité_d_arrivée) | |||
| return résultat | |||
| def main(): | |||
| nombre_arguments = len(sys.argv) - 1 | |||
| if nombre_arguments != 3: | |||
| print("3 arguments attendus, mais", nombre_arguments, "reçu(s)") | |||
| return | |||
| valeur = float(sys.argv[1]) | |||
| unité_de_départ = sys.argv[2] | |||
| unité_d_arrivée = sys.argv[3] | |||
| valeur_de_sortie = convertir(valeur, unité_de_départ, unité_d_arrivée) | |||
| print(f"{valeur_de_sortie:.6}") | |||
| main() | |||