@@ -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 | ||||