17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Discussion<br />

Exercices corrigés<br />

CHAPITRE 11<br />

Dès qu’une même opération doit être appliquée à une séquence, imap() est un bon<br />

moyen de réduire la complexité du code. Il renvoie un generator sur chaque élément<br />

d’une séquence après lui avoir appliqué la fonction clean_line.<br />

Ici, le fait d’utiliser un generator n’apporte rien de plus qu’une liste comprehension,<br />

si ce n’est que la taille mémoire utilisée pour le traitement reste basse et stable, quelle<br />

que soit la taille du tableau en entrée. Mais utiliser imap dans une directive for améliore<br />

considérablement la lisibilité et la longueur du code.<br />

La fonction sorted() réduit également le code nécessaire à un tri efficace, puisque<br />

dans notre cas, seule la fonction de comparaison est fournie et le reste est pris en<br />

charge par la primitive. Cette dernière utilise la primitive cmp, qui renvoie 0, -1 ou 1<br />

à sorted(), qui se base sur l’algorithme de tri rapide quicksort.<br />

Enfin string.maketrans utilise ici string.punctuation pour nettoyer les phrases<br />

efficacement, avant d’en extraire les mots.<br />

Extension<br />

Sans objet<br />

same_size = cmp(line1[0], line2[0])<br />

if same_size == 0:<br />

return cmp(line1[1], line2[1])<br />

return same_size<br />

def print_sorted_text(text):<br />

""" renvoie un tri en fonction du nombre de mots """<br />

print('Résultat:')<br />

for numwords, line in sorted(imap(clean_line, text), cmp=cmp_lines):<br />

print('%s (%d)' % (line, numwords))<br />

def get_text():<br />

print('Saisissez des phrases (une ligne vide pour terminer): ')<br />

text = []<br />

while True:<br />

line = raw_input()<br />

if line == '':<br />

break<br />

text.append(line)<br />

return text<br />

if __name__ == '__main__':<br />

print_sorted_text(get_text())<br />

357

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!