IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Programmation Python pour les scientifiques - Premiers programmes -

Cours avec exercices corrigés


précédentsommairesuivant

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.

 
Sélectionnez
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) :

 
Sélectionnez
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.
 
Sélectionnez
In [1]: a=15
 
In [2]: print a
15
 
In [3]: str = "bonjour l'univers"

La commande %whos produit l'affichage des variables :

 
Sélectionnez
In [4]: %whos
Variable   Type    Data/Info
----------------------------
a          int     15
str        str     bonjour l'univers

help() lance l'aide interactive :

 
Sélectionnez
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…).

 
Sélectionnez
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) :

 
Sélectionnez
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) :

Environnement de développement Spyder
IDE Spyder

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 :

Premier programme
Spyder : un IDE pour Python

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électionnez
>>> 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.

Image non disponible

On peut passer en argument à la fonction input() une chaîne de caractères qui sera affichée à l'écran.

 
Sélectionnez
>>> 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.

 
Sélectionnez
>>> a=input(); b=input(); c=input()
-3
3.14
'bonjour'
>>> a, type(a)
(-3, <type 'int'>)
>>> b, type(b)
(3.14, <type 'float'>)
>>> c, type(c)
('bonjour', <type 'str'>)
>>>

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 " ").

 
Sélectionnez
>>> 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.

 
Sélectionnez
>>> 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() :

 
Sélectionnez
>>> r
'3.1415'
>>> r=float(r)
>>> r
3.1415
>>> print int(r), r**2
3 9.86902225
>>>

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 :

< b

a a une valeur strictement inférieure à celle de b

<= b

a a une valeur inférieure ou égale à celle de b

== b

a et b ont même valeur

!= b

a et b ont des valeurs différentes

et pareillement > b et >= b.

On peut effectuer des opérations logiques sur les booléens (par ordre de priorité) : or, and, not() :

 
Sélectionnez
>>> 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
>>>
 
Sélectionnez
>>> 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) :

 
Sélectionnez
>>> # 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)
Le programme Xor
La fonction Xor définie dans un fichier .py

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 : "".
 
Sélectionnez
>>> bool(3.14)
True
>>> bool(-7)
True
>>> bool('toto')
True
>>> bool('')
False
>>> s=""
>>> if not(s) : print "chaîne vide"
... 
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 et for

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.

Image non disponible

En général condition s'évalue en un booléen, par exemple :

True, <= 0, (== 0and (!= -1)

 
Sélectionnez
>>> 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 :

 
Sélectionnez
>>> # 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 :

Image non disponible

On l'écrit en langage algorithmique :

Image non disponible

VI-B. Exemple : Écrire un nombre en base 16

Code Python :

 
Sélectionnez
a = input('Saisissez un entier')
while a > 0 :
    print a % 16
    a = a // 16

En langage algorithmique :

 
Sélectionnez
Saisir un entier a
Tant que a > 0 faire :
    écrire (a modulo 16)
    a = [a / 16] ' division entière
Image non disponible

Pour comprendre son fonctionnement, modifions le code et regardons son exécution :

 
Sélectionnez
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'
Image non disponible

Lorsque (> 0) est évalué à False, la boucle while s'arrête.

Amélioration du code (2e ébauche) :

 
Sélectionnez
a = input('Saisissez un entier :')
resultat = ''
while a > 0 :
    resultat = str(a % 16) + ' ' + resultat
    a = a // 16
print resultat

L'exécution produit :

Image non disponible

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

Image non disponible

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'instruction else est optionnelle.

VI-C-1. Structure de test if [else]

Code Python :

 
Sélectionnez
a = input('Saisissez un nombre')
if a >= 0 :
    print a, 'est positif'
else :
    print a, 'est negatif'

En langage algorithmique :

 
Sélectionnez
Saisir un nombre a
Si a >= 0 faire :
    écrire a, "est positif"
Sinon faire :
    écrire a, "est négatif"
Image non disponible

VI-C-2. Structure de test if [elif] [else]

L'écriture de tests imbriqués :

 
Sélectionnez
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 :

 
Sélectionnez
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 ....


précédentsommairesuivant

Copyright © 2014 Jean-Philippe PREAUX. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.