Python Un langage de programmation par scripting et plus… CSI2520, Hiver 2007 Paradigme de programmation par scripting • Langage de plus haut niveau – Syntaxe simple • Souvent interprété • Axé sur le développement rapide • Typage dynamique – Variable non-déclarée – Erreur de typage détecté à l’exécution • Riche en modules réutilisable CSI2520, Hiver 2007 Python • Créé en 1991, en logiciel libre depuis 2000 • C’est avant tout un langage multiparadigme • Programmation très productive (3x à 10x) – Facile à apprendre – Prototypage rapide • Encourage la réutilisation et le logiciel libre – Beaucoup de modules disponibles CSI2520, Hiver 2007 Interpréteur Python >>> print "Hello world ! " Hello world ! >>> >>> 1 + 1 2 >>> CSI2520, Hiver 2007 Typage >>> y = 3.14 >>> y 3.1400000000000001 >>> a = "bonjour" >>> a 'bonjour' >>> b = 'salut' >>> b 'salut' >>> c = '''girafe''' >>> c 'girafe‘ >>> x = 45 >>> x + 2 47 >>> y = 2.5 >>> x + y 47.5 >>> (x * 10) / y 180.0 >>> chaine = "Salut" >>> chaine 'Salut' >>> chaine + " Python" 'Salut Python' >>> chaine * 3 'SalutSalutSalut' >>> x = 2 >>> type(x) <type 'int'> >>> x = 2.0 >>> type(x) <type 'float'> >>> x = '2' >>> type(x) <type 'str'> CSI2520, Hiver 2007 Ecriture formattée >>> x = 32 >>> nom = 'John' >>> print nom , ' a ' , x , ' ans' John a 32 ans >>> nbG = 4500 >>> nbC = 2575 >>> percGC = propGC * 100 >>> print "Ce génome contient %i G et %i C, un %%GC de %.2f" % (nbG,nbC,percGC) ,"%" Ce génome contient 4500 G et 2575 C, un %GC de 47.80 % CSI2520, Hiver 2007 >>> animaux[0:2] ['girafe', 'tigre'] >>> animaux[0:3] ['girafe', 'tigre', 'singe'] >>> animaux[0:] >>> animaux = ['girafe','tigre','singe','souris'] ['girafe', 'tigre', 'singe', 'souris'] >>> animaux[1] >>> animaux[:] 'tigre‘ ['girafe', 'tigre', 'singe', 'souris'] >>> animaux[-2] >>> animaux[1:] 'singe' ['tigre', 'singe', 'souris'] >>> tailles = [5, 2.5, 1.75, 0.15] >>> animaux[1:-1] >>> mixte = ['girafe', 5, 'souris', 0.15] ['tigre', 'singe'] >>> animaux >>> ani1 = ['girafe','tigre'] ['girafe', 'tigre', 'singe', 'souris'] >>> ani2 = ['singe','souris'] >>> tailles >>> ani1 + ani2 [5, 2.5, 1.75, 0.15] ['girafe', 'tigre', 'singe', 'souris'] >>> mixte >>> ani1 * 3 ['girafe', 5, 'souris', 0.15] ['girafe', 'tigre', 'girafe', 'tigre', 'girafe', 'tigre'] >>> range(0,1000,200) [0, 200, 400, 600, 800] Listes CSI2520, Hiver 2007 Opérations sur les listes >>> a = [66.25, 333, 333, 1, 1234.5] >>> print a.count(333), a.count(66.25), a.count('x') 210 >>> a.insert(2, -1) >>> a.append(333) >>> a [66.25, 333, -1, 333, 1, 1234.5, 333] >>> a.index(333) 1 >>> a.remove(333) >>> a [66.25, -1, 333, 1, 1234.5, 333] >>> a.reverse() >>> a [333, 1234.5, 1, 333, -1, 66.25] >>> a.sort() >>> a [-1, 1, 66.25, 333, 333, 1234.5] CSI2520, Hiver 2007 Génération de listes >>> squares = [x**2 for x in range(10)] >>> squares [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y] [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)] >>> vec = [[1,2,3], [4,5,6], [7,8,9]] >>> [num for elem in vec for num in elem] [1, 2, 3, 4, 5, 6, 7, 8, 9] CSI2520, Hiver 2007 Dictionnaire >>> tel = {'jack': 4098, 'sape': 4139} >>> tel['guido'] = 4127 >>> tel {'sape': 4139, 'guido': 4127, 'jack': 4098} >>> tel['jack'] 4098 >>> del tel['sape'] >>> tel['irv'] = 4127 >>> tel {'guido': 4127, 'irv': 4127, 'jack': 4098} >>> tel.keys() ['guido', 'irv', 'jack'] >>> 'guido' in tel True CSI2520, Hiver 2007 Boucle • L’indentation est obligatoire – L’utilisation de 4 espaces est suggérée >>> for i in range(4): ... print i ... 0 1 2 3 >>> animaux = ['girafe', 'tigre', 'singe', 'souris'] >>> for i in range(4): ... print animaux[i] ... girafe tigre singe souris CSI2520, Hiver 2007 Test >>> if x < 0: ... x = 0 ... print 'Negative changed to zero' ... elif x == 0: ... print 'Zero' ... elif x == 1: ... print 'Single' ... else: ... print 'More' CSI2520, Hiver 2007 Modules • Un module est un fichier texte contenant des instructions Python • Le nom du fichier est le nom du module – Extension .py – Variable système PYTHONPATH >>> import fibo >>> fibo.fib(1000) 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 CSI2520, Hiver 2007 Définir un module def fib(n): # write Fibonacci series up to n a, b = 0, 1 while b < n: print b, a, b = b, a+b def fib2(n): # return Fibonacci series up to n result = [] a, b = 0, 1 while b < n: result.append(b) a, b = b, a+b return result CSI2520, Hiver 2007 Fichiers >>> f = open(fichier.txt', 'w') >>> f.readline() 'This is the first line of the file.\n' >>> f.readlines() ['This is the first line of the file.\n', 'Second line of the file\n'] >>> for line in f: print line This is the first line of the file. Second line of the file CSI2520, Hiver 2007 Persistence • N’importe quel objet peut être sauvegardé pickle.dump(x, f) x = pickle.load(f) CSI2520, Hiver 2007 Programmation fonctionnelle >>> def f(x): return x % 2 != 0 and x % 3 != 0 ... >>> filter(f, range(2, 25)) [5, 7, 11, 13, 17, 19, 23] >>> def add(x,y): return x+y ... >>> reduce(add, range(1, 11)) 55 >>> def cube(x): return x*x*x ... >>> map(cube, range(1, 11)) [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000] CSI2520, Hiver 2007 Tour de Hanoi def hanoi(n,de,a,par): if n>0: hanoi(n-1,de,par,a) print str(de),"-->",str(a) hanoi(n-1,par,a,de) n=input("donner le nombre de disques : ") hanoi(n,1,2,3) CSI2520, Hiver 2007