Apprendre à Programmer en Python | Introduction

publicité
Licence Sciences du Vivant | Biologie & Mathématiques | 2011-2012
Apprendre à Programmer
En Python (I)
mark.h
Prise en main et éléments de base du langage
Mark Hoebeke
[email protected]
L1 | Python (I) | p. 1
Plan
Apprendre à Programmer en Python (I)
●
●
●
Introduction
●
«Apprendre à programmer», pourquoi ?
●
Pourquoi Python ?
●
En savoir plus.
Les bases du langage
●
Écriture de programmes et exécution. mark.h
●
Expressions, constantes et typage.
●
Variables et affichage.
●
Collections : tuples, listes et dictionnaires.
●
Blocs et contrôle de flux.
●
Utilisation des fichiers.
Exercices
L1 | Python (I) | p. 2
Apprendre à Programmer en Python | Introduction
«Apprendre à programmer», pourquoi ?
●
Programmer, c'est :
●
●
●
Écrire une suite d'instructions dans un langage de programmation.
Pour :
●
Le plaisir (?)
●
Résoudre un problème posé.
mark.h
En :
●
●
Décomposant itérativement la tâche à effectuer en sous-tâches plus
«maniables».
Décrivant chaque tâche de plus bas niveau dans un langage de
programmation.
L1 | Python (I) | p. 3
Apprendre à Programmer en Python | Introduction
« Apprendre à programmer » : pourquoi ?
●
Bien Programmer, c'est :
●
Ré-utiliser des briques que d'autres ont déjà programmées.
●
Écrire des programmes réutilisables :
●
–
Donner des noms explicites et cohérents aux entités (variables, fonctions,
classes).
–
mark.h à être réutilisé par d'autres (ou par soiDocumenter tout ce qui est destiné
même plus tard !).
–
Tester le plus exhaustivement possible tout code produit.
Écrire des programmes efficaces :
–
Connaître a minima le fonctionnement interne du langage et/ou de la
machine pour éviter de :
●
●
Gaspiller des cycles CPU.
D'occuper inutilement trop de mémoire.
L1 | Python (I) | p. 4
Apprendre à Programmer en Python | Introduction
Le choix de Python
●
Véritable langage à objets :
●
●
Langage (semi-)interpreté :
●
●
mark.h
Abondance de composants dans de nombreux domaines
d'application.
Existence d'une BAO pour la bioinformatique :
●
●
Processus de développement simplifié.
Environnement «riche» :
●
●
Méthodologie la plus courante pour des développements
informatiques.
BioPython
Langage se prêtant bien à l'apprentissage.
L1 | Python (I) | p. 5
Apprendre à Programmer en Python | Introduction
En savoir plus
●
Le site du langage Python :
●
●
Le site de la documentation du langage :
●
●
http://www.python.org
http://docs.python.org
mark.h
Apprendre à programmer avec Python (G. Swinnen) ;
●
http://inforef.be/swi/python.htm
L1 | Python (I) | p. 6
Apprendre à Programmer en Python | Les bases du langage
Programmation en mode interactif
●
Utilisation de Python en ligne de commande :
●
●
Adapté aux expérimentations tenant en quelques (dizaines) de
lignes.
Lancement de l'interpréteur à l'aide de la commande ;
$ python
●
Résultat :
mark.h
Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) [GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> ●
Une invite (prompt) permet la saisie directe d'instructions Python.
L1 | Python (I) | p. 7
Apprendre à Programmer en Python | Les bases du langage
Écriture de scripts
●
Script (Python) :
●
●
Fichier texte qui contient une suite d'instructions (Python).
Utilisation des scripts :
●
Appel direct à l'interpréteur Python à partir de la ligne de commande :
$ python monscript.py
●
mark.h par le système d'exploitation :
Appel «automatique» de l'interpréteur
$ ./monscript.py
–
En présence d'une en-tête normalisée :
#!/usr/bin/env python
#!/usr/bin/env python
# ­*­ coding: utf­8 ­*­
# ­*­ coding: utf­8 ­*­
–
Si les droits d'exécution sont correctement positionnés.
­rwxr­xr­x (...) monscript.py
L1 | Python (I) | p. 8
Apprendre à Programmer en Python | Les bases du langage
Expressions
●
Fonctionnement général de l'interpréteur :
1. Lecture d'une ligne de programme :
–
En mode interactif.
–
Dans un script.
2. Évaluation du contenu de la ligne :
–
Expressions logiques/arithmétiques.
–
Instructions.
mark.h
3. Restitution (retour) du résultat de l'évaluation.
4. Passage à la ligne suivante et retour en 1.
●
Cas particuliers :
●
Les lignes vides.
●
Les lignes de commentaire :
# Ceci est un commentaire.
# Ceci est un commentaire.
L1 | Python (I) | p. 9
Apprendre à Programmer en Python | Les bases du langage
Expressions arithmétiques
●
L'interpréteur Python comme calculatrice :
$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) [GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 3+5
8
>>> (3+5)/2
4
>>> 7/2
3
mark.h
>>> 7.0/2
3.5
Les opérateurs arithmétiques distinguent les nombres entiers des nombres en
virgule flottante.
Il est possible de forcer la conversion d'une représentation vers l'autre.
>>> float(7)/2
3.5
>>> int(7.0)/2
3
L1 | Python (I) | p. 10
Apprendre à Programmer en Python | Les bases du langage
Expressions logiques
●
Python définit deux constantes de vérité : True et False
●
Propose des opérateurs de comparaison : >, <, >=, <=, ==, !=
>>> 1 > 2
False
>>> 2 > 1
True
>>> 2 == 2
True
>>> 1 != 2
True
●
mark.h
Et des opérateurs logiques : and, or et not
>>> True or False
True
>>> True and False
False
>>> not True
False
L1 | Python (I) | p. 11
Apprendre à Programmer en Python | Les bases du langage
Expressions à base de chaînes de caractères
●
Chaîne de caractères : succession de caractères (lettres) entre
apostrophes ou guillemets.
>>> 'Hello'
'Hello'
>>> “Hello”
'Hello'
>>> “Aujourd'hui”
“Aujourd'hui”
>>> 'Aujourd\'hui'
“Aujourd'hui”
mark.h
●
Opérateurs : concaténation (+), réplication (*)
>>> 'Hello,'+' '+'world.'
'Hello, world.'
>>> 2*'Bye '+'.'
'Bye Bye .'
●
Conversions vers des formats numériques :
>>> str(3.1415)
'3.1415'
>>> float('3.1415')
3.1415
L1 | Python (I) | p. 12
Apprendre à Programmer en Python | Les bases du langage
Variables
●
●
●
●
Une variable est un nom donné arbitrairement au résultat d'une
expression.
Le nom doit commencer par une lettre qui peut être suivie de lettres,
chiffres et du caractère sous-ligné.
Python distingue les minuscules et les majuscules dans les noms de
variables.
mark.h
Les variables disposent d'un type
qui définit les opérations qu'elles
supportent.
>>> pi=3.141592
>>> pi
3.1415920000000002
>>> type(pi)
<type 'float'>
>>> PI='Nombre irrationnel'
>>> PI
'Nombre irrationnel'
>>> type(PI)
<type 'str'>
L1 | Python (I) | p. 13
Apprendre à Programmer en Python | Les bases du langage
Affichage
●
Tout objet Python peut être affiché à l'aide de l'instruction print
>>> print pi
3.141592
>>> print PI
Nombre irrationnel
●
La mise en forme de l'affichage peut être contrôlée avec des
caractères spéciaux :
●
%d : affichage d'entiers.
●
%f : affichage de nombres à virgule flottante.
●
%e : affichage en «notation scientifique».
●
%s : affichage de chaînes de caractères.
mark.h
>>> print “%d %f %e %s” % (pi,pi,pi,PI)
3 3.141592 3.141592e+00 Nombre irrationnel
(un contrôle plus fin est possible pour les formats numériques)
L1 | Python (I) | p. 14
Apprendre à Programmer en Python | Les bases du langage
Collections : définitions
●
●
Les collections fournissent le moyen d'agréger plusieurs constantes
et/ou variables (les éléments) dans une autre variable.
Il existe trois grands types de collections :
●
●
Les tuples : collections dont tous les éléments sont définis à la création. Les
éléments sont repérés par leur position dans la collection.
Les listes : collections dont les éléments peuvent varier après la création.
Les éléments sont repérés par leur position dans la collection.
mark.h
●
●
●
Les dictionnaires (tableaux associatifs, tables de hachage) : collections dont
les éléments peuvent varier après la création. Les éléments sont repérés par
une clé.
Tous les éléments d'une collection n'ont pas forcément le même
type.
Les collections peuvent inclure d'autres collections.
L1 | Python (I) | p. 15
Apprendre à Programmer en Python | Les bases du langage
Collections : les tuples
●
Création d'un tuple :
>>> meteotup=('Roscoff',2011,9,29,15,00,26.5,True)
>>> type(meteotup)
<type 'tuple'>
●
Adressage en lecture des éléments d'un tuple :
>>> meteotup[0]
'Roscoff'
>>> meteotup[1:4]
(2011, 9, 29)
>>> meteotup[­1]
True
>>> meteotup[:­2]
('Roscoff', 2011, 9, 29, 15, 00)
●
mark.h
Longueur d'un tuple :
>>> len(meteotup)
>>> len(meteo)
8
●
Composition de tuples :
>>> meteotup=('Roscoff')+(2010, 9, 29, 15, 00)+(26.5,True)
L1 | Python (I) | p. 16
Apprendre à Programmer en Python | Les bases du langage
Collections : les listes
●
Création d'une liste :
>>> meteolst=['Roscoff',2011,9,29,15,00,26.5,True]
>>> type(meteolst)
<type 'list'>
●
Adressage en lecture et en écriture des éléments d'une liste :
>>> meteolst[0]=['Santec']
>>> meteolst
['Santec', 2011, 9, 29, 15, 00, 26.5, True]
mark.h
>>> meteolst[4:6]=[9,30]
>>> meteolst
['Santec', 2011, 9, 29, 9, 30, 26.5, True]
●
Ajout d'éléments à une liste existante :
>>> meteolst.append(12.3)
>>> meteolst
['Santec', 2011, 9, 29, 9, 30, 26.5, True, 12.3]
>>> len(meteo)
>>> meteolst.extend(['N',20])
8
>>> meteolst
['Santec', 2011, 9, 29, 9, 30, 26.5, True, 12.3, 'N', 20]
L1 | Python (I) | p. 17
Apprendre à Programmer en Python | Les bases du langage
Collections : les listes
●
Suppression d'éléments d'une liste :
>>> del(meteolst[0])
>>> meteolst
[2011, 9, 29, 9, 30, 26.5, True]
>>> del(meteolst[­2:])
>>> meteolst
[2011, 9, 29, 9, 30]
mark.h
L1 | Python (I) | p. 18
Apprendre à Programmer en Python | Les bases du langage
Collections : les dictionnaires
●
Création d'un dictionnaire :
>>> meteodict={'Ville' : 'Roscoff', 'Année' : 2011, 'Mois' : 9 , 'Jour' : 29,
'Heure': 15, 'Minutes' : 00, 'Température' : 26.5, 'Soleil' :True}
>>> type(meteodict)
<type 'dict'>
●
Adressage des éléments d'un dictionnaire:
>>> meteodict['Ville']
mark.h
'Roscoff'
>>> meteodict['Ville']='Santec'
>>> meteodict
{'Ann\xc3\xa9e': 2011, 'Ville': 'Santec', 'Mois': 9, 'Minutes': 00, 'Jour': 29, 'Heure': 15, 'Soleil': True, 'Temp\xc3\xa9rature': 26.5}
●
Ajout d'éléments à un dictionnaire :
>>> meteodict['Direction du vent']='N'
>>> meteodict['Vitesse du vent']=20
{'Ann\xc3\xa9e': 2011, 'Ville': 'Santec', 'Vitesse du vent': 20, 'Mois': 9, 'Minutes': 00, 'Jour': 29, 'Direction du vent': 'N', 'Heure': 15, 'Soleil': True, 'Temp\xc3\xa9rature': 26.5}
L1 | Python (I) | p. 19
Apprendre à Programmer en Python | Les bases du langage
Collections : les dictionnaires
●
Suppression d'éléments d'un dictionnaire :
>>> del(meteodict['Ville'])
>>> meteodict
{'Ann\xc3\xa9e': 2011, 'Vitesse du vent': 20, 'Mois': 9, 'Minutes': 00, 'Jour': 29, 'Direction du vent': 'N', 'Heure': 15, 'Soleil': True, 'Temp\xc3\xa9rature': 26.5}
●
Vérification de la présence d'un élément dans le dictionnaire :
>>> meteodict.has_key('Minutes')
True
>>> meteodict.has_key('Secondes')
False
mark.h
L1 | Python (I) | p. 20
Apprendre à Programmer en Python | Les bases du langage
Blocs et contrôle de flux
●
●
Chaque ligne d'un programme Python se trouve dans un bloc.
Toutes les lignes d'un même bloc doivent être alignées
verticalement, i.e. avoir la même indentation.
>>> print pi
3.141592
>>> print PI
File "<stdin>", line 1
print PI
^
IndentationError: unexpected indent
●
mark.h
Cette contrainte assure une amélioration significative de la lisibilité
des programmes.
L1 | Python (I) | p. 21
Apprendre à Programmer en Python | Les bases du langage
Blocs et contrôle de flux
●
Contrôle de flux :
●
Instructions qui permettent d'interrompre la linéarité de
l'exécution des programmes pour :
–
–
Exécuter de manière répétée un bloc d'instructions :
● Un nombre de fois défini à l'entrée du bloc :
mark.h
– énumération des éléments
d'une collection,
– itération sur un intervalle d'entiers.
● Un nombre de fois calculé dynamiquement dans le bloc :
– tant qu'une condition est remplie.
– jusqu'à ce qu'une condition soit remplie.
Exécuter de manière conditionnelle un bloc d'instructions :
● Si une expression est évaluée à True.
● Sinon.
L1 | Python (I) | p. 22
Apprendre à Programmer en Python | Les bases du langage
Énumération des éléments d'une collection
●
Syntaxe générale :
for variable in collection :
# bloc d'instructions à répéter
# pour chaque élément de la collection
print variable
# Retour au bloc précédent.
●
Exemples
:
Dictionnaire
mark.h
Liste/tuple
>>> for element in meteolst :
... print element
... Roscoff
2011
9
29
15
00
26.5
True
>>> for element in meteodict :
... print element
...
Année
Vitesse du vent
Mois
Minutes
Jour
Direction du vent
Heure
Soleil
Température
L1 | Python (I) | p. 23
Apprendre à Programmer en Python | Les bases du langage
Itération sur une séquence d'entiers
●
Syntaxe générale :
for variable in range(premier,dernier+1) :
# bloc d'instructions a répéter
# pour chaque valeur entière de la variable
print variable
# Retour au bloc précédent.
●
Exemple
:
mark.h
>>> for i in range(0,5) :
... carre=i*i
... print "le carré de %d est %d" % (i,carre)
... le carré de 0 est 0
le carré de 1 est 1
le carré de 2 est 4
le carré de 3 est 9
le carré de 4 est 16
L1 | Python (I) | p. 24
Apprendre à Programmer en Python | Les bases du langage
Répétition tant qu'une condition est remplie
●
Syntaxe générale :
while condition :
# bloc d'instructions à répéter
# tant la condition est remplie
# incluant une modification d'un des éléments
# de la condition.
print 'La condition est remplie.'
# Retour au bloc précédent.
●
Exemple
:
mark.h
>>> i=0
>>> while i < 4 :
... print "la position”,i,”contient”,meteolst[i]
... i=i+1
...
la position 0 contient Roscoff
la position 1 contient 2011
la position 2 contient 9
la position 3 contient 29
L1 | Python (I) | p. 25
Apprendre à Programmer en Python | Les bases du langage
Répétition jusqu'à ce qu'une condition soit remplie
●
Syntaxe générale :
while True :
# bloc d'instructions à répéter
# tant que la condition n'est pas remplie
if condition :
break
# Retour au bloc précédent.
●
Exemple
:
mark.h
>>> i=0
>>> while True :
... print "la position”,i,”contient”,meteolst[i]
... i=i+1
... if i >= 4 :
... break
...
la position 0 contient Roscoff
la position 1 contient 2011
la position 2 contient 9
la position 3 contient 29
L1 | Python (I) | p. 26
Apprendre à Programmer en Python | Les bases du langage
Exécution conditionnelle d'un bloc
●
Syntaxe générale :
if condition :
# Bloc à exécuter si la condition est
# remplie.
else :
# Bloc à exécuter si la condition n'est
# pas remplie.
# Retour au bloc précédent.
mark.h
●
Exemple
:
>>> if meteolst[7] == False :
... print "Il pleut sur ",meteolst[0]
... else :
... print "Il ne pleut pas sur ",meteolst[0]
... Il ne pleut pas sur Roscoff
L1 | Python (I) | p. 27
Apprendre à Programmer en Python | Les bases du langage
Utilisation des fichiers
●
L'ouverture des fichiers se fait avec :
●
●
●
fd=open(nom du fichier[, mode d'ouverture])
Le nom du fichier est une chaîne de caractères avec le chemin dans le système
de fichiers du fichier à ouvrir.
Le mode d'ouverture est une chaîne de caractères normalisée indiquant quelles
opérations seront faites sur le fichier. Exemples :
●
'r' : lecture seule (mode d'ouverture par défaut),
mark.h
●
●
'w' : écriture seule avec troncature à l'ouverture,
●
'a' : écriture seule en commençant à la fin du fichier.
Cette fonction retourne un descripteur de fichier (fd), utilisé par la suite pour
toutes les opérations sur ce même fichier.
>>> fdr=open('donnees.dat') # ouverture en lecture seule.
>>> fdw=open('resultats.dat','w') # ouverture en écriture.
L1 | Python (I) | p. 28
Apprendre à Programmer en Python | Les bases du langage
Utilisation des fichiers
●
La lecture dans les fichiers, ligne par ligne, se fait avec :
●
●
ligne=fd.readline()
Cette fonction retourne (dans la variable ligne) le contenu de la «ligne courante»
du fichier dont le descripteur est fd.
●
A l'ouverture du fichier, la «ligne courante» est la première ligne du fichier.
●
Chaque appel à readline() fait avancer d'une ligne cette «ligne courante».
●
mark.h
Attention : la chaîne de caractères retournée comprend, en dernière position, le
caractère de saut de ligne.
>>> line=fdr.readline() # lecture de la première ligne.
>>> line=fdr.readline() # lecture de la deuxième ligne.
>>> line=fdr.readline() # lecture de la troisième ligne.
●
Il est possible de lire en une fois le contenu de tout un fichier à l'aide de la fonction
readlines() :
>>> lines=fdr.readlines() # lines est une liste avec les lignes du fichier.
L1 | Python (I) | p. 29
Apprendre à Programmer en Python | Les bases du langage
Utilisation des fichiers
●
L'écriture dans les fichiers se fait avec :
●
●
●
fd.write(chaîne_de_caractères)
Cette fonction écrit le contenu de chaîne_de_caractères à la fin du fichier
dont le descripteur est fd.
Attention : aucun caractère de saut de ligne n'est ajouté par défaut.
mark.h
>>> fdw.write(“Hello\nWorld\n”) # écriture de deux lignes.
●
La fermeture des fichiers se fait avec :
●
●
fd.close()
Attention : il est nécessaire d'appeler cette fonction, en particulier pour les
fichiers ouverts en écriture.
L1 | Python (I) | p. 30
Apprendre à Programmer en Python | Les bases du langage
Utilisation des fichiers
●
Entrée et sortie standards :
●
●
Le clavier (entrée standard) et le terminal (sortie standard) sont accessibles
au travers de deux descripteurs prédéfinis :
–
sys.stdin : accessible en lecture.
–
sys.stdout : accessible en écriture.
Une sortie est également prédéfinie pour la génération des erreurs :
–
mark.h
sys.stderr : accessible en écriture.
>>> import sys
>>> sys.stdout.write(“Hello World\n”) # identique à :
>>> print “Hello World”
>>> ligne=sys.stdin.readline()
# attend la saisie d'une ligne.
>>> sys.stderr.write(“Une erreur est surevenue.\n”)
L1 | Python (I) | p. 31
Apprendre à Programmer en Python | Les bases du langage
Utilisation des fichiers
●
Un idiome Python pour la lecture des fichiers :
for line in fd :
# Bloc à exécuter pour chaque ligne
# du fichier.
# Retour au bloc précédent.
mark.h
L1 | Python (I) | p. 32
Apprendre à Programmer en Python | Les bases du langage
Utilisation des fichiers
●
Lecture et écriture de données «au format Python» :
●
●
●
Les fonctions read() et write() utilisent des chaînes de caractères.
Leur utilisation pour des données «natives» en Python (tuples, listes,
dictionnaires...) oblige leur conversion de ou vers ces chaînes de caractères
Le module pickle permet le stockage ou la lecture de données dans un
format natif :
–
pickle.dump(vw,fd) : écritmark.h
dans la variable vw dans le fichier dont le
descripteur est fd.
–
vr=pickle.load(fd) : charge dans la variable vr le contenu du fichier
dont le descripteur est fd.
>>> import pickle
>>> pfw=open(“tonneau”,”w”)
>>> pickle.dump(d,pfw) # d : dictionnaire
>>> pfw.close()
L1 | Python (I) | p. 33
>>> import pickle
>>> pfr=open(“tonneau”)
>>> d=pickle.load(pfr)
>>> pfr.close()
Apprendre à Programmer en Python | Les bases du langage
Exercices
mark.h
L1 | Python (I) | p. 34
Téléchargement