TP1 - Nombres et variables ¶
Avant de commencer¶
Python¶
Python est un langage interprété, de haut niveau et orienté objet !
Un langage interprété est directement exécuté par l'interpréteur, contrairement à un langage compilé qui est traduit par un compilateur avant de pouvoir être exécuté par la machine.
Un langage de haut niveau se rapproche du langage naturel, contrairement à un langage de bas niveau comme l'assembleur qui se rapproche du langage machine.
Un langage orienté objet se base sur des classes qui permettent de simplifier son utilisation.
Ce charabia n'en sera plus à la fin de l'année...
IDE (Integrated Development Environment)¶
IDLE est l'environnement de développement par défaut pour Python, il permet d'utiliser :
- le mode interactif qui consiste en un dialogue avec l'interpréteur
- le mode programme qui consiste à faire exécuter, par l'interpréteur, un programme dans un fichier source
VS Code est un environnement de développement (professionnel) très largement utilisé, il permet :
- de programmer dans n'importe quel langage
- d'installer des extensions pour avoir plus de fonctionnalités
C'est ce dernier que nous utiliserons avec ...
Jupyter Notebook¶
C'est un environnement interactif qui permet de combiner dans le même document :
- du texte en markdown
- du code en Python
# Une ligne débutée par un hashtag est un commentaire (non exécuté)
Nombres¶
Entiers¶
Les entiers de type int représentent les entiers relatifs.
On peut utiliser les opérations élémentaires :
- l'addition +
- la soustraction -
- la multiplication *
- la division /
La priorité des opérations est usuelle
2+5*(10-2)
La fonction type() montre que le résultat est bien un entier (on y reviendra dans le TP2)
type(2+5*(10-2))
Observons la division (décimale)
(2+5*(10-2))/7
Attention, la division ne fournit pas un entier (aviez-vous remarqué le .0 ?)
type((2+5*(10-2))/7)
On peut obtenir le quotient de la division euclidienne (entière)
50//6
Mais aussi le reste de la division euclidienne
50%6
Flottants¶
Ils correspondent au type float et sont représentés en double précision (64 bits).
On peut utiliser la notation décimale ou scientifique pour les définir.
1.6
1.2e-4
Certaines expressions peuvent générer des valeurs spéciales pour représenter :
- des dépassements de capacité (inf)
- des opérations non valides (nan)
1e200 * 1e200
1e400 * 0
Un nombre est représenté de manière approchée, par un flottant, s'il n'a pas de développement fini en base 2.
C'est le cas des irrationnels, des rationnels non décimaux et même de certains décimaux !
Pour observer certains flottants, on commence par importer la bibliothque math (on y reviendra dans le TP 3)
from math import *
Irrationnel pi
pi
Irrationnel racine carrée de 2
sqrt(2)
Rationnel non décimal 1/3
1/3
Décimal 1.6
1.6
Attention, cette affichage cache une réalité surprenante !
# On reviendra sur la fonction print() dans le TP2
print("%.20f" % 1.6)
Il faut donc être très prudent lorsque l'on manipule des nombres flottants.
1.2 * 3
Certaines propriétés algébriques ne sont plus garanties à cause des erreurs d'approximation !
L'addition n'est plus associative
1.6 + (3.2 + 1.7)
(1.6 + 3.2) + 1.7
La multiplication n'est plus distributive par rapport à l'addition
1.5 * (3.2 + 1.4)
1.5 * 3.2 + 1.5 * 1.4
Variables et affectation¶
Les valeurs des objets manipulés (entiers, flottants, ...) ou les résultats des "calculs" peuvent être mémorisés par l'interprète, afin d'être réutilisés plus tard dans d'autres "calculs".
Pour cela, on utilise :
- des variables que l'on nomme le plus explicitement possible (pour une bonne lisibilité du code)
- l'affectation représentée par le symbole = qui n'a donc pas du tout la même signification qu'en mathématiques !
longueur = 7
largeur = 4
aire_rectangle = longueur * largeur
L'interprète n'affiche rien, mais il n'a pas rien fait !
Pour accéder à la valeur mémorisée dans une variable, on utilise le nom de la variable.
aire_rectangle
Une nouvelle affectation permet de modifer la valeur d'une variable.
largeur = 3
largeur
/!\ la valeur de la variable aire_rectangle n'est pas mise à jour sauf si une nouvelle affectation est effectuée
aire_rectangle
aire_rectangle = longueur * largeur
aire_rectangle
Une variable peut être imaginée comme une boîte portant un nom (ou une étiquette) et contenant une valeur.
L'ensemble des associations nom_variable $ \fbox {valeur} $ constitue l'état de l'interprète Python : $$ \Big\{ \textrm{longueur}\ \fbox{7},\textrm{largeur}\ \fbox{3},\textrm{aire\_rectangle}\ \fbox{21} \Big\} $$
Cet état évolue en fonction des instructions exécutées (l'une après l'autre). On dit qu'elles ont un effet de bord.
Pour pouvoir suivre l'évolution de l'état de l'interprète (utile pour débugger), on utilise la fonction d'affichage print().
largeur = largeur + 2
print(largeur)
longueur = longueur * 4
print(longueur)
aire_rectangle = longueur * largeur
print(aire_rectangle)
Exercices¶
Exercice 1¶
Reproduire et compléter le tableau de suivi des variables ci-dessous. $$\begin{array}{|l|c|c|c|} \hline \text{instruction} & \text{longueur} & \text{largeur} & \text{aire\_rectangle} \\ \hline \hline \text{longueur = 7} & & & \\ \hline \text{largeur = 4} & & & \\ \hline \text{aire\_rectangle = longueur * largeur} & & & \\ \hline \text{largeur = 3} & & & \\ \hline \text{aire\_rectangle = longueur * largeur} & & & \\ \hline \text{largeur = largeur + 2} & & & \\ \hline \text{longueur = longueur * 4} & & & \\ \hline \text{aire\_rectangle = longueur * largeur} & & & \\ \hline \end{array}$$
Exercice 2¶
Considérons la séquence d'instructions suivantes :
a = 2
b = 3
c = a ** b (** correspond à l'exponentiation c'est à dire $a^b$)
a = c - b
b = a * a
c = a + b * c
- Effectuer le tableau de suivi des variables.
- Ecrire le programme python permettant de vérifier chaque ligne de votre tableau.
# Réponse
Exercice 3¶
Ecrire un programme python permettant de calculer le volume d'un cylindre de hauteur $h$ (cm) et de rayon $r$ (cm).
Il doit afficher le volume en $cm^3$, mais aussi en litre.On pourra le tester avec $h=20$ et $r=5$.
# Réponse