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 ?

L'éditeur et la console

Lorsque l'on code avec un IDE (Integrated Developpement Environement) comme par exemple EduPython, on dispose de 2 zones principales : l'éditeur de code (en haut), et la console (en bas).

edupython

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"
(Shift+Esc ; 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 affectations⚓︎

Exemple d'affectation

Dans la console saisir :

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

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

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

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

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

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

Algorithme d'échange : sujet

Solution

Algorithme d'échange : correction

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.

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.

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)
Entrer ou sortir du mode "deux colonnes"
(Shift+Esc ; 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"
(Shift+Esc ; 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"
(Shift+Esc ; 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"
(Shift+Esc ; 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"
(Shift+Esc ; 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"
(Shift+Esc ; 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"
(Shift+Esc ; 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"
(Shift+Esc ; 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"
(Shift+Esc ; 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"
(Shift+Esc ; 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"
(Shift+Esc ; 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"
(Shift+Esc ; 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"
(Shift+Esc ; 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"
(Shift+Esc ; 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"
(Shift+Esc ; 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"
(Shift+Esc ; 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"
(Shift+Esc ; 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"
(Shift+Esc ; 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"
(Shift+Esc ; 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 ""

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"
(Shift+Esc ; 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"
(Shift+Esc ; 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"
(Shift+Esc ; 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"
(Shift+Esc ; 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

.128013cP*- sSfbugnxveih4lmdoV0p6_2=tray1/35050v0p0E0G0q0t0g0f0b0t0G0g0g0D010E0q0z010406050g0k0u0u0G0F0H040h0w0t0k0$0w0m050J0-0/0;0?0+0z0405160 190J160+0v0q0o0U0W0Y0!0W0m0l0k0G0l0p0e0z0H0E0r0}0f0r0q0l0r0t1B0r0E0)050P0j0t0p1i0X0Z011A1C1E1C0E1K1M1I0E0F171w0U0_0g0z0G0m0!0C011O1k010i0R0p0m0G0u0p1I1*1,1;1Q1@1M1`1|0)0a0f0c0F0w0z0w0g0q0|0m0f0N1(0F0F0p0b2h0 1 0m170J1w2u1!1$1#1J0v211l0q0m1_2e1I1f1h0V1P2E2G0m0w2K1I0z2n172s2u2X0,1+2i2M1=2Q0F0:0t1I0G1z2n0i0!030B0B0b2R0p1E2P0w0e0C0A0e0I0)0I0 0G2Y2#0*2!202%1Q2)2+2-2/0p2;012?2^2`2|2H2 311/040C36381,3a2s2D013f0G2,172.0r2:2=2@2_0N3p2Q3r0e0K0)0K3w2r390+3A3d0!3D3F053H3J3l3L3o2F3q300e0s0)0s3V103X3b2$1j3e0w2*3E3h3I3j3K3n3N3.3P3:0L0)0L3^2Z1c2V0 2K2x0v1$2C3!013M1}174j184h4f2Z4q2W2#0f0q0v0!2@2s3Q333G4B4D013,472}4H1:250p4E462{482~3:4I3V3Z3}0!0b4I030f0x0w1!1N4q0U0q0e0N0Y0w0k0g3W3y0+3_3y3{4K4U4G3:3t3(534M4V3O4Y3s4R1{4T5a4q5c3Q570J37524o0m0)0E0O0p4|502t0f5p4%010w0)0D4}5y5A2N3C0)0z0p0F0g0}2G5w2X4 2Z3A4C542#3Q3S4J5X5i3-4P3:3S0f4S4U5j4X5!1I5n4z3c5B5r040p1+0k1M5S395z4$5J5D045F5x04634A4o0u0q0)3v695I1=660d5G5^3|5J5{5M5O5Q5v6n5U39525%4F5Z3:3=5$4L4N4W5*313=5-5g5/5)3/6K5?5o642(0)1r2Q0k0n6n6b5_655E6#6j1Q6e6g6n6+0!6l6/6U3e5L5N5P0m5R6w6?4A6A0B55314b6F6O4O6Q0e4b6M1|776I79754#6c5`0)3 5t0R613y6$6p6k6)697r3B6-040I0y6 6%7t046m6i6@3#6_6t6|6v696x510J4y1a4h0J4t2v4l0 2y7Z0G1L0p2u4j4 0N0P7o04.
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"
(Shift+Esc ; 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"
(Shift+Esc ; 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