Aller au contenu

Chapitre 1.1 - Variables

I. Les affectations⚓

Exemple d'affectation

Dans la console saisir :

Python Console Session
>>> a = 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

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 1 Ă  a

Exemple d'affichage

Dans la console saisir :

Python Console Session
>>> a = 1
>>> print(a + 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

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

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

Ajoutons 1 Ă  notre variable

Dans la console saisir :

Python Console Session
>>> a = 1
>>> a = a + 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

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

Ajouter dans la console précédente :

Python Console Session
>>> a 

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

Des chaĂźnes de caractĂšres

Dans la console saisir :

Python Console Session
>>> 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.

II. 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.

III. Exercices⚓

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

Exercice 1

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

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
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
Exercice 4 - sur papier : l'algorithme d'Ă©change

Algorithme d'Ă©change : sujet

Solution

Algorithme d'Ă©change : correction

IV. 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.

V. 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 :

Python Console Session
>>> 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
Python Console Session
>>> 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
Python Console Session
>>> 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 :

Python Console Session
>>> 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 :

Python Console Session
>>> 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 :

Python Console Session
>>> 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.

Les types de données fondamentaux

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. Ils peuvent principalement ĂȘtre classĂ©s en:

Type représente exemples remarque
str chaĂźne de caractĂšres 'A’   â€˜$’   'bonjour' chaque caractĂšre est codĂ© sur 1 Ă  4 octet.
int Entiers numĂ©riques 0   -1   102 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 Nombres à virgule flottante 3.14 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.
bool BoolĂ©en True False Ne peut reprĂ©senter qu’un des deux Ă©tats, vrai ou faux.

Exécuter le code

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
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)
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)
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 ==

Exécuter ci-dessous

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
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)
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

VI. 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)
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)
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)
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 :

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

VII. 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 :

Python Console Session
>>> 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)
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)
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)
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)
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)
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 ""

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".

VIII. 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)
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

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

Tester puis corriger l'erreur :

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
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 appelle indentation les décalages vers la droite. En Python ils font partie de la syntaxe.

Solution
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)
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.

Python
nombre = 3
print(nombre / 2)

IX. 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)
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

ENCRYPTION_TOKEN

Solution

🐍 Proposition de correction
1
2
3
4
5
# Votre code ci-dessous
tetes = personnes
epaules = 2*personnes
genoux = 2*personnes
orteils = 10*personnes

ENCRYPTION_TOKEN

Indice

La premiĂšre ligne de votre programme pourrait ĂȘtre :

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

X. 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)
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

XI. Bonnes pratiques de nommage⚓

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)
    • 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

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 :

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 ?

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