| @@ -1,5 +1,5 @@ | |||||
| Chapitre 1 - Introduction | |||||
| ========================= | |||||
| Introduction | |||||
| ============ | |||||
| .. toctree:: | .. toctree:: | ||||
| @@ -1,5 +1,5 @@ | |||||
| Chapitre 2 - Premiers pas | |||||
| ========================= | |||||
| Premiers pas | |||||
| ============ | |||||
| .. toctree:: | .. toctree:: | ||||
| :maxdepth: 1 | :maxdepth: 1 | ||||
| @@ -1,25 +1,30 @@ | |||||
| Variables | |||||
| ========= | |||||
| Expressions et variables | |||||
| ========================= | |||||
| Instructions | |||||
| ------------ | |||||
| Pour l'instant, dans tous les examples de code, chaque ligne qu'on a écrit | |||||
| contenait une *instruction*. | |||||
| Un instruction ne renvoie pas de valeur, mais a un | |||||
| effet sur le programme. | |||||
| Par exemple, l'expression ``print("bonjour")`` afiche "bonjour" dasn | |||||
| le terminal. On dit que l'expression est *éxécutée*. | |||||
| Expressions | Expressions | ||||
| ----------- | ----------- | ||||
| Un peu de vocabulaire avant de continuer. | |||||
| Quand on écrit ``1 + 2`` en Python, on a ce qu'on | |||||
| appelle une *expression* - | |||||
| Les instructions peuvent contenir des *expressions*. | |||||
| Un expression est toujours *évaluée* pour retourner une | Un expression est toujours *évaluée* pour retourner une | ||||
| *valeur* (ici 3) | |||||
| *valeur* | |||||
| Quand on écrit ``print(1 + 2)`` on a une *instruction*. | |||||
| Par example, ``1 + 2`` es une expression qui renvoie la valeur ``3`` | |||||
| une fois évaluée. | |||||
| Un instruction ne renvoie pas de valeur, mais a un | |||||
| effet sur le programme, ici l'affichage de la valeur | |||||
| de l'expression évaluée dans le terminal. | |||||
| Enfin, l'expression ``1 + 2`` est constituée de trois | |||||
| éléments: | |||||
| Elle est constituée de 3 éléments: | |||||
| * Le *litéral* 1 | * Le *litéral* 1 | ||||
| * L'*opérateur* ``+`` | * L'*opérateur* ``+`` | ||||
| @@ -29,6 +34,15 @@ Pour évaluer une expression, Python remplace les litéraux | |||||
| par leur valeur, puis calcule la valeur finale en | par leur valeur, puis calcule la valeur finale en | ||||
| utilisant les opérateurs. | utilisant les opérateurs. | ||||
| Notez que les expressions peuvent être imbriquées :: | |||||
| 1 + (2 * 3) | |||||
| À droite du plus, on a une expression ``2 + 3``. Quand Python | |||||
| évaluera l'expression, il verra d'abord le litéral ``1`` et le ``+``, | |||||
| puis il évaluera l'expression à droite (``2*3 = 6``), et finalement | |||||
| l'expression en entier (``1 + 6 = 7``). | |||||
| Variables et valeurs | Variables et valeurs | ||||
| -------------------- | -------------------- | ||||
| @@ -113,7 +127,7 @@ Cela fonctionne aussi pour ``-=``, ``/=`` etc. | |||||
| Nom des variables | Nom des variables | ||||
| ----------------- | ----------------- | ||||
| Ci-dessus j'ai utilisé des noms de variables à une lettre, comme en maths, | |||||
| Ci-dessus j'ai utilisé des noms de variables à une lettre, | |||||
| mais il est préférable d'avoir des noms longs et descriptifs | mais il est préférable d'avoir des noms longs et descriptifs | ||||
| Aussi, la convention est de: | Aussi, la convention est de: | ||||
| @@ -42,3 +42,29 @@ Par exemple:: | |||||
| .. warning:: | .. warning:: | ||||
| Ne pas confondre: ``==`` pour la comparaison et ``=`` pour l'assignation | Ne pas confondre: ``==`` pour la comparaison et ``=`` pour l'assignation | ||||
| Autres opérations booléennes | |||||
| ----------------------------- | |||||
| +-------+-----------+ | |||||
| |``not``| négation | | |||||
| +-------+-----------+ | |||||
| |``and``| et | | |||||
| +-------+-----------+ | |||||
| |``or`` | ou | | |||||
| +-------+-----------+ | |||||
| Exemples:: | |||||
| a = not True | |||||
| print(a) | |||||
| # affiche `False` | |||||
| il_pleut = True | |||||
| j_ai_un_parapluie = False | |||||
| print(il_pleut and j_ai_un_parapluie) | |||||
| # afiche: False | |||||
| je_suis_mouillé = il_pleut and not j_ai_un_parapluie | |||||
| prin(je_suis_mouillé) | |||||
| # afiche: True | |||||
| @@ -1,5 +1,5 @@ | |||||
| Chapitre 3 - Variables et types | |||||
| ================================ | |||||
| Variables et types | |||||
| ================== | |||||
| .. toctree:: | .. toctree:: | ||||
| :maxdepth: 1 | :maxdepth: 1 | ||||
| @@ -1,72 +0,0 @@ | |||||
| Chapitre 4 - Booléens et conditions | |||||
| =================================== | |||||
| En Python, les variables ``True`` et ``False`` sont toujours définies | |||||
| et servent à représenter une valeur vraie ou fausse. | |||||
| (Notez qu'elles commencent par une majuscule) | |||||
| Assignation | |||||
| ----------- | |||||
| On peut assigner des variables à True ou False:: | |||||
| la_terre_est_plate = False | |||||
| python_c_est_genial = True | |||||
| Comparaisons | |||||
| ------------ | |||||
| Certaines opérations renvoient des booléens: | |||||
| +------+-----------------------------+ | |||||
| |``=`` | égal | | |||||
| +------+-----------------------------+ | |||||
| |``!=``| différent | | |||||
| +------+-----------------------------+ | |||||
| |``>`` | strictement supérieur | | |||||
| +------+-----------------------------+ | |||||
| |``>=``| supérieur ou égal | | |||||
| +------+-----------------------------+ | |||||
| |``<`` | strictement inférieur | | |||||
| +------+-----------------------------+ | |||||
| |``<=``| inférieur | | |||||
| +------+-----------------------------+ | |||||
| Par example:: | |||||
| a = 2 | |||||
| b = 3 | |||||
| print(a > b) | |||||
| # affiche: False | |||||
| print(2 + 2 == 4) | |||||
| # affiche: True | |||||
| .. warning:: | |||||
| Ne pas confondre: ``==`` pour la comparaison et ``=`` pour l'assignation | |||||
| Enfin, on peut écrire des encadrements:: | |||||
| a = 3 | |||||
| print(2 <= a < 4) | |||||
| # affiche: True | |||||
| not | |||||
| --- | |||||
| Enfin, on peut utiliser ``not`` pour inverser une condition:: | |||||
| a = 3 | |||||
| if not a == 4: | |||||
| print("a est différent de 4") | |||||
| # affiche: a est différent de 4 | |||||
| la_terre_est_plate = False | |||||
| print(not la_terre_est_plate) | |||||
| # affiche: True | |||||
| @@ -5,7 +5,9 @@ Pour l'instant, toutes les instructions que nous avons | |||||
| écrites ont été exécutée une par une et dans l'ordre | écrites ont été exécutée une par une et dans l'ordre | ||||
| d'apparition dans le code source. | d'apparition dans le code source. | ||||
| Modifier l'ordre d'exécution de ces lignes s'appelle modifier le flot de | |||||
| De plus, chaque ligne était constituée d'une unique expression. | |||||
| Modifier l'ordre d'exécution de ces instructions s'appelle modifier le flot de | |||||
| contrôle, et c'est l'essence de la programmation! | contrôle, et c'est l'essence de la programmation! | ||||
| @@ -13,15 +15,13 @@ if | |||||
| ++ | ++ | ||||
| On peut utiliser le mot ``if`` pour autoriser ou empécher | On peut utiliser le mot ``if`` pour autoriser ou empécher | ||||
| l'éxcution du code en-dessous:: | |||||
| l'éxcution des instructions suivantes:: | |||||
| a = 3 | a = 3 | ||||
| b = 4 | b = 4 | ||||
| if a == b: | if a == b: | ||||
| print("a et b sont égaux") | print("a et b sont égaux") | ||||
| print("on continue") | |||||
| # affiche juste | |||||
| # on continue | |||||
| # n'affiche rien | |||||
| La 4ème ligne n'est pas éxécutée parce la condition | La 4ème ligne n'est pas éxécutée parce la condition | ||||
| est fausse. | est fausse. | ||||
| @@ -31,10 +31,11 @@ Notes: | |||||
| * il y a le caractère ``:`` (deux points) à la fin de la ligne | * il y a le caractère ``:`` (deux points) à la fin de la ligne | ||||
| * le code en-dessous du ``if`` commence par 4 espaces: on appelle | * le code en-dessous du ``if`` commence par 4 espaces: on appelle | ||||
| cela une *indentation* | cela une *indentation* | ||||
| * si la condition n'est pas vraie, rien ne se passe | |||||
| Notez qu'on peut mettre uniquement une variable ou une valeur | |||||
| après le if. Ceci ne fonctionne pas:: | |||||
| Notez qu'on a utilisé une **expression** après le if. | |||||
| On ne peut pas utiliser d'instruction après un ``if`` en Python. | |||||
| Autrement dit, ce code ne fonctionne pas:: | |||||
| if a = 3: | if a = 3: | ||||
| print("a égale 3") | print("a égale 3") | ||||
| @@ -48,10 +49,25 @@ On parle aussi de "bloc" si plusieurs lignes sont identées:: | |||||
| # début du bloc | # début du bloc | ||||
| print("a et b sont égaux") | print("a et b sont égaux") | ||||
| c = 2 * a | c = 2 * a | ||||
| # fin du block | |||||
| # fin du bloc | |||||
| Notez qu'on reprend l'ordre habituel d'éxécution des instructions s'il | |||||
| y a un bloc identé dans l'autre sens après le ``if``:: | |||||
| a = 3 | |||||
| b = 4 | |||||
| if a == b: | |||||
| # début du bloc | |||||
| print("a et b sont égaux") | |||||
| c = 2 * a | |||||
| # fin du bloc | |||||
| # on est après le bloc if | |||||
| print("on continue") | print("on continue") | ||||
| Ce code n'affiche pas "a et b sont égaux", mais affiche bien "on continue". | |||||
| if / else | if / else | ||||
| --------- | --------- | ||||
| @@ -115,8 +131,6 @@ On parle de *boucle infinie* si la condition ne devient jamais fausse:: | |||||
| Dans ce cas, il faut appuyer sur ``CTRL-C`` pour interrompre | Dans ce cas, il faut appuyer sur ``CTRL-C`` pour interrompre | ||||
| le programme. | le programme. | ||||
| Notez ici qu'on a mis directement la valeur ``True``, et non une comparaison. | |||||
| Combiner while et if | Combiner while et if | ||||
| -------------------- | -------------------- | ||||
| @@ -136,3 +150,4 @@ On peut "sortir" de la boucle ``while`` avec ``break``:: | |||||
| 2 | 2 | ||||
| 3 | 3 | ||||
| 4 | 4 | ||||
| @@ -0,0 +1,66 @@ | |||||
| Falsy et truthy | |||||
| ================ | |||||
| Expressions après un if | |||||
| ----------------------- | |||||
| Jusqu'ici les expressions qu'on a utilisées donnait un booléens une fois évaluées, mais | |||||
| un expression apès un ``if`` peut être d'un autre type. | |||||
| Par exemple, un entier:: | |||||
| x = 0 | |||||
| if x: | |||||
| print("x n'est pas nul") | |||||
| else: | |||||
| print("x est nul") | |||||
| # affiche: x est nul | |||||
| On dit que ``0`` est ``Falsy``, parce qu'après un ``if``, il se comporte comme une expression | |||||
| qui vaudrait False. | |||||
| Réciproquement, tous les entiers sauf 0 sont ``Truthy``, parce qu'ils se comportent comme | |||||
| une expression qui vaudrait True:: | |||||
| y = 6 | |||||
| if y: | |||||
| print("y n'est pas nul") | |||||
| else: | |||||
| print("y est nul") | |||||
| # affiche: y n'est pas nul | |||||
| On retrouve ce principe avec les chaînes de caractères:: | |||||
| message = "" | |||||
| if message: | |||||
| print("le message n'est pas vide") | |||||
| else: | |||||
| print("le message est vide") | |||||
| # affiche: le message est vide | |||||
| Le chaînes vides sont falsy, les autres sont truthy. | |||||
| Expressions quelconques | |||||
| ----------------------- | |||||
| En fait, on peut utiliser tous les opérateurs booléens avec des expressions | |||||
| quelconques:: | |||||
| message = "bonjour" | |||||
| if not message: | |||||
| print("le message n'est pas vide") | |||||
| # affiche : le message n'est pas vide | |||||
| score = 42 | |||||
| if message and score: | |||||
| print("le message et le score sont truthy") | |||||
| # affiche : le message et le score sont truthy | |||||
| @@ -0,0 +1,9 @@ | |||||
| Flot de contrôle | |||||
| ================ | |||||
| .. toctree:: | |||||
| :maxdepth: 1 | |||||
| ./01-flot-de-contrôle.rst | |||||
| ./02-falsy-truthy.rst | |||||
| ./03-exercice.rst | |||||
| @@ -1,8 +0,0 @@ | |||||
| Chapitre 5 - Flot de contrôle | |||||
| ============================= | |||||
| .. toctree:: | |||||
| :maxdepth: 1 | |||||
| 01-flot-de-contrôle | |||||
| 02-exercice | |||||
| @@ -1,5 +1,5 @@ | |||||
| Chapitre 6 - Introduction aux fonctions | |||||
| ======================================= | |||||
| Introduction aux fonctions | |||||
| ========================== | |||||
| .. toctree:: | .. toctree:: | ||||
| :maxdepth: 1 | :maxdepth: 1 | ||||
| @@ -1,5 +1,5 @@ | |||||
| Chapitre 7 - Listes | |||||
| =================== | |||||
| Listes | |||||
| ====== | |||||
| // TODO: split in pages | // TODO: split in pages | ||||
| @@ -1,5 +1,5 @@ | |||||
| Chapitre 8 - None et pass | |||||
| ========================= | |||||
| None et pass | |||||
| ============ | |||||
| .. toctree:: | .. toctree:: | ||||
| :maxdepth: 1 | :maxdepth: 1 | ||||
| @@ -1,5 +1,5 @@ | |||||
| Chapitre 9 - Dictionnaires | |||||
| ========================== | |||||
| Dictionnaires | |||||
| ============== | |||||
| Définition | Définition | ||||
| ---------- | ---------- | ||||
| @@ -1,5 +1,6 @@ | |||||
| Chapitre 10 - Tuples | |||||
| ===================== | |||||
| Tuples | |||||
| ====== | |||||
| Définition | Définition | ||||
| ------------ | ------------ | ||||
| @@ -1,5 +1,5 @@ | |||||
| Chapitre 11 - Introduction aux classes | |||||
| ====================================== | |||||
| Introduction aux classes | |||||
| ======================== | |||||
| Ce qu’on a vu jusqu’ici: | Ce qu’on a vu jusqu’ici: | ||||
| @@ -1,5 +1,5 @@ | |||||
| Chapitre 12 - Introduction aux modules | |||||
| ====================================== | |||||
| Introduction aux modules | |||||
| ======================== | |||||
| Un fichier = un module | Un fichier = un module | ||||
| ------------------------ | ------------------------ | ||||
| @@ -0,0 +1,8 @@ | |||||
| Couplage et composition | |||||
| ======================= | |||||
| .. toctree:: | |||||
| :maxdepth: 1 | |||||
| 01-couplage | |||||
| 02-composition | |||||
| @@ -1,5 +1,5 @@ | |||||
| Chapitre 14 - Bibliothèques | |||||
| =========================== | |||||
| Bibliothèques | |||||
| ============= | |||||
| .. toctree:: | .. toctree:: | ||||
| :maxdepth: 1 | :maxdepth: 1 | ||||
| @@ -1,8 +0,0 @@ | |||||
| Chapitre 13 - Couplage et composition | |||||
| ===================================== | |||||
| .. toctree:: | |||||
| :maxdepth: 1 | |||||
| 01-couplage | |||||
| 02-composition | |||||
| @@ -1,5 +1,5 @@ | |||||
| Chapitre 15 - Données binaires et fichiers | |||||
| ========================================== | |||||
| Données binaires et fichiers | |||||
| ============================ | |||||
| On vous a peut-être déjà dit que l'informatique consiste à | On vous a peut-être déjà dit que l'informatique consiste à | ||||
| manipuler des suites de 0 et et de 1s, mais qu'en est-t-il | manipuler des suites de 0 et et de 1s, mais qu'en est-t-il | ||||
| @@ -1,5 +1,5 @@ | |||||
| Chapitre 16 - L'interpréteur interactif | |||||
| ======================================= | |||||
| L'interpréteur interactif | |||||
| ========================= | |||||
| Démarrage | Démarrage | ||||
| ---------- | ---------- | ||||
| @@ -1,5 +1,5 @@ | |||||
| Chapitre 17 - Héritage | |||||
| ====================== | |||||
| Héritage | |||||
| ======== | |||||
| Rappel - composition | Rappel - composition | ||||
| --------------------- | --------------------- | ||||
| @@ -1,5 +1,5 @@ | |||||
| Chapitre 18 - Décorateurs | |||||
| ========================= | |||||
| Décorateurs | |||||
| =========== | |||||
| .. toctree:: | .. toctree:: | ||||
| :maxdepth: 1 | :maxdepth: 1 | ||||
| @@ -1,5 +1,5 @@ | |||||
| Chapitre 19 - Exceptions | |||||
| ======================== | |||||
| Exceptions | |||||
| ========== | |||||
| On a souvent montré des exemples de code qui provoquaient des erreurs au | On a souvent montré des exemples de code qui provoquaient des erreurs au | ||||
| cours des chapitres précédents. Il est temps maintenant de se pencher | cours des chapitres précédents. Il est temps maintenant de se pencher | ||||
| @@ -17,21 +17,21 @@ remarques. | |||||
| :maxdepth: 1 | :maxdepth: 1 | ||||
| :caption: Table des matières: | :caption: Table des matières: | ||||
| 01-introduction/index | |||||
| 02-premiers-pas/index | |||||
| 03-variables-et-types/index | |||||
| 05-flot-de-controle/index | |||||
| 06-fonctions-01/index | |||||
| 07-listes/index | |||||
| 08-none-et-pass/index | |||||
| 09-dictionnaires/index | |||||
| 10-tuples/index | |||||
| 11-classes-01/index | |||||
| 12-modules-01/index | |||||
| 13-classes-02/index | |||||
| 14-bibliothèques-01/index | |||||
| 15-fichiers-et-données-binaires/index | |||||
| 16-interpréteur-interactif/index | |||||
| 17-classes-03/index | |||||
| 18-functions-02/index | |||||
| 19-exceptions/index | |||||
| 01-introduction/index.rst | |||||
| 02-premiers-pas/index.rst | |||||
| 03-variables-et-types/index.rst | |||||
| 04-flot-de-controle/index.rst | |||||
| 05-fonctions-01/index.rst | |||||
| 06-listes/index.rst | |||||
| 07-none-et-pass/index.rst | |||||
| 08-dictionnaires/index.rst | |||||
| 09-tuples/index.rst | |||||
| 10-classes-01/index.rst | |||||
| 11-modules-01/index.rst | |||||
| 12-classes-02/index.rst | |||||
| 13-bibliothèques-01/index.rst | |||||
| 14-fichiers-et-données-binaires/index.rst | |||||
| 15-interpréteur-interactif/index.rst | |||||
| 16-classes-03/index.rst | |||||
| 17-décorateurs/index.rst | |||||
| 18-exceptions/index.rst | |||||