I. Python en mode interactif▲
Nous avons vu comment Python peut s'utiliser en mode interactif en le lançant dans un terminal par la commande python.
JPh@ubuntu:~$
python
Python 2
.7
.7
|
Anaconda 2
.0
.1
(
64
-bit)|
(
default, Jun 2
2014
, 12
:34
:02
)
[GCC 4
.1
.2
20080704
(
Red Hat 4
.1
.2
-54
)] on linux2
Type "help"
, "copyright"
, "credits"
or "license"
for
more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://binstar.org
>>>
C'est pratique pour utiliser Python comme une calculatrice ou pour programmer des algorithmes simples. Mais :
- l'environnement de calcul est assez pauvre ;
- le mode interactif ne permet pas de développer des programmes complexes : à chaque utilisation, il faut réécrire le programme. La modification d'une ligne oblige à réécrire toutes les lignes qui la suivent. Pour développer un programme plus complexe, on saisit son code dans un fichier texte (avec une extension .py en principe) : plus besoin de tout retaper pour modifier une ligne, plus besoin de tout réécrire à chaque lancement.
Toutefois, il existe un environnement interactif beaucoup plus riche nommé IPython (commande ipython) :
JPh@ubuntu:~
$ ipython
Python 2.7.7
|
Anaconda 2.0.1
(
64
-
bit)|
(
default, Jun 2
2014
, 12
:34
:02
)
Type "copyright"
, "credits"
or
"license"
for
more information.
IPython 2.1.0
--
An enhanced Interactive Python.
Anaconda is
brought to you by Continuum Analytics.
Please check out: http://
continuum.io/
thanks and
https://
binstar.org
? ->
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
]: a=
15
In [2
]: print
a
15
In [3
]: str =
"bonjour l'univers"
La commande %whos produit l'affichage des variables :
In [4
]: %
whos
Variable Type Data/
Info
----------------------------
a int 15
str str bonjour l'univers
help() lance l'aide interactive :
In [6
]: help
(
)
Welcome to Python 2.7
!
This is
the online help utility.
If this is
your first time using Python, you should definitely check out
the tutorial on the Internet at http://
docs.python.org/
2.7
/
tutorial/
.
Enter the name of any module, keyword, or
topic to get help on writing
Python programs and
using Python modules. To quit this help utility and
return
to the interpreter, just type "quit"
.
To get a list of available modules, keywords, or
topics, type "modules"
,
"keywords"
, or
"topics"
. Each module also comes with
a one-
line summary
of what it does; to list the modules whose summaries contain a given word
such as
"spam"
, type "modules spam"
.
help>
Dans l'aide interactive, keywords retourne les mots-clefs réservés (à ne pas utiliser pour la définition d'une variable, d'une fonction, d'une classe…).
help>
keywords
Here is
a list of the Python keywords. Enter any keyword to get more help.
and
elif
if
print
as
else
import
raise
assert
except
in
return
break
exec
is
try
class
finally
lambda
while
continue
for
not
with
def
from
or
yield
del
global
pass
On obtient une description d'un mot-clef donné en le saisissant, par exemple : help> while produit ce résultat (touche q pour quitter) :
The ``while
`` statement
***********************
The ``while
`` statement is
used for
repeated execution as
long as
an
expression is
true:
while_stmt ::=
"while"
expression ":"
suite
["else"
":"
suite]
This repeatedly tests the expression and
, if
it is
true, executes the
first suite; if
the expression is
false (
which may be the first time
it is
tested) the suite of the ``else
`` clause, if
present, is
executed and
the loop terminates.
A ``break
`` statement executed in
the first suite terminates the loop
without executing the ``else
`` clause's suite. A ``continue``
statement executed in the first suite skips the rest of the suite and
goes back to testing the expression.
(END)
Voir aussi : www.python.org/doc/
II. Écrire un programme Python▲
Le programme s'écrit dans un fichier texte que l'on sauvegarde avec l'extension .py. Le lancement du programme peut se faire à partir d'un terminal par la commande python nomfichier.py.
Il est préférable d'utiliser un environnement de développement qui rassemble tous les outils nécessaires au programmeur pour développer des logiciels.
II-A. Environnement de programmation▲
Par exemple avec la distribution Anaconda, vous disposez d'un véritable environnement de programmation Python nommé Spyder (commande spyder dans le terminal) :
La suite Anaconda rassemble tout le nécessaire pour faire ses premiers pas en Python scientifique. L'environnement Spyder offre un éditeur de texte (avec notamment la coloration syntaxique), les interpréteurs interactifs Python et IPython, des fenêtres d'exploration de vos fichiers, variables, objets, des outils de débogage, etc.
Premier programme : le résultat apparaît dans la console en bas à droite après avoir lancé l'exécution :
III. La fonction input()▲
La fonction input() attend la saisie par l'utilisateur d'un nombre ou d'une chaîne de caractères, et retourne la valeur saisie. Une chaîne de caractères doit être saisie entre ' ' (guillemets simples) ou " " (guillemets doubles).
>>>
s=
input(
)
'une chaîne de caractères'
>>>
print
"vous avez saisi"
, s
vous avez saisi une chaîne de caractères
En attendant d'écrire réellement votre premier programme, vous pouvez maintenant saisir vos commandes à partir de l'interpréteur Python intégré dans l'environnement Spyder.
On peut passer en argument à la fonction input(
) une chaîne de caractères qui sera affichée à l'écran.
>>>
s =
input(
'Saisissez une chaîne de caractères : '
)
Saisissez une chaîne de caractères : 'ma chaîne'
>>>
print
"c'est :"
, s
c'est : ma chaîne
>>>
La fonction input(
) renvoie une valeur du même type que celle saisie.
IV. La fonction raw_input()▲
Comme input(
), raw_input() attend la saisie par l'utilisateur d'une valeur. Elle retourne toujours une valeur de type chaîne de caractères (str). La chaîne de caractères saisie n'a plus besoin d'être entre guillemets (' ' ou " ").
>>>
r=
raw_input(
); s=
raw_input(
)
3.1415
une chaîne sans apostrophe
>>>
type(
r)
<
type 'str'
>
>>>
type(
s)
<
type 'str'
>
>>>
print
r,s
3.1415
une chaîne sans apostrophe
>>>
Bien entendu, vous ne pouvez pas effectuer de calcul sur les chaînes de caractères comme pour les nombres entiers ou réels.
>>>
r
'3.1415'
>>>
r*
2
'3.14153.1415'
>>>
r**
2
Traceback (
most recent call last):
File "<stdin>"
, line 1
, in
<
module>
TypeError
: unsupported operand type(
s) for
**
or
pow(
): 'str'
and
'int'
>>>
Mais on peut convertir la chaîne à l'aide des fonctions int(
) ou float(
) :
V. Type bool▲
Lorsque l'on saisit les conditions suivantes, les valeurs retournées peuvent prendre deux valeurs : True
ou False
. Elles sont de type booléen (bool).
Opérateurs de comparaison :
a |
a a une valeur strictement inférieure à celle de b |
a |
a a une valeur inférieure ou égale à celle de b |
a |
a et b ont même valeur |
a |
a et b ont des valeurs différentes |
et pareillement a >
b et a >=
b.
On peut effectuer des opérations logiques sur les booléens (par ordre de priorité) : or
, and
, not
(
) :
>>>
a =
(
1
<=
2
)
>>>
print
a, type(
a)
True
<
type 'bool'
>
>>>
b =
(
a==
False
)
>>>
print
b, type(
b)
False
<
type 'bool'
>
>>>
>>>
a or
b
True
>>>
a and
b
False
>>>
not
(
a)
False
>>>
not
(
b)
True
>>>
>>>
var =
'chaîne'
>>>
var ==
"Chaîne"
False
>>>
var !=
"Chaîne"
True
>>>
not
(
var ==
"Chaîne"
)
True
>>>
(
1
==
1.00
)
True
>>>
La fonction suivante définit le connecteur logique xor (ou exclusif) :
>>>
# Connecteurs logique xor : a xor b = a and not(b) or not(a) and b
... def
xor
(
a, b) :
... return
(
a and
not
(
b)) or
(
not
(
a) and
b)
...
>>>
xor
(
True
, False
), xor
(
False
, True
), xor
(
True
, True
), xor
(
False
, False
)
(
True
, True
, False
, False
)
V-A. Conversion en booléen : bool()▲
La fonction de conversion bool() convertit une valeur de n'importe quel type en un booléen, selon les règles suivantes :
- Un nombre int ou float est converti à
True
s'il est non nul, àFalse
sinon. - Une chaîne de caractères str est convertie à
True
si elle est non vide, àFalse
si c'est la chaîne vide :""
.
VI. Structures de contrôles▲
Pour l'instant nous avons vu que Python est un langage de programmation impérative (un programme est une suite de lignes d'instruction), nous allons voir que c'est un langage de programmation structuré. Il reconnaît les structures de contrôles :
- une structure de test :
if
... [elif
] ... [else
] - deux structures de boucles :
while
etfor
sans lesquelles les programmes ne s'exécuteraient que séquentiellement, ligne après ligne.
Nous allons commencer par voir la structure de boucle while
puis la structure de test if
[elif
] [else
].
Nous étudierons plus tard la deuxième structure de boucle for
.
while
et if
nous suffisent pour programmer. Tandis que for
et if
ne suffisent pas. Cependant for
est particulièrement pratique, surtout en Python !
VI-A. L'instruction while▲
L'instruction while
permet de répéter une séquence d'instructions, en boucle, tant qu'une condition est vérifiée.
En général condition s'évalue en un booléen, par exemple :
True
, a <=
0
, (
a ==
0
) and
(
b !=
-
1
)…
>>>
x =
1.e10
# Notation scientifique x=1*10^10
>>>
x
10000000000.0
>>>
n=
0
>>>
while
(
2
**
n <
x) :
... n =
n+
1
...
>>>
print
n-
1
, 2
**(
n-
1
), '<'
, x, '<='
, 2
**
n
33
8589934592
<
10000000000.0
<=
17179869184
>>>
Pour attendre la saisie d'une chaîne non vide :
>>>
# Pour attendre la saisie d'une chaîne non vide
... while
not
(
var) :
... var =
raw_input(
'Entrez une chaîne de caractères non vide : '
)
...
Entrez une chaîne de caractères non vide :
Entrez une chaîne de caractères non vide :
Entrez une chaîne de caractères non vide : OK
Organigramme d'une boucle while
:
On l'écrit en langage algorithmique :
VI-B. Exemple : Écrire un nombre en base 16▲
Code Python :
a =
input(
'Saisissez un entier'
)
while
a >
0
:
print
a %
16
a =
a //
16
En langage algorithmique :
Saisir un entier a
Tant que a > 0 faire :
écrire (a modulo 16)
a = [a / 16] ' division entière
Pour comprendre son fonctionnement, modifions le code et regardons son exécution :
passage =
0
a =
input(
'Saisissez un entier : '
)
while
a >
0
:
passage =
passage +
1
print
'Passage'
, passage
print
'a modulo 16 :'
, a %
16
a =
a //
16
print
'a devient a//16 :'
, a
print
'Sortie de la boucle'
Lorsque (
a >
0
) est évalué à False
, la boucle while
s'arrête.
Amélioration du code (2e ébauche) :
a =
input(
'Saisissez un entier :'
)
resultat =
''
while
a >
0
:
resultat =
str(
a %
16
) +
' '
+
resultat
a =
a //
16
print
resultat
L'exécution produit :
str() retourne la valeur de son paramètre convertie en chaîne de caractères.
Pour les chaînes de caractères, '+' est l'opération de concaténation : 'aaaa'
+
'bbbb'
s'évalue en la chaîne 'aaaabbbb'
.
Attention, une boucle peut ne jamais se terminer, et provoquer une exécution sans fin : while
True
: print
'bonjour'
, provoque un affichage sans fin que l'on interrompt avec la combinaison CTRL+C.
VI-C. Structure de test▲
La condition est évaluée en booléen.
- Si elle a valeur
True
le premier bloc d'instruction est exécuté, le deuxième ne l'est pas, puis l'exécution du programme se poursuit. - Si elle a valeur
False
le deuxième bloc d'instruction est exécuté (le premier ne l'est pas), puis l'exécution du programme se poursuit.
L'instructionelse
est optionnelle.
VI-C-1. Structure de test if [else]▲
Code Python :
a =
input(
'Saisissez un nombre'
)
if
a >=
0
:
print
a, 'est positif'
else
:
print
a, 'est negatif'
En langage algorithmique :
Saisir un nombre a
Si a >= 0 faire :
écrire a, "est positif"
Sinon faire :
écrire a, "est négatif"
VI-C-2. Structure de test if [elif] [else]▲
L'écriture de tests imbriqués :
if
condition1 :
# Bloc d'instructions 1
else
:
if
condition2 :
# Bloc d'instructions 2
else
:
# Bloc d'instructions 3
s'écrit à l'aide d'une seule structure de test :
if
condition1 :
# Bloc d'instructions 1
elif
condition2 :
# Bloc d'instructions 2
else
:
# Bloc d'instructions 3
elif
et else
sont optionnels. elif
peut être utilisé plusieurs fois dans une structure de test : if
... elif
... elif
... else
....