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).
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
II. Les affectations⚓︎
Exemple d'affectation
Dans la console saisir :
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 affiche la valeur 2 mais la variable a
n'a pas été modifiée. Vérifiez le en ajoutant dans la console précédente :
a
n'a pas été modifié.
Ajoutons 1 à notre variable
Dans la console saisir :
Il ne s'affiche rien, c'est normal, nous avons juste fait une affectation.
Ajouter dans la console précédente :
La variable a
a bien été modifiée.
Des chaînes de caractères
Dans la console saisir :
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 + b
qui n'est pas une addition, car a
et b
ne 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⚓︎
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⚓︎
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
Que contient la variablex
à 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 | |
---|---|
Solution
Il s'affiche :
4
3
7
Exercice 3
🐍 Script Python | |
---|---|
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
Solution
⏳ La correction viendra bientôt ...
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.
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 :
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.
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.
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 :
False
Recopier dans la console :
True
Recopier dans la console :
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
# Tests
(insensible à la casse)(Ctrl+I)
Exécuter le code
Ci-dessus, tout s'est bien passé. 🌵 Mais regardons maintenant :
# Tests
(insensible à la casse)(Ctrl+I)
À 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
# Tests
(insensible à la casse)(Ctrl+I)
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.
# Tests
(insensible à la casse)(Ctrl+I)
É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
# Tests
(insensible à la casse)(Ctrl+I)
QCM à refaire tant que nécessaire ...
-
Que vaut la variable
somme
après exécution du code ci-dessous ?- 8
- le code génère une erreur de type ValueError
- le code génère une erreur de type TypeError
-
'a + b'
-
L'instruction ci-dessous est :
- une affectation
- une expression
- un calcul
- cette instruction ne signifie rien
-
Le code ci-dessous :
- n'affiche rien
- génère une erreur
- affiche 3
-
affiche
True
-
L'instruction ci-dessous :
- n'a pas de sens
- est une affectation
- est une expression
- est une égalité
-
L'instruction ci-dessous :
- n'a pas de sens
- est une affectation
- est une expression
- est une égalité
-
Si on exécute le code ci-dessous, il s'affiche :
- 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
# Tests
(insensible à la casse)(Ctrl+I)
Tester le script ci-dessous
# Tests
(insensible à la casse)(Ctrl+I)
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.
# Tests
(insensible à la casse)(Ctrl+I)
Que s'est-il passé ?
Nous obtenons un message d'erreur :
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 :
# Tests
(insensible à la casse)(Ctrl+I)
La ligne x = int(x)
convertit la chaine de caractère x
en int
Saisir des entiers et afficher : version 2
Tester :
# Tests
(insensible à la casse)(Ctrl+I)
On peut condenser en une seule ligne x = int(input())
Saisir des entiers et afficher : version 3
Tester :
# Tests
(insensible à la casse)(Ctrl+I)
Saisir des entiers et afficher : version 4
Tester :
# Tests
(insensible à la casse)(Ctrl+I)
À vous de jouer
Corriger l'erreur. Votre programme doit afficher l'âge de Monsieur Dupont qui est le double du vôtre.
# Tests
(insensible à la casse)(Ctrl+I)
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
# Tests
(insensible à la casse)(Ctrl+I)
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 :
Pré-requis : division euclidienne
Rappelons ce qu'est une 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
# Tests
(insensible à la casse)(Ctrl+I)
À vous de jouer
Faire vos propres essais.
Evaluer mentalement le résultat, puis excuter pour vérifier
# Tests
(insensible à la casse)(Ctrl+I)
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 :
# Tests
(insensible à la casse)(Ctrl+I)
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é
# Tests
(insensible à la casse)(Ctrl+I)
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é
# Tests
(insensible à la casse)(Ctrl+I)
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"
.
- concaténation
IX. Des erreurs⚓︎
Variable non définie
Tester puis corriger l'erreur
# Tests
(insensible à la casse)(Ctrl+I)
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 :
# Tests
(insensible à la casse)(Ctrl+I)
Erreur de type
Tester puis corriger l'erreur :
# Tests
(insensible à la casse)(Ctrl+I)
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)
# Tests
(insensible à la casse)(Ctrl+I)
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
# Tests
(insensible à la casse)(Ctrl+I)
QCM à refaire tant que nécessaire ...
-
Quel message affiche l’ordinateur lorsque l'utilisateur saisit 8.5 ?
- L'ordinateur affiche une erreur
- 17
- 16.0
- 16
-
On a exécuté le code suivant :
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
-
On a exécuté le code suivant :
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
-
On a exécuté le code suivant :
Quel type de message d'erreur va-t-on obtenir ?
- TypeError
- NameError
- SyntaxError
- IndentError
-
Quel message affiche l’ordinateur lorsque l'utilisateur saisit 5 ?
- 15
- 15.0
- 555
- nombrenombrenombre
XI. Expressions et affectations⚓︎
Exemple
Lorsque l'on écrit en python :
ou bien avec une expression dans le membre de droite :
👉 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.
Mais nous en verrons bien d'autres qui ressembleront par exemple à :
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
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 :
# Tests
(insensible à la casse)(Ctrl+I)
Situation 1 : =
Attention
Ne perdez pas de vue que le signe =
est une affectation, et non une égalité.
Les instructions comme :
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 :
==
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_faux
prendra la valeurTrue
six
est bien égal à2
- Sinon,
vrai_ou_faux
prendra la valeurFalse
# Tests
(insensible à la casse)(Ctrl+I)