@@ -1,17 +1,17 @@ | |||
Expressions et variables | |||
========================= | |||
Expressions, instructions, et variables | |||
======================================= | |||
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*. | |||
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*. | |||
Par exemple, l'expression ``print("bonjour")`` affiche "bonjour" dans | |||
le terminal. On dit que l'expression est *exécutée*. | |||
Expressions | |||
----------- | |||
@@ -21,16 +21,16 @@ Les instructions peuvent contenir des *expressions*. | |||
Un expression est toujours *évaluée* pour retourner une | |||
*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. | |||
Elle est constituée de 3 éléments: | |||
* Le *litéral* 1 | |||
* Le *littéral* 1 | |||
* 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 | |||
utilisant les opérateurs. | |||
@@ -39,7 +39,7 @@ 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 ``+``, | |||
évaluera l'expression, il verra d'abord le littéral ``1`` et le ``+``, | |||
puis il évaluera l'expression à droite (``2*3 = 6``), et finalement | |||
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é | |||
remplacé par sa valeur:: | |||
a = 2 | |||
print(a) | |||
# affiche: 2 | |||
@@ -85,14 +87,25 @@ Les expressions peuvent également contenir des variables. | |||
Quand Python évalue une expression qui contient des noms de variables, | |||
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 | |||
y = 2 | |||
z = x + y | |||
print(z) | |||
print(x+y) # ici x a été remplacé par 1 et y par 2 | |||
# affiche: 3 | |||
Ici on a créé ``z`` en *évaluant* l'expression ``x+y``. | |||
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 | |||
---------------------------------- | |||
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 = x + 1 | |||
print(x) | |||
# affiche :: 4 | |||
:: | |||
x = 3 | |||
x += 1 | |||
print(x) | |||
# affiche :: 4 | |||
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: | |||
* 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 | |||
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 | |||
++ | |||
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:: | |||
a = 3 | |||
@@ -71,7 +71,7 @@ Ce code n'affiche pas "a et b sont égaux", mais affiche bien "on continue". | |||
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:: | |||
a = 3 | |||
@@ -104,7 +104,7 @@ conditions:: | |||
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:: | |||
i = 0 | |||
@@ -132,10 +132,10 @@ Dans ce cas, il faut appuyer sur ``CTRL-C`` pour interrompre | |||
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 | |||
while True: | |||
@@ -151,3 +151,4 @@ On peut "sortir" de la boucle ``while`` avec ``break``:: | |||
3 | |||
4 | |||
@@ -10,7 +10,7 @@ Définition:: | |||
print("Bonjour") | |||
* avec `def` | |||
* avec le mot-clé `def` | |||
* avec un `:` à la fin et un *bloc indenté* (appelé *le corps de la fonction*). | |||
Appel:: | |||
@@ -24,7 +24,7 @@ Example complet:: | |||
def dire_bonjour(): | |||
print("Bonjour") | |||
bonjour() | |||
dire_bonjour() | |||
# Affiche: bonjour' | |||
@@ -1,17 +1,15 @@ | |||
Listes | |||
====== | |||
// TODO: split in pages | |||
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 | |||
--------------- | |||
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 = [] | |||
trois_entiers = [1, 2, 3] | |||
@@ -76,10 +74,10 @@ Avec ``in``:: | |||
print("Charlie" in prénoms) | |||
# 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"] | |||
for prénom in prénoms: | |||
@@ -93,6 +91,25 @@ Avec ``for ... in``:: | |||
Bonjour Bob | |||
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 | |||
------------------ | |||
@@ -150,7 +167,7 @@ On peut tester si un caractère est présent:: | |||
# affiche: False | |||
Mais on neut peut pas modifier une string:: | |||
Mais on ne peut pas modifier une string:: | |||
prénom = "Charlotte" | |||
l = prénom[0] | |||
@@ -4,9 +4,9 @@ None | |||
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 | |||
---------------- | |||
@@ -1,12 +1,14 @@ | |||
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 | |||
if une_condition: | |||
@@ -19,3 +21,5 @@ définir une fonction qui ne fait rien:: | |||
def ne_fait_rien(): | |||
pass | |||
@@ -68,7 +68,7 @@ Les classes sont utilisées pour construire 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: | |||
pass | |||
@@ -111,9 +111,11 @@ On peut *créer* des attributs dans *n'importe quel instance*, en utilisant l'*a | |||
mon_instance.x = 42 | |||
# Accés à l'attribut `x` dans `mon_instance` | |||
print(mon_instance.mon_attribut) | |||
print(mon_instance.x) | |||
# affiche: 42 | |||
Ici l'attribut ``mon_attribut`` de l'instance ``mon_instance`` à la valeur de l'entier ``42``. | |||
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): | |||
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 | |||
---------------- | |||
@@ -102,12 +102,15 @@ qui va: | |||
def console(self): | |||
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") | |||
alice = Enfant("Alice", boule_de_poils) | |||
# Alice est triste, on la 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 | |||
à la méthode ``caresse()`` de la classe Chat. |
@@ -4,7 +4,8 @@ Héritage | |||
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:: | |||
@@ -11,7 +11,9 @@ de la fonction décorée:: | |||
def mon_décorateur(fonction): | |||
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 | |||
@mon_décorateur | |||
@@ -55,7 +55,7 @@ ValueError | |||
``ValueError`` est levée (entre autres) quand on tente une maunvaise conversions:: | |||
entrée_utilisateur = "pas un nombre" | |||
valeu = int(entrée_utilisateur) | |||
valeur = int(entrée_utilisateur) | |||
KeyboardInterrupt | |||