Vidéo 3b : Variables, expressions¶
Jupyter : communication entre cellules¶
Les cellules ne sont pas étanches entre elles. Toute variable déclarée et validée dans une cellule est placée en mémoire et utilisable par les autres cellules, qu’elles soient avant ou après la cellule ou figure cette variable et y compris si la cellule déclarant cette variable est supprimée ou modifiée. Bien sûr, c’est pratique mais cela peut aussi induire des bug dans la mesure où le code d’une cellule dépend de ce qui a été déclaré avant ou ailleurs.
La complétion syntaxique¶
Dans une cellule, on tape le code suivant, sans valider :
1 2 | laJoliVariableInterminablementLongue=42
print(10 * la
|
On veut poursuivre d’écrire le code en écrivant juste derrière le 10 *
la variable à la ligne au-dessus mais comme elle est très longue, on n’a pas envie de la retaper. Pour nous aider, IPython prend en charge la complétion syntaxique. Si on tape les deux ou trois premières lettres de la variable et qu’on appuie sur la touche TAB, le nom de la variable va apparaître, et il suffira de la sélectionner pour qu’elle soit placée dans le code :
Nom ou variable non reconnus¶
Une variable qui est accédée sans avoir été affectée au préalable n’est pas reconnue :
1 2 | R = 10
print(2 * pi * R)
|
3 | NameError: name 'pi' is not defined
|
- Ligne 2 : la variable
pi
est utilisée mais n’a jamais été défini auparavant. - Ligne 3 : le nom de variable
pi
n’est pas reconnu d’où le messageNameError
qui doit s’interpréter par : « nom inconnu ».
Ce type d’erreur provient parfois d’une erreur de saisie du code (une « coquille ») :
1 2 | toto = 42
print(totot * 10)
|
3 | NameError: name 'totot' is not defined
|
Ce phénomène s’applique aussi à des noms (par exemple, de fonctions « officielles » du langage), pas seulement des variables :
1 2 | toto = 42
printf(toto * 10)
|
3 | NameError: name 'printf' is not defined
|
- Ligne 2 : le programmeur a saisi
printf
au lieu deprint
.
Réaffectation de variable¶
Lorqu’un calcul avec une variable x est suivie de la modification de la valeur de la variable x
, on dit que x
a subi une réaffectation :
1 2 3 | x = 42
x = 2 * x + 10
print(x)
|
4 | 94
|
- Ligne 2 : l’expression
2 * x + 10
est évaluée et la valeur obtenue (94) est réaffectée àx
. Ce type d’affectation (ligne 1 vs ligne 2) s’appelle une réaffectation. La valeur initiale d’affectation (ici 42) est « perdue ».
Augmenter de 1 la valeur d’une variable (comme toto
ci-dessous) s’appelle une incrémentation :
incrementation.py
1 2 3 4 5 | toto = 42
print(toto)
toto = toto + 1
print(toto)
|
6 7 | 42
43
|
- Ligne 4 : l’expression
toto + 1
est évaluée et la valeur obtenue (43) est réaffectée àtoto
.
La nécessité d’effectuer une réaffectation est extrêmement courante.
Echanger deux variables¶
Cet exercice sera plutôt à faire en 2e lecture.
Étant donné deux variables \(x\) et \(y\), on veut permuter leurs valeurs. Par exemple si au départ \(x=81\) et \(y=31\) alors, après échange, on doit avoir: \(x=31\) et \(y=81\). On pourra compléter le code ci-dessous :
x=81
y=31
print(x,y)
# VOTRE
# CODE
# ICI
print(x,y)
Bien sûr votre code doit fonctionner correctement si on donne d’autres valeurs à x
et y
aux lignes 1 et 2.
On fera comme lorsqu’on veut échanger deux étiquettes A et B placées sur des objets : on utilise une étiquette de nommage temporaire.
Demi-carré en mode texte¶
Ecrire un code Python qui affiche exactement ceci (les caractères sont des lettres X majuscules) :
X
XX
XXX
XXXX
Bien sûr, et même si vous avez déjà rencontré cela, aucune boucle for
n’est à utiliser.