banniere.png

Exercice 04 - trier des phrases suivant le nombre de mots

#!/usr/bin/python
# -*- coding: ISO-8859-15 -*-
from itertools import ifilter, imap

ponctuation = '.;:,?!"\'&#(){}+=%*$&#8209_'

def nettoie_phrase(phrase):
    """ nettoie la phrase """
    def caractere_valide(caractere):
        if caractere in ponctuation:
            return ' '
        return caractere

    def mot_valide(mot):
        return len(mot) > 2

    phrase_iter = imap(caractere_valide, phrase)
    phrase_nettoyee = ''.join(list(phrase_iter))
    mots = phrase_nettoyee.split()
    return len(mots), phrase

def compare_phrase(phrase1, phrase2):
    """ compare les longueurs des phrases

    Si les phrases ont la même longueur, les départager avec un cmp
    """
    if phrase1[0]? > phrase2[0]?:
        return 1
    elif phrase1[0]? < phrase2[0]?:
        return -1
    else:
        # même longueur, tri normal
        return cmp(phrase1[1]?, phrase2[1]?)

def tri_phrases(texte):
    """ renvoie un tri en fonction du nombre de mots """
    phrases = imap(nettoie_phrase, texte)
    phrases = sorted(phrases, cmp=compare_phrase)
    return [phrase[1]? for phrase in phrases]

def saisie_texte():
    print 'saisissez des phrases (une ligne vide pour terminer)'
    texte = []?
    saisie = True
    while saisie:
        ligne = raw_input()
        if ligne == '':
            saisie = False
        else:
            texte.append(ligne)
    return texte

if __name__ == '__main__':
    texte = saisie_texte()
    resultat = tri_phrases(texte)
    print 'résultat:'
    for phrase in resultat:
        print phrase

Tarek Ziadé. Copyright 2006. Tous droits réservés. Licence contenu site