Initiation à l`algorithmique et la programmation en langage Python

Transcription

Initiation à l`algorithmique et la programmation en langage Python
Initiation à l’algorithmique
et la programmation en langage Python
Ressources
• enseignant
 [email protected]
• sites web
U.E. « Programmation Structurée »
− sujets des TP
− supports cours et documentations
− annonces diverses
 www.dil.univ-mrs.fr/~tichit/ps
 www.python.org
• documentation papier
 très copieuse, consultable et téléchargeable sur ces sites
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
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"
• logiciel
 tout le système Python est librement téléchargeable sur www.python.org
 Attention, nous utilisons la version 3 de python :
o python3.4 est installé en salle TP
o chez 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
Schéma de principe d’un ordinateur
Processeur
Processeur
double
bus
Actif : calcul, décodage et
coeur
exécution des instructions Core i3
Rapide : ~ 3 GHz
Core i3
(3 × 109 cycles/sec)
Mémoire centrale
Passive : conservation des données.
Rapide. Grosse : ~ 4 Go
(4 × 109 cellules élémentaires)
4 Go
réponse : positions 6, 124, 2540, 6723, …
Mémoire de masse (disque dur)
Plus grosse (~ 1 To = 1× 1012).
Persistante.
Définition :
• algorithme : description précise des opérations à faire
1 bit (binary digit = chiffre binaire)
1 byte = 1 octet = 8 bits
• 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
1 To
Interfaces unité centrale – organes périphériques
Acquisition et production de données
clavier, écran, HP, imprimante, carte réseau, etc.
Cours_1_4
© L. Tichit, 03/09/16
page 4 / 23
Principe de fonctionnement
Langage évolué, compilation, interprétation
• le processeur exécute (automatiquement et très vite) les instructions
constituant un programme enregistré dans la mémoire
• 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
• les instructions représentent des opérations sur des données
• avant exécution, instructions et données doivent être converties en binaire
• certaines données sont enregistrées dans le programme,
d’autres sont obtenues durant l’exécution
• interprétation (« code source » est le programme que vous avez écrit) :
 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
• compilation :
01001111001001110010101010111100101000110101010001010
un octet
un octet
Cours_1_4
un octet
un octet
© L. Tichit, 03/09/16
un octet
un octet
un octet
page 5 / 23
Cours_1_4
Analyse−programmation
page 6 / 23
Un programme de qualité est un programme…
• le travail de l’analyste-programmeur devant un problème donné :
• correct
 trouver l’algorithme de résolution
 l’écrire dans un langage de programmation
 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
• 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
souvent couplés
(inversement)
• robuste
• 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)
 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
• processus de développement :
Analyse
© L. Tichit, 03/09/16
Codage
Test
fin
 les qualités précédentes étant acquises, le meilleur programme est
celui qui optimise les ressources (temps, mémoire, etc.), surtout le temps
Découverte d’erreurs
ou d’améliorations
Cours_1_4
© L. Tichit, 03/09/16
page 7 / 23
Cours_1_4
© L. Tichit, 03/09/16
page 8 / 23
Le langage Python
Le mode immédiat (ou interactif)
• créé par Guido van Rossum (Pays-Bas, 1991). Trois éléments :
• Python interprété : utilisation en « mode calculette ». Exemple :
 définition du langage : vocabulaire, syntaxe, types de données
 machine Python (ou interpréteur)
 bibliothèque, devenue depuis très copieuse
connexion au système (ici Linux)
• 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
[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
A propos des nombres
• données : données initiales, résultats, valeurs intermédiaires
• possibilité d’écrire un nombre en base 8 (octal) ou 16 (hexadécimal)
• types primitifs :
>>> 033
27
>>> 0x1B
27
 entiers (sur 32 bits)
0
123
-50
340282366920938463463374607431768211456
1L
 nombres non entiers (on dit « flottants »)
-0.33333333333333331
0.166054018e-23
 chaînes de caractères
>>> 1 / 3
0
 quelques valeurs conventionnelles
• expressions mixtes (règle du plus fort)
page 11 / 23
>>> 1 // 3
0
>>> 1.0 // 3.0
0
Python2 :(
True (vrai), False (faux), None (absence de valeur)
© L. Tichit, 03/09/16
>>> 1 / 3
0.3333333333333333
>>> 1.0 / 3
0.33333333333333331
>>> float(1) / 3
0.33333333333333331
"J'aime Python"
Cours_1_4
# 1 x 16 + 11 = 27
• attention à la division entre entiers
 entiers longs
1.5
# 3 x 8 + 3 = 27
Cours_1_4
© L. Tichit, 03/09/16
Python3 :)
page 12 / 23
Chaînes de caractères
Des opérations avec des chaînes
• plusieurs notations
• concaténation
>>> "Bonjour"
'Bonjour'
• 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" + " a tous"
'Bonjour a tous'
>>> "Bonsoir" * 3
'BonsoirBonsoirBonsoir'
>>>
>>> "Bonjour" == 'Bonjour'
True
>>> 'Il a dit "bonjour"'
'Il a dit "bonjour"'
>>> 'J\'ai dit "bonjour"'
'J\'ai dit "bonjour"'
• accès aux caractères
>>> print('J\'ai dit "bonjour"')
J'ai dit "bonjour"
>>>
'j'
>>>
'B'
>>>
'r'
>>>
'r'
>>>
>>> """Ceci est une
longue chaine"""
'Ceci est une\nlongue chaine'
>>> print("""Ceci est une
longue chaine""")
Ceci est une
longue chaine
>>>
"Bonjour"[3]
"Bonjour"[0]
"Bonjour"[6]
"Bonjour"[2:5]
"Bonjour"[-1]
0
1
2
3
4
5
'njo'
Cours_1_4
© L. Tichit, 03/09/16
page 13 / 23
Cours_1_4
Variables
page 14 / 23
Les variables évoluent
• 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
90.0
vitesse
• 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
© L. Tichit, 03/09/16
page 15 / 23
>>> 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
6
7
8
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)
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
>>>
couple de variables
Cours_1_4
© L. Tichit, 03/09/16
page 17 / 23
Opérateurs et expressions
© L. Tichit, 03/09/16
 assemblage de constantes, variables et opérateurs
 soumis à une syntaxe précise
 qui renvoie une valeur
volume = surfaceBase * hauteur / 3
expression
• 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
>>>
© L. Tichit, 03/09/16
page 19 / 23
page 18 / 23
Opérateurs
• arithmétiques :
• expression
Cours_1_4
Cours_1_4
couple de valeurs
>>> 2 ** 3
8
>>> 17 % 5
2
>>>
−
*
**
/
%
>
>=
# modulo (reste du quotient)
• comparaison :
>>> 2 ** 3 == 8
True
>>>
• logiques :
+
# puissance
==
!=
<
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
Opérateurs : priorité, associativité, parenthèses
• et entre opérateurs de même priorité ?
La fonction print est-elle utile?
• Python lit, évalue et affiche. Alors, à quoi sert la fonction print ?
100 - 10 - 1
• print est indispensable dans les programmes
pour afficher d’autres choses que le résultat final d’une exécution
• print fait un affichage amélioré
>>> "Prix TTC", 247.3
('Prix TTC', 247.30000000000001)
• associativité de chaque opérateur :
de gauche à droite : 100 - 10 - 1 signifie (100 - 10) – 1
100 – 10 - 1
100 – (10 – 1)
>>> print("Prix TTC", 247.3)
Prix TTC 247.3
• cette amélioration peut être poussée avec l’opérateur %
« format »t d’affichage
>>> print("Prix TTC = %8.2f EUR" % 247.3)
Prix TTC =
247.30 EUR
^^^^^^^^
un nombre flottant, prenant 8 caractères
dont 2 après le point décimal
Cours_1_4
© L. Tichit, 03/09/16
page 21 / 23
Cours_1_4
Importer des modules de la bibliothèque
>>> sqrt(4)
[...]
NameError: name 'sqrt' is not defined
>>> math.sqrt(4)
[...]
NameError: name 'math' is not defined
>>> import math
>>> math.sqrt(4)
2.0
>>> sqrt(4)
[...]
NameError: name 'sqrt' is not defined
>>> from math import sqrt
>>> sqrt(4)
2.0
>>>
Cours_1_4
© L. Tichit, 03/09/16
page 23 / 23
sqrt appartient au module math
le module math n’est pas
connu
importer ne dispense pas
de préfixer, sauf si…
© L. Tichit, 03/09/16
page 22 / 23