| @@ -1,17 +1,17 @@ | |||||
| Expressions et variables | |||||
| ========================= | |||||
| Expressions, instructions, et variables | |||||
| ======================================= | |||||
| Instructions | Instructions | ||||
| ------------ | ------------ | ||||
| Pour l'instant, dans tous les examples de code, chaque ligne qu'on a écrit | |||||
| Pour l'instant, dans tous les exemples de code, chaque ligne qu'on a écrit | |||||
| contenait une *instruction*. | contenait une *instruction*. | ||||
| Un instruction ne renvoie pas de valeur, mais a un | Un instruction ne renvoie pas de valeur, mais a un | ||||
| effet sur le programme. | effet sur le programme. | ||||
| Par exemple, l'expression ``print("bonjour")`` afiche "bonjour" dasn | |||||
| le terminal. On dit que l'expression est *éxécutée*. | |||||
| Par exemple, l'expression ``print("bonjour")`` affiche "bonjour" dans | |||||
| le terminal. On dit que l'expression est *exécutée*. | |||||
| Expressions | Expressions | ||||
| ----------- | ----------- | ||||
| @@ -21,16 +21,16 @@ 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* | *valeur* | ||||
| Par example, ``1 + 2`` es une expression qui renvoie la valeur ``3`` | |||||
| Par exemple, ``1 + 2`` es une expression qui renvoie la valeur ``3`` | |||||
| une fois évaluée. | une fois évaluée. | ||||
| Elle est constituée de 3 éléments: | Elle est constituée de 3 éléments: | ||||
| * Le *litéral* 1 | |||||
| * Le *littéral* 1 | |||||
| * L'*opérateur* ``+`` | * L'*opérateur* ``+`` | ||||
| * Le *litéral* 2 | |||||
| * Le *littéral* 2 | |||||
| Pour évaluer une expression, Python remplace les litéraux | |||||
| Pour évaluer une expression, Python remplace les litté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. | ||||
| @@ -39,7 +39,7 @@ Notez que les expressions peuvent être imbriquées :: | |||||
| 1 + (2 * 3) | 1 + (2 * 3) | ||||
| À droite du plus, on a une expression ``2 + 3``. Quand Python | À droite du plus, on a une expression ``2 + 3``. Quand Python | ||||
| évaluera l'expression, il verra d'abord le litéral ``1`` et le ``+``, | |||||
| évaluera l'expression, il verra d'abord le littéral ``1`` et le ``+``, | |||||
| puis il évaluera l'expression à droite (``2*3 = 6``), et finalement | puis il évaluera l'expression à droite (``2*3 = 6``), et finalement | ||||
| l'expression en entier (``1 + 6 = 7``). | l'expression en entier (``1 + 6 = 7``). | ||||
| @@ -62,6 +62,8 @@ Si plus tard dans le code, on utilise le nom de la variable, | |||||
| tout se passera comme si nom de la variable avait été | tout se passera comme si nom de la variable avait été | ||||
| remplacé par sa valeur:: | remplacé par sa valeur:: | ||||
| a = 2 | a = 2 | ||||
| print(a) | print(a) | ||||
| # affiche: 2 | # affiche: 2 | ||||
| @@ -85,14 +87,25 @@ Les expressions peuvent également contenir des variables. | |||||
| Quand Python évalue une expression qui contient des noms de variables, | Quand Python évalue une expression qui contient des noms de variables, | ||||
| il remplace celles-ci par leur valeur:: | il remplace celles-ci par leur valeur:: | ||||
| a = 1 | |||||
| print(a + 2) # ici a a été remplacé par 1 | |||||
| # affiche: 3 | |||||
| Notez que la valeur de variable `a` n'a pas changé:: | |||||
| a = 1 | |||||
| print(a + 2) | |||||
| # affiche: 3 | |||||
| print(a) | |||||
| # affiche: 1 | |||||
| Autres exemples:: | |||||
| x = 1 | x = 1 | ||||
| y = 2 | y = 2 | ||||
| z = x + y | |||||
| print(z) | |||||
| print(x+y) # ici x a été remplacé par 1 et y par 2 | |||||
| # affiche: 3 | # affiche: 3 | ||||
| Ici on a créé ``z`` en *évaluant* l'expression ``x+y``. | |||||
| Changer la valeur d'une variable | Changer la valeur d'une variable | ||||
| --------------------------------- | --------------------------------- | ||||
| @@ -109,17 +122,16 @@ On peut aussi *changer* la valeur d'une variable en l'assignant | |||||
| Combiner opération et assignation | Combiner opération et assignation | ||||
| ---------------------------------- | ---------------------------------- | ||||
| La notation ``+=`` permet de combiner addition et assignation:: | |||||
| La notation ``+=`` permet de combiner addition et assignation : | |||||
| les deux exemples ci-dessous sont équivalents:: | |||||
| x = 3 | x = 3 | ||||
| x = x + 1 | x = x + 1 | ||||
| print(x) | |||||
| # affiche :: 4 | |||||
| :: | |||||
| x = 3 | x = 3 | ||||
| x += 1 | x += 1 | ||||
| print(x) | |||||
| # affiche :: 4 | |||||
| Cela fonctionne aussi pour ``-=``, ``/=`` etc. | Cela fonctionne aussi pour ``-=``, ``/=`` etc. | ||||
| @@ -133,7 +145,11 @@ mais il est préférable d'avoir des noms longs et descriptifs | |||||
| Aussi, la convention est de: | Aussi, la convention est de: | ||||
| * Les écrire en minuscules | * Les écrire en minuscules | ||||
| * De séparer les mots par des tirest bas (*underscore*):: | |||||
| * De séparer les mots par des tirets bas (*underscore*):: | |||||
| score = 42 | score = 42 | ||||
| age_moyen = 22 | |||||
| âge_moyen = 22 | |||||
| Notez que certains noms ne peuvent être utilisés comme nom | |||||
| de variables. On les appelle des *mots-clés*. La liste | |||||
| est disponible ici: https://docs.python.org/fr/3/reference/lexical_analysis.html#keywords | |||||
| @@ -14,7 +14,7 @@ contrôle, et c'est l'essence de la programmation! | |||||
| if | if | ||||
| ++ | ++ | ||||
| On peut utiliser le mot ``if`` pour autoriser ou empécher | |||||
| On peut utiliser le mot-clé ``if`` pour autoriser ou empécher | |||||
| l'éxcution des instructions suivantes:: | l'éxcution des instructions suivantes:: | ||||
| a = 3 | a = 3 | ||||
| @@ -71,7 +71,7 @@ Ce code n'affiche pas "a et b sont égaux", mais affiche bien "on continue". | |||||
| if / else | if / else | ||||
| --------- | --------- | ||||
| On peut utiliser le mot ``else`` après un condition en ``if`` | |||||
| On peut utiliser le mot-clé ``else`` après un condition en ``if`` | |||||
| pour éxécutér un bloc si la condition est fausse:: | pour éxécutér un bloc si la condition est fausse:: | ||||
| a = 3 | a = 3 | ||||
| @@ -104,7 +104,7 @@ conditions:: | |||||
| while | while | ||||
| ----- | ----- | ||||
| On peut utiliser ``while`` pour répéter un bloc tant qu'une condition | |||||
| On peut utiliser le mot-clé ``while`` pour répéter un bloc tant qu'une condition | |||||
| est vraie:: | est vraie:: | ||||
| i = 0 | i = 0 | ||||
| @@ -132,10 +132,10 @@ Dans ce cas, il faut appuyer sur ``CTRL-C`` pour interrompre | |||||
| le programme. | le programme. | ||||
| Combiner while et if | |||||
| -------------------- | |||||
| Combiner while, if, et break | |||||
| ----------------------------- | |||||
| On peut "sortir" de la boucle ``while`` avec ``break``:: | |||||
| On peut "sortir" de la boucle ``while`` avec le mot-clé ``break``:: | |||||
| i = 0 | i = 0 | ||||
| while True: | while True: | ||||
| @@ -151,3 +151,4 @@ On peut "sortir" de la boucle ``while`` avec ``break``:: | |||||
| 3 | 3 | ||||
| 4 | 4 | ||||
| @@ -10,7 +10,7 @@ Définition:: | |||||
| print("Bonjour") | print("Bonjour") | ||||
| * avec `def` | |||||
| * avec le mot-clé `def` | |||||
| * avec un `:` à la fin et un *bloc indenté* (appelé *le corps de la fonction*). | * avec un `:` à la fin et un *bloc indenté* (appelé *le corps de la fonction*). | ||||
| Appel:: | Appel:: | ||||
| @@ -24,7 +24,7 @@ Example complet:: | |||||
| def dire_bonjour(): | def dire_bonjour(): | ||||
| print("Bonjour") | print("Bonjour") | ||||
| bonjour() | |||||
| dire_bonjour() | |||||
| # Affiche: bonjour' | # Affiche: bonjour' | ||||
| @@ -1,17 +1,15 @@ | |||||
| Listes | Listes | ||||
| ====== | ====== | ||||
| // TODO: split in pages | |||||
| Définition | Définition | ||||
| ---------- | ---------- | ||||
| Une liste est une *suite ordonée* d'éléments. | |||||
| Une liste est une *suite ordonnée* d'éléments. | |||||
| Créer une liste | Créer une liste | ||||
| --------------- | --------------- | ||||
| Avec des crochets: ``[``, ``]``, et les élements séparés par des virgules:: | |||||
| Avec des crochets: ``[``, ``]``, et les éléments séparés par des virgules:: | |||||
| liste_vide = [] | liste_vide = [] | ||||
| trois_entiers = [1, 2, 3] | trois_entiers = [1, 2, 3] | ||||
| @@ -76,10 +74,10 @@ Avec ``in``:: | |||||
| print("Charlie" in prénoms) | print("Charlie" in prénoms) | ||||
| # affiche: False | # affiche: False | ||||
| Itérer sur les élements d'une liste | |||||
| Itérer sur les éléments d'une liste | |||||
| ------------------------------------ | ------------------------------------ | ||||
| Avec ``for ... in``:: | |||||
| Avec les mots-clés ``for`` et `` in``:: | |||||
| prénoms = ["Alice", "Bob", "Charlie"] | prénoms = ["Alice", "Bob", "Charlie"] | ||||
| for prénom in prénoms: | for prénom in prénoms: | ||||
| @@ -93,6 +91,25 @@ Avec ``for ... in``:: | |||||
| Bonjour Bob | Bonjour Bob | ||||
| Bonjour Charlie | Bonjour Charlie | ||||
| Continue | |||||
| -------- | |||||
| On peut interrompre l'exécution du bloc courant avec le mot-clé | |||||
| ``continue``:: | |||||
| prénoms = ["Alice", "Bob", "Charlie"] | |||||
| for prénom in prénoms: | |||||
| if prénom == "Bob": | |||||
| continue | |||||
| print("Bonjour", prénom) | |||||
| .. code-block:: text | |||||
| Bonjour Alice | |||||
| Bonjour Charlie | |||||
| Indéxer une liste | Indéxer une liste | ||||
| ------------------ | ------------------ | ||||
| @@ -150,7 +167,7 @@ On peut tester si un caractère est présent:: | |||||
| # affiche: False | # affiche: False | ||||
| Mais on neut peut pas modifier une string:: | |||||
| Mais on ne peut pas modifier une string:: | |||||
| prénom = "Charlotte" | prénom = "Charlotte" | ||||
| l = prénom[0] | l = prénom[0] | ||||
| @@ -4,9 +4,9 @@ None | |||||
| Définition | Définition | ||||
| ----------- | ----------- | ||||
| ``None`` est une "valeur magique" natif en python. il est toujours présent, et il est unique. | |||||
| ``None`` est un mot-clé qui sert à représenter l'absence. | |||||
| Un peu comme ``True`` et ``False`` qui sont deux valeurs qui servent à représenter tous les booléens. | |||||
| Un peu comme ``True`` et ``False`` qui sonts des mot-clés qui réprésentent des booléens. | |||||
| Retourner None | Retourner None | ||||
| ---------------- | ---------------- | ||||
| @@ -1,12 +1,14 @@ | |||||
| pass | pass | ||||
| ==== | ==== | ||||
| En Python, à cause de l'organisation en blocs indentés, on ne | |||||
| peut pas vraiment avoir de blocs vides. Mais parfois, on | |||||
| a besoin d'un bloc qui ne fasse rien. | |||||
| Dans ce cas, on peut utiliser le mot-clé `pass`, par exemple | |||||
| après un if:: | |||||
| À cause de l'organisation du flot de contrôle en blocs indentés, on ne | |||||
| peut pas vraiment avoir de blocs vides. Mais parfois, on a besoin d'un bloc | |||||
| qui ne fasse rien - c'est là que le mot-clé `pass` rentre en jeu. | |||||
| `pass` représente une instruction qui ne fait rien. | |||||
| Un exemple:: | |||||
| une_condition = False | une_condition = False | ||||
| if une_condition: | if une_condition: | ||||
| @@ -19,3 +21,5 @@ définir une fonction qui ne fait rien:: | |||||
| def ne_fait_rien(): | def ne_fait_rien(): | ||||
| pass | pass | ||||
| @@ -68,7 +68,7 @@ Les classes sont utilisées pour construire des *instances*. | |||||
| Créons des instances | Créons des instances | ||||
| --------------------- | --------------------- | ||||
| On peut faire un plan de construction vide avec le mot clé pass:: | |||||
| On peut faire un plan de construction vide avec le mot-clé pass:: | |||||
| class MaClasse: | class MaClasse: | ||||
| pass | pass | ||||
| @@ -111,9 +111,11 @@ On peut *créer* des attributs dans *n'importe quel instance*, en utilisant l'*a | |||||
| mon_instance.x = 42 | mon_instance.x = 42 | ||||
| # Accés à l'attribut `x` dans `mon_instance` | # Accés à l'attribut `x` dans `mon_instance` | ||||
| print(mon_instance.mon_attribut) | |||||
| print(mon_instance.x) | |||||
| # affiche: 42 | # affiche: 42 | ||||
| Ici l'attribut ``mon_attribut`` de l'instance ``mon_instance`` à la valeur de l'entier ``42``. | |||||
| Méthodes - définition | Méthodes - définition | ||||
| ---------------------- | ---------------------- | ||||
| @@ -126,6 +128,9 @@ moins un argument appelé `self`, et être à l'intérieur du bloc de la classe: | |||||
| def ma_méthode(self): | def ma_méthode(self): | ||||
| return 42 | return 42 | ||||
| Notez que les méthodes *sont aussi des attributs*. Leur valeur est une *fonction* qui prend | |||||
| en argument l'instance courante. | |||||
| Méthodes - appel | Méthodes - appel | ||||
| ---------------- | ---------------- | ||||
| @@ -102,12 +102,15 @@ qui va: | |||||
| def console(self): | def console(self): | ||||
| self.chat.caresse() | self.chat.caresse() | ||||
| Si on combine ces deux classes dans le même morceau de code et qu'on | |||||
| exécute les instructions suivantes:: | |||||
| boule_de_poils = Chat("Boule de Poils") | boule_de_poils = Chat("Boule de Poils") | ||||
| alice = Enfant("Alice", boule_de_poils) | alice = Enfant("Alice", boule_de_poils) | ||||
| # Alice est triste, on la console | |||||
| alice.console() | alice.console() | ||||
| # affiche: Boule de Poils fait "prrrrr" | |||||
| # Alice est consolée :) | |||||
| On afffichera ```Boule de Poils fait "prrr"`` et alice sera consolée. | |||||
| On dit parfois qu'on a *délégué* l'implémentation de la méthode ``console()`` de la classe Enfant | On dit parfois qu'on a *délégué* l'implémentation de la méthode ``console()`` de la classe Enfant | ||||
| à la méthode ``caresse()`` de la classe Chat. | à la méthode ``caresse()`` de la classe Chat. | ||||
| @@ -4,7 +4,8 @@ Héritage | |||||
| Rappel - composition | Rappel - composition | ||||
| --------------------- | --------------------- | ||||
| Dans le chapitre 13 on a parlé de *composition* qui décrit une relation entre deux classes. | |||||
| Dans un chapitre précédent on a parlé de *composition* qui décrit une classe à l'intérieur | |||||
| d'une autre classe. | |||||
| Pour rappel:: | Pour rappel:: | ||||
| @@ -11,7 +11,9 @@ de la fonction décorée:: | |||||
| def mon_décorateur(fonction): | def mon_décorateur(fonction): | ||||
| def fonction_retournée(): | def fonction_retournée(): | ||||
| # fais quelque chose avec fonction | |||||
| # fait quelque chose l'argument `fonction`, par exemple | |||||
| # l'appeler avec un argument: | |||||
| fonction(42) | |||||
| return fonction_retournée | return fonction_retournée | ||||
| @mon_décorateur | @mon_décorateur | ||||
| @@ -55,7 +55,7 @@ ValueError | |||||
| ``ValueError`` est levée (entre autres) quand on tente une maunvaise conversions:: | ``ValueError`` est levée (entre autres) quand on tente une maunvaise conversions:: | ||||
| entrée_utilisateur = "pas un nombre" | entrée_utilisateur = "pas un nombre" | ||||
| valeu = int(entrée_utilisateur) | |||||
| valeur = int(entrée_utilisateur) | |||||
| KeyboardInterrupt | KeyboardInterrupt | ||||