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 "atgagtgaattcgtca … cccgttaa"
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 données 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 :
dé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)
où 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
où 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) mé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 être définis
>>> 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 l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!