Initiation à l`algorithmique et la programmation en langage Python

Initiation à l’algorithmique
et la programmation en langage Python
U.E. « Programmation Structurée »
Laurent Tichit
Département Informatique et Intéractions
Institut de Mathématiques de Marseille
Équipe pédagogique Bioinformatique - Génomique
Cours_1_4 © L. Tichit, 03/09/16 page 1 / 23
Ressources
enseignant
laurent.tichit@univ-amu.fr
sites web
www.dil.univ-mrs.fr/~tichit/ps
www.python.org
documentation papier
très copieuse, consultable et téléchargeable sur ces sites
logiciel
tout le système Python est librement téléchargeable sur www.python.org
Attention, nous utilisons la version 3 de python :
opython3.4 est installé en salle TP
ochez vous, vous pouvez installer la dernière version : Python 3.4.5 ou Python 3.5.2
Cours_1_4 © L. Tichit, 03/09/16 page 2 / 23
− sujets des TP
− supports cours et documentations
− annonces diverses
Algorithmique et programmation
on a :
un problème général
dont une instance est définie par certaines données
dont la résolution procurera certains résultats
exemple :
trouver les occurrences de "gaattc" dans "atgagtgaattcgtcacccgttaa"
réponse : positions 6, 124, 2540, 6723, …
algorithme : description précise des opérations à faire
programme : expression d’un algorithme dans
un langage qu’un ordinateur « comprend »
exemple : Python3
Cours_1_4 © L. Tichit, 03/09/16 page 3 / 23
Schéma de principe d’un ordinateur
Cours_1_4 © L. Tichit, 03/09/16 page 4 / 23
Mémoire centrale
Passive : conservation des données.
Rapide. Grosse : ~ 4 Go
(4 × 109 cellules élémentaires)
Interfaces unité centrale – organes périphériques
Acquisition et production de données
clavier, écran, HP, imprimante, carte réseau, etc.
Processeur
Actif : calcul, décodage et
exécution des instructions
Rapide : ~ 3 GHz
(3 × 109 cycles/sec)
Processeur
double
coeur
Core i3
Core i3
4 Go
bus
1 To
Mémoire de masse (disque dur)
Plus grosse (~ 1 To = 1× 1012).
Persistante.
Définition :
1 bit (binary digit = chiffre binaire)
1 byte = 1 octet = 8 bits
Principe de fonctionnement
le processeur exécute (automatiquement et très vite) les instructions
constituant un programme enregistré dans la mémoire
les instructions représentent des opérations sur des données
certaines données sont enregistrées dans le programme,
d’autres sont obtenues durant l’exécution
soit comme résultats des opérations précédentes
soit acquises depuis l’extérieur (clavier, appareil de mesure, etc.)
toutes les instructions et données sont des nombres
tous les nombres sont représentés dans le système binaire
Cours_1_4 © L. Tichit, 03/09/16 page 5 / 23
01001111001001110010101010111100101000110101010001010
un octet un octet un octetun octetun octetun octetun octet
Langage évolué, compilation, interprétation
un langage évolué permet de représenter
les nombres par leur notation usuelle
les instructions par des opérateurs et des mots-clés expressifs et faciles à lire
avant exécution, instructions et données doivent être converties en binaire
interprétation (« code source » est le programme que vous avez écrit) :
compilation :
Cours_1_4 © L. Tichit, 03/09/16 page 6 / 23
Analyse−programmation
le travail de l’analyste-programmeur devant un problème donné :
trouver l’algorithme de résolution
l’écrire dans un langage de programmation
des ressources à gérer et/ou optimiser ; les plus courantes :
l’espace mémoire occupé par les données manipulées
le temps que mettra l’ordinateur à obtenir la solution
parfois les programmes sont erronés…
erreurs de syntaxe et sémantiques : les langages de programmation sont très stricts
erreurs de logique : la syntaxe est correcte
mais le programme ne résout pas le problème donné
erreurs à l’exécution (ou exceptions) : des circonstances de l’exécution
font que le programme ne peut aboutir (ex : données absurdes)
processus de développement :
Cours_1_4 © L. Tichit, 03/09/16 page 7 / 23
souvent couplés
(inversement)
Découverte d’erreurs
ou d’améliorations
fin
TestCodageAnalyse
Un programme de qualité est un programme…
correct
qualité indispensable (et pourtant…) : quand les données sont valides
le programme doit donner un résultat « correct »
difficile à établir : problème de l’exhaustivité des tests
robuste
même quand les dones sont invalides le programme fournit quelque chose
requiert beaucoup de soin de la part du programmeur
documenté
documentation externe (le manuel) et interne (commentaires dans le programme)
important pour le « client » et pour le programmeur
efficace
les qualités précédentes étant acquises, le meilleur programme est
celui qui optimise les ressources (temps, mémoire, etc.), surtout le temps
Cours_1_4 © L. Tichit, 03/09/16 page 8 / 23
Le langage Python
créé par Guido van Rossum (Pays-Bas, 1991). Trois éléments :
finition du langage : vocabulaire, syntaxe, types de données
machine Python (ou interpréteur)
bibliothèque, devenue depuis très copieuse
logiciel Open Source : nombreux contributeurs
langage de scripting :
interprété (partiellement compilé, de manière transparente)
il est facile d’exécuter des commandes système et d’autres programmes
très approprié pour les activités système et réseau
en résumé : langage
à l’approche très facile
idéal pour écrire des scripts liant d’autres programmes
on peut envisager de créer des programmes complexes
très répandu en bioinformatique
équivalent (en fonctionnalités et cas d'utilisation) à Perl ou Ruby
Cours_1_4 © L. Tichit, 03/09/16 page 9 / 23
Le mode immédiat (ou interactif)
Python interprété : utilisation en « mode calculette ». Exemple :
connexion au système (ici Linux)
[laurent@portpin]$ python3
Python 3.4.2 (v3.4.2:d047928ae3f6, May 16 2013, 00:06:53)
[GCC 3.2.3 20030502 (Red Hat Linux 3.2.3-47)] on linux2
Type "copyright", "credits" or "license()" for more information.
>>> 2 + 3
5
>>> nbr = 10
>>> nbr
10
>>> print("Bonjour")
Bonjour
>>> Ctrl D
[laurent@portpin]$
Cours_1_4 © L. Tichit, 03/09/16 page 10 / 23
Données, opérateurs, expressions
données : données initiales, résultats, valeurs intermédiaires
types primitifs :
entiers (sur 32 bits)
0 123 -50
entiers longs
340282366920938463463374607431768211456 1L
nombres non entiers (on dit « flottants »)
1.5 -0.33333333333333331 0.166054018e-23
chaînes de caractères
"J'aime Python"
quelques valeurs conventionnelles
True (vrai), False (faux), None (absence de valeur)
Cours_1_4 © L. Tichit, 03/09/16 page 11 / 23
A propos des nombres
possibilité d’écrire un nombre en base 8 (octal) ou 16 (hexadécimal)
>>> 033 # 3 x 8 + 3 = 27
27
>>> 0x1B # 1 x 16 + 11 = 27
27
attention à la division entre entiers
>>> 1 / 3 >>> 1 / 3
0 0.3333333333333333
expressions mixtes (règle du plus fort)
>>> 1.0 / 3 >>> 1 // 3
0.33333333333333331 0
>>> float(1) / 3 >>> 1.0 // 3.0
0.33333333333333331 0
Python2 :( Python3 :)
Cours_1_4 © L. Tichit, 03/09/16 page 12 / 23
Chaînes de caractères
plusieurs notations
>>> "Bonjour"
'Bonjour'
>>> "Bonjour" == 'Bonjour'
True
>>> 'Il a dit "bonjour"'
'Il a dit "bonjour"'
>>> 'J\'ai dit "bonjour"'
'J\'ai dit "bonjour"'
>>> print('J\'ai dit "bonjour"')
J'ai dit "bonjour"
>>> """Ceci est une
longue chaine"""
'Ceci est une\nlongue chaine'
>>> print("""Ceci est une
longue chaine""")
Ceci est une
longue chaine
>>>
Cours_1_4 © L. Tichit, 03/09/16 page 13 / 23
Des opérations avec des chaînes
concaténation
>>> "Bonjour" + " a tous"
'Bonjour a tous'
>>> "Bonsoir" * 3
'BonsoirBonsoirBonsoir'
>>>
accès aux caractères
>>> "Bonjour"[3]
'j'
>>> "Bonjour"[0]
'B'
>>> "Bonjour"[6]
'r'
>>> "Bonjour"[-1]
'r'
>>>
Cours_1_4 © L. Tichit, 03/09/16 page 14 / 23
extraction de sous-chaîne
>>> "Bonjour"[2:5]
'njo'
>>> "Bonjour"[2:]
'njour'
>>> "Bonjour"[:5]
'Bonjo'
>>> "Bonjour"[:]
'Bonjour'
>>> "Bonjour"[3:3]
''
>>> "Bonjour"[3:4]
'j'
"Bonjour"[2:5]
8
3 4 510 2 6 7
'njo'
Variables
variable : liaison d’un nom à une donnée (pendant un certain temps)
une donnée
une(des) cellule(s) moire où elle est conservée
un nom
affectation : opération par laquelle on crée cette liaison
>>> vitesse = 90.0
>>>
accès : toute occurrence (ailleurs qu’à gauche de « = »)
du nom d’une variable représente la valeur de celle-ci
>>> 1000 * vitesse / 3600
25.0
>>>
Cours_1_4 © L. Tichit, 03/09/16 page 15 / 23
90.0
vitesse
Les variables évoluent
>>> vitesse
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'vitesse' is not defined
>>> vitesse = 120
>>> vitesse
120
>>> vitesse = 90
>>> vitesse
90
>>> type(vitesse)
<type 'int'>
>>> vitesse = 90.0
>>> type(vitesse)
<type 'float'>
>>> vitesse = "a l'arret"
>>> vitesse
"a l'arret"
>>>
Cours_1_4 © L. Tichit, 03/09/16 page 16 / 23
Affecter n’est pas comparer
affectation : a un effet, n’a pas de valeur
>>> a = b
>>>
− produit un changement (de la valeur de a)
− ne renvoie pas de valeur
comparaison : a une valeur, n’a pas d’effet
>>> a == b
False
>>>
− aucune variable n’est changée
− renvoie une valeur (par exemple, False)
Cours_1_4 © L. Tichit, 03/09/16 page 17 / 23
Affectations multiples
affecter plusieurs variables par la même valeur
>>> a = b = c = 0
>>>
affecter plusieurs variables en même temps
>>> a, b = 0, 1
>>>
plus fort :
>>> a, b = b, a + b
>>>
Cours_1_4 © L. Tichit, 03/09/16 page 18 / 23
couple de variables couple de valeurs
Opérateurs et expressions
expression
assemblage de constantes, variables et opérateurs
soumis à une syntaxe précise
qui renvoie une valeur
volume = surfaceBase * hauteur / 3
2ème service rendu par les langages de programmation :
les expressions s’y écrivent comme on nous l’a appris
attention : tous les éléments d’une expression doivent êtrefinis
>>> volume = surfaceBase * hauteur / 3
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'surfaceBase' is not defined
>>>
Cours_1_4 © L. Tichit, 03/09/16 page 19 / 23
expression
Opérateurs
arithmétiques : + − * ** / %
>>> 2 ** 3 # puissance
8
>>> 17 % 5 # modulo (reste du quotient)
2
>>>
comparaison : == != < <= > >=
>>> 2 ** 3 == 8
True
>>>
logiques : and or not
>>> x = 14
>>> x >= 10 and x <= 20
True
>>>
quelques bizarreries : + (entre chaînes), % (avec une chaîne), etc.
Cours_1_4 © L. Tichit, 03/09/16 page 20 / 23
1 / 6 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !