Paradigmes de Programmation

publicité
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
Téléchargement