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