Vidéo 3b : Variables, expressions

\(\newcommand{\ds}{\displaystyle}\) \(\newcommand{\Frac}{\ds\frac}\) \(\renewcommand{\r}{\mathbb{ R}}\) \(\newcommand{\C}{\mathbb{ C}}\) \(\newcommand{\n}{\mathbb{ N}}\) \(\newcommand{\z}{\mathbb{ Z}}\) \(\newcommand{\Q}{\mathbb{ Q}}\) \(\newcommand{\N}{\mathbb{ N}}\) \(\newcommand{\n}{\mathbb{ N}}\) \(\newcommand{\ol}{\overline}\) \(\newcommand{\abs}[1]{\left| \,{#1} \right|}\) \(\newcommand{\pv}{\;;\;}\) \(\newcommand{\ens}[1]{\left\{ {#1} \right\}}\) \(\newcommand{\mens}[1]{\setminus\left\{ {#1} \right\}}\) \(\newcommand{\Par}[1]{\left({#1}\right)}\)

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 :

../../../_images/completion_syntaxique_jupyter.png

Complétion syntaxique dans Jupyter

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 message NameError 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 de print.

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.