Aller au contenu

Introduction à Python

I. Environnement de développement⚓︎

Pour saisir et exécuter un code écrit en Python, il nous faut

  • un éditeur de texte
  • un interpréteur Python

Le code sert à quelque chose... il produit un résultat. Ce résultat peut être de nature variée :

  • afficher un résultat à l'écran. Ce résultat peut être du texte, une image,
  • ou actionner un robot,
  • mettre à jour une base de donnée, etc...

Nous allons pour le moment utiliser simplement des sorties à l'écran, à l'aide de la fonction print()

print signifie afficher, c'est ce que fait cette fonction, elle affiche quelques chose. Mais ou va-t-elle l'afficher ?

Un IDE sur ce site

Sur ce site, vous disposez d'un IDE en ligne

Exécuter le script ci-dessous. La console est ici positionnée en dessous de l'éditeur

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

II. Les Variables⚓︎

A.1 Introduction⚓︎

De la même manière que dans votre chambre chaque objet a (normalement) une place attitrée, un ordinateur (dont le rôle peut se résumer à «manipuler très vite des données») va assigner à chaque objet une place particulière dans son espace-mémoire. Et il lui assignera un nom (choisi par l'utilisateur) afin de pouvoir accéder à cette valeur.

Nous ne rentrerons pas dans le détail du processus d'allocation-mémoire, nous retiendrons juste ceci : pour manipuler un objet, il faut qu'il déjà qu'il ait un nom. C'est par cela que nous allons commencer :

Première variable

Considérons la phrase «nous allons stocker le prix du spectacle dans une variable a, qui vaudra au départ 32.»

Il y a plusieurs commentaires à faire sur une telle annonce :

  • Dans le problème que l'on cherche à modéliser, le prix du spectacle est une donnée importante, qui va peut-être évoluer (ou pas !).
  • Pour la manipuler plus simplement, on va la désigner par un nom, le nom de la variable (ici, le nom a est particulièrement mal choisi, voir D. Bonnes pratiques de nommage)
  • Comme en mathématiques, le nom de cette variable va désigner une valeur qui peut changer (varier) au cours du temps (encore une fois : ou pas).
  • Cette valeur est fixée au départ à 32. On dira en informatique qu'elle est initialisée à 32.
  • Si cette valeur ne change pas, on dira qu'elle est constante. Cela peut paraître inutile de donner un nom à quelque chose qui ne change pas, mais cela est très utile de définir les constantes au début d'un programme.

A.2 On code !⚓︎

La phrase précédente donnera donc lieu à la ligne Python suivante :

🐍 Script Python
>>> a = 32

Attention

Le symbole = ici utilisé n'a rien à voir avec le symbole = utilisé en mathématique. On dit qu'on a affecté à a la valeur 32, et il faut se représenter mentalement cette action par l'écriture a ← 32.

Comparaison de la syntaxe dans différents langages

🐍 Script Python
a = 32
C
int a = 32;
PHP
$a = 32;
Java
int a = 32;
JavaScript
var a = 32;
Rust
let a = 32;
Go
a := 32

Utiliser c'exemple d'affectation

Dans la console saisir :

🐍 Console Python
>>> a = 32

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Affectation

Vous venez de faire deux choses en même temps :

  • Vous avez défini une variable que vous avez nommé a
  • Vous avez affecté la valeur 32 à a

Exemple d'affichage

Dans la console saisir :

🐍 Console Python
>>> a = 32
>>> print(a + 5)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Python affiche la valeur 37 mais la variable an'a pas été modifiée. Vérifiez le en ajoutant dans la console précédente :

🐍 Console Python
>>> a
Après exécution de cette ligne, on constate que a n'a pas été modifié.

Ajoutons 5 à notre variable

Dans la console saisir :

🐍 Console Python
>>> a = 32
>>> a = a + 5

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Il ne s'affiche rien, c'est normal, nous avons juste fait une affectation.

Ajouter dans la console précédente :

🐍 Console Python
>>> a 

La variable a a bien été modifiée.

Des chaînes de caractères

Dans la console saisir :

🐍 Console Python
>>> a = "Hello "
>>> b = "World"
>>> print(a + b)

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Concaténation

Il s'affiche "Hello World".

👉 Vous avez créé 2 variables, a et b

👉 Vous avez en même temps affecté des valeurs à ces deux variables, puis vous avez affiché a + bqui n'est pas une addition, car a et bne sont pas des nombres.

🐘 On dit qu'on a réalisé une concaténation.

A.3 L'incrémentation d'une variable.⚓︎

«Incrémenter» une variable signifie l'augmenter.

Imaginons une variable appelée compteur. Au démarrage de notre programme, elle est initialisée à la valeur 0.

🐍 Script Python
>>> compteur = 0

Considérons qu'à un moment du programme, cette variable doit être modifiée, par exemple en lui ajoutant 1.

En Python, cela s'écrira :

🐍 Script Python
>>> compteur = compteur + 1

Observée avec des yeux de mathématicien, la précédente instruction est une horreur.

image

Vue avec des yeux d'informaticien, voilà comment est interprétée la commande

🐍 Script Python
>>> compteur = compteur + 1

  1. On évalue la partie droite de l'égalité, donc l'expression compteur + 1.
  2. On va donc chercher le contenu de la variable compteur. Si celle-ci n'existe pas, un message d'erreur est renvoyé.
  3. On additionne 1 au contenu de la variable compteur.
  4. On écrase le contenu actuel de la variable compteur avec la valeur obtenue au 3.

À la fin de ces opérations, la variable compteur a bien augmenté de 1.

Cette procédure d'incrémentation est très très classique, il faut la maîtriser parfaitement !

Syntaxe classique et syntaxe Pythonesque ❤

L'incrémentation d'une variable compteur s'écrira donc en Python :

🐍 Script Python
>>> compteur = compteur + 1
Mais il existe aussi une syntaxe particulière, un peu plus courte :

🐍 Script Python
>>> compteur += 1
Cette syntaxe peut se ranger dans la catégorie des sucres syntaxiques : c'est bien de la connaître, c'est amusant de s'en servir, mais son utilisation n'est en rien obligatoire et peut avoir un effet néfaste, celui d'oublier réellement ce qu'il se passe derrière.

Exercice 1

Écrire le code «classique» et le code «Pythonesque» pour l'instruction suivante :

On initialise une variable score à 100 et on l'augmente de 15.

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Solution

🐍 Script Python
>>> score = 100
>>> score = score + 15
ou encore
🐍 Script Python
>>> score = 100
>>> score += 15

Exercice 2

Écrire le code «classique» et le code «Pythonesque» pour l'instruction suivante :

On initialise une variable cellule à 1 et on la multiplie par 2.

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Exercice 3

Écrire le code «classique» et le code «Pythonesque» pour l'instruction suivante.

On initialise une variable capital à 1000 et on lui enlève 5%.

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

A.4 L'échange de variables⚓︎

Après l'incrémentation, une autre technique de base reviendra fréquemment dans nos codes : l'échange de variables.

Imaginons les variables suivantes :

🐍 Script Python
>>> a = 3
>>> b = 5
Le but est d'échanger les valeurs de a et de b.

Méthode naïve

Echanger les valeurs de a et de b

Dans la console saisir :

🐍 Console Python
>>> a = 3
>>> b = 5
>>> a = b
>>> b = a

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Ajouter dans la console précédente :

🐍 Console Python
>>> a
>>> b 

Les variables a a été modifiée et b non

La variable a a été écrasée dès qu'on lui a donné la valeur de la variable b.

Comment la préserver ?

La situation est similaire au problème suivant : comment échanger le contenu de ces deux verres ?

image

La méthode est évidente : il nous faut un troisième verre.

Nous allons faire de même pour nos variables. Nous allons utiliser une variable temporaire (on parle aussi de variable tampon) pour conserver la mémoire de la valeur de a (par exemple) avant que celle-ci ne se fasse écraser :

Méthode fonctionnelle

Echanger les valeurs de a et de b

Dans la console saisir :

🐍 Console Python
>>> a = 3
>>> b = 5
et une variable temp

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Résoudre le problème dans la console précédente.
Vérifier maintenant que les valeurs de a et de b ont bien été échangées

Syntaxe classique et syntaxe Pythonesque ❤

L'échange de deux variables a et de b s'écrit donc :

🐍 Script Python
>>> temp = a
>>> a = b
>>> b = temp
Mais il existe aussi une syntaxe particulière à Python, bien plus courte :

🐍 Script Python
>>> a, b = b, a
C'est de nouveau un sucre syntaxique. Cette syntaxe nous dispense de créer nous-même une troisième variable. Mais pas de miracle : en interne, Python crée lui-même cette variable temporaire. La simultanéité n'existe pas en informatique.

Exercice 4

Une petite erreur s'est glissée à Poudlard :

🐍 Script Python
>>> maison_Harry = "Serpentard"
>>> maison_Malfoy =  "Gryffondor"
Corriger cette erreur, de deux manières différentes.

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

III. Dérouler un code⚓︎

Plus haut, nous avons exposé comment affecter une valeur une variable, et abordé la notion du type. Un code comprend généralement plusieurs affectations, de plusieurs variables, et effectue des opérations avec ces variables. Il est exécuté ligne par ligne, mais pas forcément dans l'ordre ou elles sont écrites.

Toutefois, pour le moment, nous n'utiliserons pas encore de boucle ou d'instructions conditionnelles, que nous verrons ensuite. Les lignes sont donc interprétées et exécutées dans l'ordre ou elles sont écrites.

Pour lire un code, ou pour mettre au point un code, il est déterminant de savoir le dérouler à la main, sur une feuille.

Il n'existe pas de format standard pour écrire le déroulé d'un code, mais nous allons adopter une de ces deux présentations que nous utiliserons toute l'année. ci-dessous un petit exemple :

✍️ A noter : Méthode 1⚓︎

nom image

A gauche nous indiquons le numéro de ligne, à droite les affectations.

Le numéro de ligne est peu utile dans cet exemple très simple, puisqu'elles sont exécutées dans l'ordre ou elles sont écrites, mais ne perdez pas de vue que ce n'est pas toujours le cas.

✍️ A noter : Méthode 2⚓︎

nom image

Le tableau indique l'état de toutes les variables après exécution de chaque ligne.

IV. Exercices⚓︎

Pour résoudre ces exercices, il est demandé de dérouler le code sur papier.

Attention

Il est interdit de recopier les codes proposés dans un éditeur Python et de les exécuter. Il faut juste réfléchir, et faire le déroulé sur papier comme dans le cours juste au-dessus.

Exercice 1

🐍 Script Python
1
2
3
x = 5
x = x + x
x = x - 5
Que contient la variable x à la fin du code ?

Solution

Déroulé du code ligne par ligne

L1 : x = 5
L2 : x = 10
L3 : x = 5

A la fin on a x = 5

Exercice 2

🐍 Script Python
1
2
3
4
5
nombre = 3
print(nombre + 1)
print(nombre)
nombre = nombre + 4
print(nombre)
Que s'affiche-t-il ?

Solution

Il s'affiche :

4
3
7

Exercice 3
🐍 Script Python
1
2
3
4
5
6
premier = 4
deuxieme = 6
troisieme = premier * deuxieme
deuxieme = troisieme - premier
premier = premier + deuxieme + troisieme
troisieme = deuxieme * premier

Donner la valeur finale de toutes les variables à la fin du programme

Solution
  • Première présentation possible :

L1 : premier = 4
L2 : deuxieme = 6
L3 : troisieme = 24
L4 : deuxieme = 20
L5 : premier = 48
L6 : troisieme = 960

A la fin on a :

premier = 48
deuxieme = 20
troisieme = 960

  • Présentation à privilégier :
ligne premier deuxieme troisieme
L1 4
L2 4 6
L3 4 6 24
L4 4 20 24
L5 48 20 24
L6 48 20 960

V. A retenir⚓︎

Variable

Une variable est une zone de la mémoire de l'ordinateur dans laquelle une valeur est stockée. Aux yeux du programmeur, cette variable est définie par un nom, alors que pour l'ordinateur, il s'agit en fait d'une adresse, c'est-à-dire d'une zone particulière de la mémoire.

😊 En Python on ne "déclare" pas les variables. Une variable est créée en lui affectant une valeur.

print

La fonction print() permet d'afficher dans la console.

Bonnes pratiques de nommage⚓︎

1. Ce qui est autorisé et ce qui ne l'est pas⚓︎

Pour nommer correctement une variable, il existe des règles à respecter.

Les règles

  • le nom de la variable peut contenir les caractères suivants :

    • des lettres non accentuées. Attention, minuscule et majuscule sont des caractères différents. Les accents sont en fait tolérés mais sont à éviter.
    • des chiffres (mais pas comme premier caractère)
    • le tiret du bas _ (underscore, tiret du 8)
  • le nom de la variable ne doit pas commencer par un chiffre

  • le nom de la variable ne doit pas contenir d'espace
  • le nom de la variable ne doit pas être un mot-clé du langage.
Liste des mots-clés réservés par Python

andas assert break class continue def del
elif else except False finally for from global
if import in is lambda None not or
pass raise return True try while with yield

2. Du sens, du sens, du sens⚓︎

Hormis pour les indices (de boucles, de tableaux...) un nom de variable (dans un programme destiné à être lu, par vous ou quelqu'un d'autre) doit impérativement avoir du sens :

🐍 Script Python
# PAS BIEN
if d == 1:
    cep += vm

# BIEN
if date == 1:
    compte_epargne += versement_mensuel

Règle d'or ❤

On ne donne jamais un nom de variable au hasard, on le choisit pour qu'il soit explicite.

image

Oui mais pour donner du sens, il faut souvent plusieurs mots... La longueur du nom de la variable («c'est trop long à taper») n'est plus un problème depuis que la grande majorité des IDE propose la complétion automatique.
Mais comment former ces longs mots ?

3. Syntaxe des noms à rallonge⚓︎

Comment accoler des mots

  • S'il est composé, le nom peut être de la forme:
    • snake_case : les mots sont séparés par des underscores. Conseillé en Python.
    • camelCase : les mots sont séparés par des majuscules mais la 1ère lettre est minuscule. Conseillé en Javascript.
    • PascalCase : les mots sont séparés par des majuscules et la 1ère lettre est majuscule. Conseillé en C.
    • kebab-case : les mots sont séparés par des tirets courts. Conseillé en HTML - CSS.

Sans surprise, en Python, nous utiliserons donc le snake_case.

image

VI. Découverte des types⚓︎

Les types

C'est une notion fondamentale en Python (comme dans tout les langages).

Dans les exemples qui précèdent, nous avons utilisé des nombres entiers a = 1 puis des chaînes de caractères a = "Hello"

Ce ne sont pas les mêmes objets.

Les objets

Qu'est-ce qu'un objet en python ?

Python est un langage orienté objet. Une variable est un mot (ou une simple lettre) qui réfère à une valeur. par exemple, si on entre a = 1, la variable a réfère à la valeur 1.

La valeur est ici un entier et le type de la variable a est un entier.

Connaître un type

On peut connaitre le type d'une variable avec la fonction type(). Essayez en saisissant ceci dans la console :

🐍 Console Python
>>> a = 1
>>> type(a)

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Vous obtenez : <class 'int'>

La fonction type nous permet de savoir que le type de la variable est int ce qui est l'abréviation de integer qui signifie entier en anglais.

Exercice 1

Créer une variable nommée mot à laquelle vous affecterez la valeur "Bonjour" et faites afficher, dans la console, le type de cette variable.

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Solution
🐍 Console Python
>>> mot = "Bonjour"
>>> type(mot)
Exercice 2

Créer une variable nommée nombre à laquelle vous affecterez la valeur 5.5 et faites afficher, dans la console, le type de cette variable.

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Solution
🐍 Console Python
>>> nombre = 5.5
>>> type(nombre)

Le type float est traduit en français par "flottant".

Les types d'objets et les méthodes attachées

Le type d'un objet est important, car chaque objet dispose de méthodes. Les méthodes sont des fonctions spéciales, utilisable spécifiquement avec un type d'objet. Par exemple, les objet de type chaîne de caractères (type str) disposent d'une méthode upper() qui permet de convertir l'objet en majuscule.

Recopier dans la console :

🐍 Console Python
>>> a = "Hello "
>>> type(a)
>>> a.upper()
>>> a   
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

False

Recopier dans la console :

🐍 Console Python
>>> proposition_1 = 1>3
>>> type(proposition_1)
>>> proposition_1
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

True

Recopier dans la console :

🐍 Console Python
>>> proposition_2 = 1<3
>>> type(proposition_2)
>>> proposition_2
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Résumé

Les valeurs des variables sont stockées quelque part dans un emplacement non spécifié dans la mémoire de l’ordinateur sous forme de zéros et de uns.

Notre programme n’a pas besoin de connaître l’emplacement exact où une variable est stockée; il peut simplement s’y référer par son nom.

Ce que le programme doit savoir, c’est le type de données stockées dans la variable. Stocker un entier simple n’est pas la même chose que stocker une lettre ou un grand nombre à virgule flottante.

Même s’ils sont tous représentés par des zéros et des uns, ils ne sont pas interprétés de la même manière et, dans de nombreux cas, ils n’occupent pas la même quantité de mémoire.

Types de base

Ce sont des types de base implémentés directement par le langage qui représentent les unités de stockage de base prises en charge de manière native par la plupart des systèmes. Voici les types Python les plus fréquemment utilisés que nous découvrirons au fil de l'année:

Type Python Traduction Exemples Remarque
int entier 42 0 -1 Ils existent en différentes tailles et peuvent être signés ou non signés, selon qu’ils supportent des valeurs négatives ou non.
float flottant (décimal) 3.1416 ou 0.01 Dans de nombreux langages, on peut choisir le niveaux de précision, en fonction du type utilisé pour les trois types à virgule flottante.
str chaîne de caractères (string) "NSI"``#!python "A" "$" chaque caractère est codé sur 1 à 4 octet.
bool booléen (True ou False) True Ne peut représenter qu’un des deux états, vrai ou faux
tuple p-uplet (255, 127, 0)
list liste [0, 1, 2, 3, 4, 5]
dict dictionnaire {'Homer':43, 'Marge':41, 'Bart':12, 'Lisa':10, 'Maggie':4}
function fonction print
Exécuter le code

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Exécuter le code

Ci-dessus, tout s'est bien passé. 🌵 Mais regardons maintenant :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

À comprendre

👉 Le message d'erreur parle de type(s)

En effet les variables prenom_1, prenom_2, age_2 sont en quelque sorte des "mots".
On le voit car ils sont entre guillemets. La variable age_1 est un nombre.

Différents types

📝 Il existe différents types de valeurs, et on doit toujours veiller à ne pas mélanger des choux avec des carottes.

On sait facilement calculer 1 + 3 ou même 1 + 3.5 mais on ne sait que faire de 1 + "Albert"

En effet 1 est un nombre entier, et "Albert" est une chaine de caractère.

Albert et "Albert"

⚠️ Bien faire la différence entre Albert et "Albert".

Exécuter ci-dessous

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Que s'est-il passé ?

Nous obtenons une erreur une erreur NameError qui nous indique que la variable Albert n'existe pas (pas définie).

🐘 Retenez bien :

  • Albert désigne une variable.
  • "Albert" désigne la chaine de caractère "Albert".

L'opérateur ==

== est utilisé pour déterminer si deux objets python ont la même valeur

⚠️ Il ne faut pas confondre = qui sert à faire une affectation avec ==

L'opérateur ** élève à une puissance.
Par exemple 2**3 vaut \(2^3\) c'est à dire \(2 \times 2 \times 2 = 8\)

Exécuter ci-dessous.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Égaux ou identiques ?
  • Les nombres 1 et 1.0 sont égaux car ils ont la même valeur
  • 🌵 Les nombres 1 et 1.0 ne sont pas identiques car ils sont de types différents

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

QCM à refaire tant que nécessaire ...

  1. Que vaut la variable somme après exécution du code ci-dessous ?

    a = 1
    b = 7
    somme = 'a + b'
    

    • 8

    • le code génère une erreur de type ValueError

    • le code génère une erreur de type TypeError

    • 'a + b'

  2. L'instruction ci-dessous est :

    mot = 'arbre'
    

    • une affectation

    • une expression

    • un calcul

    • cette instruction ne signifie rien

  3. Le code ci-dessous :

    a = 1
    b = 2
    a + b = 3
    print(a + b)
    

    • n'affiche rien

    • génère une erreur

    • affiche 3

    • affiche True

  4. L'instruction ci-dessous :

    a = '5'
    

    • n'a pas de sens

    • est une affectation

    • est une expression

    • est une égalité

  5. L'instruction ci-dessous :

    a = 2
    

    • n'a pas de sens

    • est une affectation

    • est une expression

    • est une égalité

  6. Si on exécute le code ci-dessous, il s'affiche :

    a = '2'
    b = a
    print(a * b) 
    

    • SyntaxError

    • TypeError

    • 4

    • 2*2

VII. Les variables : entrées et sorties au clavier⚓︎

Un programme sert en général à quelque chose : il effectue une tâche précise, répétitive, et peut recommencer avec des données d'entrée différentes. Même un programme très simple peut interagir avec l'utilisateur. Par exemple :

input()

Tester le script ci-dessous

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Tester le script ci-dessous

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Ce code va afficher le carré de x et ici x = 16.
Mais si on veux le carré d'un autre nombre il faut modifier le programme lui même, et ce n'est pas satisfaisant.

Tester le script ci-dessous

Nous allons utiliser input comme nous l'avons vu.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Que s'est-il passé ?

Nous obtenons un message d'erreur :

🐍 Script Python
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'

Nous avons parler des type plus haut, et dans le code ci-dessous nous avons une erreur de type : TypeError

Il est important de commencer à apprendre à lire les messages d'erreurs. L'interpreteur Python vous donne 2 informations :

Le fichier en cause et le numéro de la ligne ou l'erreur s'est produite suivit de contenu de cette ligne.

Une description de l'erreur composée de trois parties (séparées par :) :
1. TypeError : il s'agit donc d'une erreur de type
2. unsupported operand type(s) for ** or pow() : les types des opérandes de la fonction puissance (pow() ou **) sont incorrects.
3. 'str' et 'int' : vous avez utilisé la fonction puissance avec x de type str et 2 de type int

Conclusion: x**2 n'a pas pu être évalué, car x est de type str alors qu'il aurait dû être de type int

x = input() permet de lire une valeur au clavier, mais la valeur lue sera toujours de type str (chaîne de caractère)

Saisir des entiers : version 1

Evidement il est possible de saisir aussi des valeurs numériques! Mais il faut pour cela, convertir la valeur saisie dans le type souhaité. Python convertira si c'est possible :

  • si vous entrez "bonjour" et demandez de convertir en un nombre, vous aurez une erreur.
  • mais si vous entrez 12, il lit "12" et vous pouvez convertir "12" en 12.

Tester :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

La ligne x = int(x) convertit la chaine de caractère x en int

Saisir des entiers et afficher : version 2

Tester :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

On peut condenser en une seule ligne x = int(input())

Saisir des entiers et afficher : version 3

Tester :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Saisir des entiers et afficher : version 4

Tester :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

À vous de jouer

Corriger l'erreur. Votre programme doit afficher l'âge de Monsieur Dupont qui est le double du vôtre.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Que s'est-il passé ?

Si age est de type chaine de caractères, il est possible de faire 2 * age. Cela revient en fait à faire age + age.

On dit qu'on a fait une concaténation des chaines de caractères. Cela revient tout simplement à les juxtaposer.

Solution

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

VIII. Les opérateurs⚓︎

Avec les nombres⚓︎

Tester les opérateurs sur les nombres

Le type d'un objet est important, car chaque objet dispose de méthodes. Les méthodes sont des fonctions spéciales, utilisable spécifiquement avec un type d'objet. Par exemple, les objet de type chaîne de caractères (type str) disposent d'une méthode upper() qui permet de convertir l'objet en majuscule.

Recopier dans la console :

🐍 Console Python
>>> 3 * 2
>>> 3 ** 2
>>> 38 / 5
>>> 38 // 5 
>>> 38 % 5
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Pré-requis : division euclidienne

Rappelons ce qu'est une division euclidienne

Division euclidienne

Opérations avec des nombres

Nom Symbole mathématique syntaxe python Exemple
Addition++3 + 2 = 5
Soustraction--3 - 2 = 1
Multiplication\(\times\)*3 * 2 = 6
Division//7 / 2 = 3.5
Division entière (quotient)//7 // 2 = 3
Modulo (reste de la division entière)%7 % 2 = 1

A savoir

Prenez bien note des opérateurs **, % et //, qui sont d'usage très fréquent.

  • \(3\ \%\ 2\) se lit \(3\) modulo \(2\).
    Par exemple \(38 = 5 \times 7+3\) donc \(38\ \%\ 5\) renvoie 3.

  • \(3\ //\ 2\) se lit \(3\) division entière par \(2\).
    Par exemple \(38 = 5 \times 7+3\) donc \(38\ //\ 5\) renvoie 7.

  • \(3\)**\(2\) se lit \(3\) puissance \(2\)

Sur papier

Effectuez, sans calculatrice et sans Python, les opérations suivantes

  • 14 // 3 =
  • 5 % 2 =
  • 1237 % 2 =
  • 1238 % 2 =
Solution
  • 14 // 3 = 4
  • 5 % 2 = 1
  • 1237 % 2 = 1
  • 1238 % 2 = 0
À vous de jouer

Evaluer mentalement le résultat, puis excuter pour vérifier

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

À vous de jouer

Faire vos propres essais.

Evaluer mentalement le résultat, puis excuter pour vérifier

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

La racine carré

Comment calculer par exemple \(\sqrt{2}\) ? On a besoin de la fonction racine carré. En python, elle existe, mais il faut pour en disposer, importer un module : le module math (sans s)

On dispose alors d'une fonction sqrt(), mais nous reparlerons des fonctions prochainement.

Tester :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Avec des chaînes de caractères⚓︎

Opérations avec des chaînes de caractères

Nom Exemple
Concaténation"Bonjour " + "!" = "Bonjour !"
Répétition"Aie"*3 = "AieAieAie"

À vous de jouer

Exécuter, puis expliquer ce qui s'est passé

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Solution

abc == "abc" est évalué à False car abc vaut "bonjour", mais l'expression est valide.

À vous de jouer

Exécuter, puis expliquer ce qui s'est passé

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Solution

"abc" == bonjour : ici l'expression ne peut pas être évaluée, bonjour est une variable (qui n'existe pas) => NameError

Sur papier

Evaluer les expressions suivantes sur papier, sans utiliser Python

  • "a" + "b"
  • "hahaha" == 3 * "ha"
Solution
  • "ab"
  • True

La chaîne vide

Pour les nombres, il existe le zéro qui est un nombre particulier.

Pour les chaines de caractères, il y a une sorte de zéro : la chaine vide

Et de la même façon que zéro est souvent utilisé en arithmétique, la chaine vide est aussi fréquement utile dans le monde des chaînes de caractères.

La chaîne de caractères vide s’écrit ""

Les opérateurs de comparaisons pour les chaînes de caractères

On peut utiliser <, >, <=, >=, == pour des chaines de caractères.

L'ordre utilisé est l'ordre lexicographique.

Tester ci-dessous :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Bilan⚓︎

Résumé

  • Bien retenir les opérateurs // et % qui donnent respectivement le quotient et le reste de la division euclidienne.

  • Retenir aussi :

    • concaténation "Aie" + "!" qui donne "Aie!"
    • et répétition "Aie"*3 qui donne "AieAieAie".

IX. Des erreurs⚓︎

Variable non définie

Tester puis corriger l'erreur

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Solution

Effectivement la variable nombre_3 n'est pas définie.

On peut par exemple définir nombre_3 avec une affectation

🐍 Script Python
nombre_3 = 5
print(nombre_3)
Erreur d'indentation

On appelle indentation les décalages vers la droite. En Python ils font partie de la syntaxe.

Tester puis corriger l'erreur :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Solution
🐍 Script Python
entier = 4
print(entier + 1)
Erreur de type

Tester puis corriger l'erreur :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Solution

Vous effectuez la division d'une chaine par un entier, cela n'a pas de sens.

🐍 Script Python
nombre = 3
print(nombre / 2)

X. Exercices⚓︎

Exercice 1 : la fête

Ecrivez un code qui compte les têtes, les épaules, les genoux et les orteils à une fête.

Le correcteur va automatiquement définir une variable personnes pour vous, elle contiendra le nombre de personnes à la fête.

Cette variable se trouve dans du code caché.

Votre code doit définir quatre variables :

  • une appelée tetes
  • une appelée epaules
  • une appelée genoux
  • et une appelée orteils

Ces variables doivent respectivement être égales au nombre de têtes, épaules, genoux et orteils à la fête. Votre programme ne doit pas générer de sortie (pas d'affichage)

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013da_i2Vsbt-1eprn90o/cuxly v345fhP*m=gS050b0m0j0c0e0x0h0z0u0x0c0h0h0J010j0e0n010406050h0v0I0I0c0o0y040L0s0x0v0$0s0p050t0-0/0;0?0+0n0405160 190t160+0b0e0A0U0W0Y0!0W0p0K0v0c0K0m0k0n0y0j0F0}0z0F0e0K0F0x1B0F0j0)050P0i0x0m1i0X0Z011A1C1E1C0j1K1M1I0j0o171w0U0_0h0n0c0p0!0f011O1k010E0R0m0p0c0I0m1I1*1,1;1Q1@1M1`1|0)0a0z0G0o0s0n0s0h0e0|0p0z0N1(0o0o0m0u2h0 1 0p170t1w2u1!1$1#1J0b211l0e0p1_2e1I1f1h0V1P2E2G0p0s2K1I0n2n172s2u2X0,1+2i2M1=2Q0o0:0x1I0c1z2n0E0!030d0d0u2R0m1E2P0s0k0C0q0k0l0)0l0 0c2Y2#0*2!202%1Q2)2+2-2/0m2;012?2^2`2|2H2 311/040f36381,3a2s2D013f0c2,172.0F2:2=2@2_0N3p2Q3r0k0B0)0B3w2r390+3A3d0!3D3F053H3J3l3L3o2F3q302 0)0C3V103X3b2$1j3e0s2*3E3h3I3j3K3n3N3.3P3:0D0)0D3@2Z1c2V0 2K2x0b1$2C3!013M1}174i184g4e2Z4p2W2#0z0e0b0!2@2s3Q333G4A4C013,462}4G1:250m4D452{472~3:4H3V3Z3|0!0u4H030z0g0s1!1N4p0U0e0k0N0Y0s0v0h3W3y0+3^3y3`4J4T4F3:3t3(524L4U3O4X3s4Q1{4S594p5b3Q560t37514n0p0)0j0O0m4{4 2t0z5o4$010s0)0J4|5x5z2N3C0)0n0m0o0h0}2G5v2X4~2Z3A4B532#3Q3S4I5W5h3-4O3:3S0z4R4T5i4W5Z1I5m4y3c5A5q040m1+0v1M5R395y4#5I5C045E5w04624z4n0I0e0)3v685H1=650H5F5@3{5I5`5L5N5P5u6m5T39515$4E5Y3:0C3h6z5a5:6C5e1|5.5(3/316D2u5n632(0)1r2Q0v0w6m6a5^645D6Z6i1Q6d6f6m6)0!6k6-6S3e5K5M5O0p5Q6v6;4z6F54314a5#4K4M4V5)716J5g755j495=6R6b5_0)3~5s0R603y6!6o6j6%687o3B6+040l0r6}6#7q046l6h6=3#6@6s6`6u686w500t4x1a4g0t4s2v4k0 2y7W0c1L0m2u4i4~0N0P7l04.
Indice

La première ligne de votre programme pourrait être :

🐍 Script Python
tetes = 1 * personnes
En effet chaque personne a une tête ...

Exercice 2 : la vitesse

Vous assistez à une course cycliste qui monte et descend une colline. Le correcteur automatique définira trois variables pour vous : distance_montee, distance_descente donnant la distance (en km) des deux parties de la course, et temps_total donnant le temps (en minutes) mis au total.

On veut écrire un programme qui indique la vitesse moyenne (en km/min) pour toute la course.

Cliquez et glissez avec la souris pour réarranger les lignes qui sont en désordre.

Indice

Le programme a défini trois variables. Assurez-vous que les lignes soient dans le bon ordre afin que chaque nouvelle variable soit bien définie avant d'être utilisée.

Exercice 3 : échange

Compléter ci-dessous pour échanger les contenus de deux variables x et y

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Solution
🐍 Script Python
x = int(input("saisir x : "))
y = int(input("saisir y : "))
print("Avant échange : ")
print("x = ", x)
print("y = ", y)

temp = y
y = x
x = temp

print("Après échange : ")
print("x = ", x)
print("y = ", y)

QCM à refaire tant que nécessaire ...

  1. Quel message affiche l’ordinateur lorsque l'utilisateur saisit 8.5 ?

    nombre = int (input('Saisir un nombre') )
    double = nombre * 2
    print(double)
    

    • L'ordinateur affiche une erreur

    • 17

    • 16.0

    • 16

  2. On a exécuté le code suivant :

    nombre_d_invites = 25
    nombre_de_courriers = 11
    print(nombre_de_courrier)
    
    On obtient le message suivant :

    Traceback (most recent call last):
    File '<module1>', line 3, in <module>
    NameError: name 'nombre_de_courrier' is not defined

    Que signifie ce message d'erreur ?

    • On a fait une erreur de syntaxe

    • On effectue une opération incorrecte entre deux valeurs de types différents

    • Problème d'indentation du code

    • On utilise une variable non définie

  3. On a exécuté le code suivant :

    cote = input('quel est la longueur du coté du carré ?')
    aire = cote ** 2
    print(aire)
    
    On obtient le message suivant :

    Traceback (most recent call last):
    File '<module1>', line 2, in <module>
    TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'

    Que signifie ce message d'erreur ?

    • On effectue une opération impossible entre deux valeurs de types différents

    • On a mal indenté le code

    • On a utilisé une variable qui n'est pas définie

    • On a fait une erreur de syntaxe

  4. On a exécuté le code suivant :

    cote = 5
        aire = cote ** 2
    print(aire)
    

    Quel type de message d'erreur va-t-on obtenir ?

    • TypeError

    • NameError

    • SyntaxError

    • IndentError

  5. Quel message affiche l’ordinateur lorsque l'utilisateur saisit 5 ?

    nombre = input('Saisir un nombre')
    triple = nombre * 3
    print(triple)
    

    • 15

    • 15.0

    • 555

    • nombrenombrenombre

XI. Expressions et affectations⚓︎

Exemple

ma_variable = 1
print(ma_variable)
ma_variable =  2 * 7
print(ma_variable)

Lorsque l'on écrit en python :

ma_variable = 1

ou bien avec une expression dans le membre de droite :

ma_variable = 2 * 7

👉 Si ma_variable n'existe pas déjà, l'interpréteur python fait 3 choses :

1. Il évalue le membre de droite. (ici, il vaut trivialement 1 dans le 1er exemple, ou 14 dans le second)

2. dans un emplacement de la mémoire, il écrit la valeur. Cet emplacement est repréré par une adresse, par exemple, l'adresse 3005392 qui est un simple numéro qui situe un emplacement dans la mémoire.

3. il crée aussi une variable nommée ma_variable qui est un mot utilisable dans le code, qui réfère à l'emplacement mémoire.

Le programmeur n'a pas à se soucier de l'emplacement mémoire, il n'utilise que le nom de la variable.

👉 Si au contraire, ma_variable existe déjà :

1. Il évalue le membre de droite.

2. Dans l'emplacement de la mémoire correspondant à ma_variable, il écrit la valeur.

⚠️ Ce qui se trouvait avant à cet emplacement là est donc supprimé. (On dit parfois "écrasé")

👉 Ce n'est pas Python qui choisit l'emplacement mémoire, c'est le système d'exploitation qui gère cela. En fait python envoie une requête à l'OS pour stocker une valeur, l'OS choisit un emplacement vide, stocke la valeur et renvoie à l'interpréteur python l'adresse mémoire utilisée.

Expression

Une Expression est quelque chose que python peut évaluer.

Exemple

1 
3 + 2
3 + x # si la variable x est définie
x + y # si les 2 variables sont définies

Mais nous en verrons bien d'autres qui ressembleront par exemple à :

Exemple

fct(x)
mot.find()

Toutes ces expressions peuvent être evaluées, c'est à dire que l'interpréteur python peut calculer la valeur de l'expression.

Résumé - Expression

une expression est quelque chose qui peut être évalué par l'interpréteur python.

Affectation

Exemple

entier = 1

Une affectation est faite dans toutes les instructions du type ma_variable = expression

Le signe = n'a donc pas la même signification qu'en maths, il signifie affecter le résultat de lexpression de droite à la variable indiquée à gauche.

Cela consiste donc à :

  • Evaluer le membre de droite
  • stocker le résultat dans un emplacement mémoire
  • Cette valeur sera par la suite accessible en utilisant le nom de la variable
Adresses mémoires

Exécuter :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Situation 1 : =

Attention

Ne perdez pas de vue que le signe = est une affectation, et non une égalité.

Les instructions comme :

x = 2 * x
i = i + 1
mot = "a" + mot

sont très fréquentes dans nos codes.

  • Python évalue le membre de droite
  • puis affecte la valeur à la variable à gauche du signe =

Ainsi : x = x + 1 n'a pas du tout le sens d'une égalité. Si la valeur de x était 4, par exemple :

  • on évalue x + 1 (ce qui vaut 5)
  • on affecte le résultat à x (donc maintenant x vaut 5)

Situation 2 : = et ==

Attention

Ne perdez pas de vue que le signe = est une affectation, et non une égalité.

Voila une affection avec une expression booléenne :

vrai_ou_faux =  x == 2

  • == est un test d'égalité.
  • x == 2 est une expression booléenne.

L'expression x == 2 vaut True si x vaut 2 et False sinon.

Rapellons que, lors d'une affectation :

  • Python évalue l'expression à droite du signe =
  • puis affecte la valeur à la variable à gauche du signe =

Ainsi ici, python évalue l'expression x == 2 puis affecte le résultat à la variable vrai_ou_faux

  • vrai_ou_fauxprendra la valeur True si x est bien égal à 2
  • Sinon, vrai_ou_fauxprendra la valeur False