TP 2
STRUCTURES DE DONNÉES ET ITÉRATION – AKA PYTHONNERIES
Les exercices proposés sont (sauf erreur) faisables en n’utilisant que les concepts qui ont déjà été exposés. Cepen-
dant, il est souvent possible d’écrire quelque chose de plus «idiomatique» à l’aide de structures décrites plus loin
dans le TP ou en utilisant des fonctions de la bibliothèque standard. C’est ce qui a été fait dans le corrigé, tout en
essayant de ne pas sombrer dans l’ésotérisme.
Python 2, Python 3. . .
Le TD a été rédigé en utilisant Python 3, certains exemples peuvent donc demander une petite adaptation si l’on
travaille avec Python 2. En particulier :
•print a été profondément modifié : c’était un statement en Python 2 (comme for,return. . .), c’est devenu une
fonction en Python 3. Je trouve personnellement que c’est une très bonne chose, et je vous encourage donc
à utiliser une solution très simple : from __future__ import print_function. Si vous rajoutez cette ligne au
début de votre fichier, print se comportera comme en Python 3 (et donc comme dans les exemples du TD).
L’utilisation de la fonction print est simple : elle accepte un nombre quelconque d’arguments, séparés par une
virgule, et les affiche. Par défaut, elle rajoutera un espace entre chaque argument et un retour à la ligne à la fin,
ce que l’on peut modifier à l’aide des arguments optionnels sep et end :
>>> from __future__ import print_function
>>> a, b, c = ’ t o t o ’ , 42, [2, 3, 7]
>>> print(a, b, c, 11 + 12)
toto 42 [2 , 3, 7] 23
>>> print(a, b , c, 11 + 12, sep= ’ ++ ’ )
toto ++ 42 ++ [2 , 3, 7] ++ 23
>>> f o r ii n range (3):
print(i)
0
1
2
>>> f o r ii n range (3):
print(i, sep = ’ ’ , end = ’ ’ )
012
•Une différence un peu plus subtile est la prolifération d’itérateurs dits paresseux en Python 3. L’exemple le plus
simple est celui de range : en Python 2, range(5) renvoie la liste [0, 1, 2, 3, 4], en Python 3 une boîte noire
appelée range object. Le plus souvent cela ne change rien : for iin range(3): print(i) fait exactement la
même chose en Python 2 et en Python 3. Cependant, si l’on veut réellement générer une liste (et pas seulement
parcourir ses éléments), une étape supplémentaire est nécessaire en Python 3 :
Python 2
>>> l = range (5)
>>> print(l)
[0, 1, 2, 3, 4]
>>> print(list (l))
[0, 1, 2, 3, 4]
Python 3
>>> l = range (5)
>>> print(l)
range (0, 5)
>>> print(list (l))
[0, 1, 2, 3, 4]
Stage Python – ENS Lyon 1