Aller au contenu

Préfixes et suffixes

Préfixe

Définition

Pour un mot donné m, on appelle préfixe de ce mot m tout mot constitué des premières lettres du mot m.

Exemples:

  • Les préfixes du mot "carambar" sont c, ca, car, cara, caram, caramb, caramba, carambar.
  • Les préfixes du mot "NSI" sont N, NS, NSI.

Préfixe de longueur donnée

Écrire un corps possible pour la fonction ci-dessous:

def prefixe(mot, n):
    """
    mot -- de type string
    n -- entier > 0
    précondition: n <= nombre de lettres de mot

    renvoie le préfixe de longueur n de mot

    >>> prefixe('carambar', 3)
    'car'
    """
Un code
def prefixe(mot, n):
    """
    mot -- de type string
    n -- entier > 0
    précondition: n <= nombre de lettres de mot

    renvoie le préfixe de longueur n de mot

    >>> prefixe('carambar', 3)
    'car'
    """
    assert n <= len(mot), "Attention, pas de préfixe plus long que le mot!"
    pref = ''
    for k in range(n):
        pref = pref + mot[k]
    return pref

Remarque: prefixe('carambar', 0) renvoie la chaîne vide. Dans l'étude théorique des mots, on définit souvent la chaîne vide (notée en général ε -- lire epsilon -- dans les cours de théorie des mots) comme étant un préfixe de tout mot.

Tous les préfixes

Écrire un code possible pour le corps de la fonction ci-dessous:

def prefixes(mot):
    """
    mot -- de type string (ne comportant pas de virgule)
    précondition: mot n'est pas une chaîne vide

    renvoie une chaîne constituée de tous les préfixes 
    (de longueur > 0) de mot, 
    séparés par une virgule.

    >>> prefixes('carambar')
    'c,ca,car,cara,caram,caramb,caramba,carambar'
    """
Un code

On utilise la fonction de l'exercice précédent.

def prefixes(mot):
    """
    mot -- de type string (ne comportant pas de virgule)
    précondition: mot n'est pas une chaîne vide

    renvoie une chaîne constituée de tous les préfixes 
    (de longueur > 0) de mot, 
    séparés par une virgule.

    >>> prefixes('carambar')
    'c,ca,car,cara,caram,caramb,caramba,carambar'
    """
    assert mot != '', "Attention, mot ne doit pas être une chaîne vide."
    ch = mot[0]
    for k in range(2, len(mot)+1):
        pref = prefixe(mot, k)
        ch = ch + ',' + pref
    return ch

Suffixe

Définition

Pour un mot donné m, on appelle suffixe de ce mot m tout mot constitué des dernières lettres du mot m.

Exemples:

  • Les suffixes du mot carambar sont r, ar, bar, mbar, ambar, rambar, arambar, carambar.
  • Les suffixes du mot NSI sont I, SI, NSI.

Suffixe de longueur donnée

Écrire un code possible pour le corps de la fonction ci-dessous:

def suffixe(mot, n):
    """
    mot -- de type string
    n -- entier > 0
    précondition: n <= nombre de lettres de mot

    renvoie le suffixe de longueur n de mot

    >>> suffixe('carambar', 3)
    'bar'
    """
Un code
def suffixe(mot, n):
    """
    mot -- de type string
    n -- entier > 0
    précondition: n <= nombre de lettres de mot

    renvoie le suffixe de longueur n de mot

    >>> suffixe('carambar', 3)
    'bar'
    """
    assert n <= len(mot), "Attention, pas de suffixe plus long que le mot!"
    suff = ''
    for k in range(len(mot)-1, len(mot)-1-n, -1):
        suff = mot[k] + suff
    return suff

Remarque: on peut aussi convenir que le mot vide est suffixe de tout mot. On l'obtient avec n = 0 dans le code précédent.

variante
def suffixe(mot, n):
    """
    mot -- de type string
    n -- entier > 0
    précondition: n <= nombre de lettres de mot

    renvoie le suffixe de longueur n de mot

    >>> suffixe('carambar', 3)
    'bar'
    """
    assert n <= len(mot), "Attention, pas de suffixe plus long que le mot!"
    suff = ''
    for k in range(len(mot)-n, len(mot)):
        suff = suff + mot[k]
    return suff

Tous les suffixes

Écrire un code possible pour le corps de la fonction ci-dessous:

def suffixes(mot):
    """
    mot -- de type string (ne comportant pas de virgule)
    précondition: mot n'est pas une chaîne vide

    renvoie une chaîne constituée de tous les suffixes 
    (de longueur > 0) de mot, 
    séparés par une virgule.

    >>> suffixes('carambar')
    'r,ar,bar,mbar,ambar,rambar,arambar,carambar'
    """
Un code

On utilise la fonction de l'exercice précédent.

def suffixes(mot):
    """
    mot -- de type string (ne comportant pas de virgule)
    précondition: mot n'est pas une chaîne vide

    renvoie une chaîne constituée de tous les suffixes 
    (de longueur > 0) de mot, 
    séparés par une virgule.

    >>> suffixes('carambar')
    'r,ar,bar,mbar,ambar,rambar,arambar,carambar'
    """
    assert mot != '', "Attention, mot ne doit pas être une chaîne vide."
    ch = mot[-1]
    for k in range(2, len(mot)+1):
        ch = ch + ',' + suffixe(mot, k)
    return ch

Bord

Définition

On appelle bord d'un mot m tout mot qui est à la fois préfixe et suffixe du mot m, sans être le mot m lui-même.

Exemples:

  • Les bords de abacaba: ab, aba.
  • Les bords de abcabcab: ab, abcab.
  • "je suis" est un bord de la chaîne "je suis comme je suis".

On considère également que la chaîne vide est un bord de toute chaîne.

Le bord le plus long

Écrire un code possible pour le corps de la fonction ci-dessous:

def lePlusLongBord(mot):
    """
    mot -- chaîne de caractères

    renvoie le plus long bord de mot.

    >>> lePlusLongBord('abcabcab')
    'abcab'
    """
Un code

On utilise les fonctions suffixe et préfixe des exercices précédents.

def lePlusLongBord(mot):
    """
    mot -- chaîne de caractères

    renvoie le plus long bord de mot.

    >>> lePlusLongBord('abcabcab')
    'abcab'
    """
    bord = ''
    for k in range(1,len(mot)):
        if suffixe(mot,k) == prefixe(mot, k):
            bord = suffixe(mot,k)
    return bord