TP no 1 : Prise en main de Python

publicité
Lycée Victor Hugo
MPSI-PCSI 2016-2017
TP no 1 : Prise en main de Python
Introduction
Lors de cette séance, nous allons faire connaissance avec le langage Python, plus précisément la version Python 3. Nous n’utiliserons pas directement Python ; nous passerons
par un environnement de développement intégré (en anglais IDE : interactive development environnement) appelé Pyzo.
Nous découvrirons les types de données les plus élémentaires que nous aurons à manipuler : nombres entiers, nombres flottants, booléens, quelques opérations simples réalisables sur ces types de données. Nous aborderons également la notion de variable et le
mécanisme de l’affectation.
I
Lancement de l’IDE Pyzo
Lancer Pyzo : le professeur vous donnera les instructions pour réaliser cette opération.
Une fenêtre apparaît, contenant diverses sous-fenêtres. La sous-fenêtre « shell » doit
présenter quelques lignes ressemblant à
Python 3.4.1 | Continuum Analytics , Inc .| ( default , May 19 2014 ,
13:02:30) on Windows (64 bits ) .
This is the IEP interpreter with integrated event loop for PYSIDE
.
Using IPython 2.1.0 -- An enhanced Interactive Python .
?
-> Introduction and overview of IPython ’s features .
% quickref -> Quick reference .
help
-> Python ’s own help system .
object ?
-> Details about ’ object ’ , use ’ object ?? ’ for extra
details .
In [1]:
Dans cette fenêtre, le symbole In [1]: est le prompt (ou invite) de Python 1 .
Nous pouvons y saisir des instructions élémentaires du langage Python (s’étendant éventuellement sur plusieurs lignes) et observer le résultat, qui apparait derrière un indicateur
Out portant le même numéro :
In [2]: 6*7
Out [2]: 42
1. Quand on utilise Python directement (sans utiliser d’IDE), il s’agira plutôt de >>>.
1
Lycée Victor Hugo
MPSI-PCSI 2016-2017
Nous travaillons alors en mode « ligne de commande interactive ». Python se comporte
alors un peu comme une super calculatrice 2 .
Dans tous les exemples qui suivent, il faudra taper vous-même ce qui se
trouve après le prompt, puis appuyer sur la touche Entrée . Python répond
alors sur la ligne suivante. La maîtrise d’un langage de programmation passe
essentiellement par la pratique !
II
1
Types simples. Valeurs.
Entiers
Python peut manipuler des entiers, positifs ou négatifs, et de taille quelconque.
Tapez les exemples suivants. Ici Python répond alors dans la ligne suivante, en se
contentant de redonner la valeur de l’entier considéré. Pour le moment rien de bien palpitant. Pour l’entier très grand, tapez ce que vous voulez...
In [1]: 1
Out [1]: 1
In [2]: 2
Out [2]: 2
In [3]: -75925
Out [3]: -75925
In [4]: 2 5 6 9 4 8 2 6 5 1 4 0 5 1 4 5 9 1 0 5 6 1 0 5 8 6 1 5 1 5 9 1 5
Out [4]: 2 5 6 9 4 8 2 6 5 1 4 0 5 1 4 5 9 1 0 5 6 1 0 5 8 6 1 5 1 5 9 1 5
Attention Dans les versions antérieures de Python, il y avait deux types d’entiers : les entiers
et les entiers longs. Cette distinction a disparu à partir de la version 3.
On peut alors faire des calculs habituels sur ces entiers de manière très naturelle.
Addition, soustraction, multiplication s’obtiennent ainsi :
In [5]: 5 + 9
Out [5]: 14
In [6]: 5 - 8
Out [6]: -3
In [7]: 78 * 45
Out [7]: 3510
In [8]: 2 5 6 9 4 8 2 6 5 1 4 0 5 1 4 5 9 1 0 5 6 1 0 5 8 6 1 5 1 5 9 1 5 *
71202130156150456015261056
Out [8]:
18295263817931976953295246176894869801857309201762623706240
2. Dans le TP suivant, nous verrons qu’il est possible d’enregistrer des ensembles d’instructions dans
des fichiers, appelés scripts, que l’on pourra faire exécuter par Python, toujours à partir de Pyzo.
2
Lycée Victor Hugo
MPSI-PCSI 2016-2017
La notion de type est fondamentale en informatique. On peut le tester pour les expressions déjà manipulées, à l’aide de l’instruction type. Ici Python répond par “ int ”,
ce qui signifie que les nombres manipulés sont de la classe integer, i.e. des nombres entiers
(relatifs).
In [10]: type (5)
Out [10]: int
In [11]: type (6)
Out [11]: int
In [12]: type (5 + 6)
Out [12]: int
In [13]: type (5 - 6)
Out [13]: int
In [14]: type (5 * 6)
Out [14]: int
Tout ceci est bien naturel, puisque la somme, la différence et le produit de deux entiers
sont toujours des entiers.
Il n’en va pas forcément de même pour la division, puisque en général le rapport de
deux entiers n’est pas un entier. Observons ce qui se passe :
In [15]: 8/3
Out [15]: 2. 66 66 66 66 66 666 66 5
In [16]: type (8/3)
Out [16]: float
On voit donc que le type du résultat d’une division est un nouveau type : le type
“ float ” (nombre à virgule flottante). On le remarque à cause du séparateur décimal (le
point “ . ” en Python).
À l’issue d’une division “ / ”, le résultat sera toujours un flottant, même si le résultat
est mathématiquement un entier :
In [17]: 8/4
Out [17]: 2.0
In [18]: type (8/4)
Out [18]: float
(noter la réponse donnée sous la forme 2.0, avec présence du séparateur décimal)
Attention donc :
— Le résultat d’une division est du type float.
— 2 et 2.0 ne sont pas la même « chose »(à proprement parler, on devrait dire que ce
sont deux types d’objets différents dans Python) car 2 est de type entier et 2.0 est
un nombre à virgule flottante, de type flottant.
Si on veut absolument avoir un résultat entier, il faut utiliser la division entière (division euclidienne). L’opérateur en Python correspondant est “ // ”, comme on le voit
3
Lycée Victor Hugo
MPSI-PCSI 2016-2017
ci-dessous 3 :
In []: 8 // 4
Out []: 2
In []: type (8 // 4)
Out []: int
In []: 8 // 3
Out []: 2
In []: type (8 // 3)
Out []: int
Si le résultat de la division tombe juste, on a donc la réponse exacte, sous forme d’un
entier. Sinon, a // b donne le quotient dans la division euclidienne de a par b (et c’est
aussi un entier).
Attention
Ce comportement était différent dans les versions antérieures de Python.
Pour prendre la puissance d’un entier on peut utiliser deux syntaxes différentes :
l’opérateur ** ou la fonction pow.
In []: 5 ** 4
Out []: 625
In []: pow (5 , 4)
Out []: 625
Nous avons déjà entrevu le type float, que nous approfondissons maintenant.
2
Nombres à virgule flottante
Il s’agit du type naturel pour représenter les nombres réels (et donc ceux utilisés pour
des calculs numériques).
Pour écrire un tel nombre on peut utiliser deux notations. La première utilise juste le
séparateur décimal.
In []: 256.32
Out []: 256.32
Si le nombre est trop grand ou trop petit, on peut utiliser la notation scientifique
en donnant sa mantisse et exposant. Par exemple, pour saisir le nombre 1, 619 . 10−19 ,
l’écriture 1.619*10**(-19) est pénible et peu lisible. On lui préférera toujours :
In []: 1.619 e -19
Out []: 1.619 e -19
In []: 1.619*10**( -19)
Out []: 1.619 e -19
# é criture lourde ...
# ... m ê me r é sultat !
Le “ e-19 ” est donc à remplacer mentalement par “ ×10−19 ”.
3. La numérotation des entrées/sorties n’ayant pas d’importance, on écrira In []: dans l’énoncé à
partir de maintenant.
4
Lycée Victor Hugo
MPSI-PCSI 2016-2017
On dispose bien sûr des mêmes opérations que sur les entiers : addition, soustraction,
multiplication, division, puissance. Ici pas de problème de typage : le résultat de ces
opérations sur deux float est un float.
In []: 6.5 + 3.2
Out []: 9.7
In []: type (6.5 + 3.2)
Out []: float
In []: 6.5 - 3.2
Out []: 3.3
In []: type (6.5 - 3.2)
Out []: float
In []: 6.5 * 3.2
Out []: 20.8
In []: type (6.5 * 3.2)
Out []: float
In []: 6.5 / 3.2
Out []: 2.03125
In []: type (6.5 / 3.2)
Out []: float
Qu’en est-il si un des arguments est un entier et l’autre un nombre à virgule flottante ?
In []:
Out []:
In []:
Out []:
3 + 5.6
8.6
type (3 + 5.6)
float
Vous pouvez essayer avec les autres opérations : on constate donc que dans tous les
cas le résultat est de type float.
Abordons maintenant un point important qui sera développé dans le prochain cours :
les capacités d’un ordinateur étant finies, ce dernier ne peut pas manipuler de manière
exacte tous les nombres réels. Ceux-ci sont donc stockés sous forme approchée par la
machine, et les calculs effectués avec eux sont donc également nécessairement approchés.
Illustrons ceci par le petit exemple suivant :
In []: 0.1
Out []: 0.1
In []: 0.1 + 0.1
Out []: 0.2
In []: 0.1 + 0.1 + 0.1
Out []: 0 . 30 0 0 00 0 0 00 0 0 00 0 0 4
5
Lycée Victor Hugo
MPSI-PCSI 2016-2017
On voit qu’en apparence 0.1 et 0.1+0.1 sont traités de manière exacte. Mais ce n’est
qu’une apparence comme le montre le dernier calcul. La conclusion à tirer est qu’il faut
toujours être prudent vis-à-vis de la précision obtenue dans des calculs numériques avec
des nombres à virgule flottante. Tout ceci sera abordé plus en détail dans le cours.
3
Booléens
Le type booléen ne peut prendre que deux valeurs : vrai / faux. En Python, ce type
s’appelle bool, et les deux valeurs possibles qu’il recouvre s’appellent True et False. Attention à la majuscule, sans quoi Python ne reconnaîtra pas ces valeurs et provoquera
une erreur. Il sert essentiellement pour les instructions conditionnelles (tests) étudiées dans
le prochain TP.
In []: True
Out []: True
In []: False
Out []: False
In []: type ( True )
Out []: bool
In []: false
# oubli de la majuscule !
----------------------------------------------------------------NameError
Traceback ( most recent call last )
< ipython - input -5 -74 d9a83219ca > in < module >()
----> 1 false
NameError : name ’ false ’ is not defined
Une réponse de type bool est produite lorsqu’on compare deux expressions à l’aide
est plus grand que 3,14,
d’opérateurs de comparaison. Par exemple, pour savoir si 22
7
on peut écrire ;
In []: 22/7 > 3.14
Out []: True
Les opérateurs de comparaison à connaître sont les suivants :
==
!=
<
<=
>
>=
est
est
est
est
est
est
égal à
différent de
strictement inférieur à
inférieur ou égal à
strictement supérieur à
supérieur ou égal à.
Attention Pour tester si deux expressions sont égales, il faut utiliser == (deux signes
“ égal ”) et non = (qui sert à l’affectation des variables).
In []: 6*7 == 48
Out []: False
6
Lycée Victor Hugo
MPSI-PCSI 2016-2017
In []: 6*7 = 42
File " < ipython - input -57 -12 c0b6687a2d > " , line 1
6*7 = 48
^
SyntaxError : can ’t assign to operator
In []: 6*7 == 42
Out []: True
On peut tester des affirmations plus complexes en utilisant des opérateurs logiques.
Les trois principaux sont le suivants :
not “ non ”, contraire logique
and “ et ” logique
or
“ ou ” logique (inclusif)
Essayez de bien comprendre les exemples suivants 4 :
In []: not (2 > 3)
Out []: True
In []: (4*5 > 20) and (9 -4*3 <= 0)
Out []: False
In []: (4*5 > 20) or (9 -4*3 <= 0)
Out []: True
Dressez sur un papier la table de vérité des trois opérateurs logiques not, and et or
en faisant calculer à Python tous les cas possibles. En voici deux :
In []: True and False
Out []: False
In []: True or False
Out []: True
Table de vérité du not
not True False
/////
Table de vérité du and
and
True False
True
False
False
Table de vérité du or
or
True False
True
True
False
Une case est déjà remplie d’après les essais précédents.
Remarque Dans la fenêtre shell, vous disposez d’un historique des commandes déjà tapées
dans lequel vous pouvez naviguer à l’aide des touches flèche vers le haut et flèche vers le bas .
Cela permet de gagner un peu de temps et d’éviter de taper trop de choses.
4
Autres types
Il existe bien d’autres types moins rudimentaires et plus structurés. Nous en étudierons
certains dans la suite du cours. On peut citer :
— les chaînes de caractères,
4. Les parenthèses ne sont pas obligatoires mais peuvent rendre le code plus clair.
7
Lycée Victor Hugo
MPSI-PCSI 2016-2017
— les listes,
— les tuples,
— les dictionnaires...
8
Téléchargement