Correction de Mot le plus long

Quelques propositions d'élèves, et à la fin un corrigé du professeur.

Propositions d'élèves

À la suite de chaque proposition de code, un commentaire de correction du professeur. Le cartouche demandé en introduction a été supprimé ici.

Proposition 1

def mot_le_plus_long(chaine_caractère: str) -> int:
    """Cette fonction prend en paramètre une chaîne de caractère et renvoie le nombre de caractère du plus long mot de cette chaîne.
    >>> 74
        ecrivez une fonction qui trouve la longueur du plus long mot dans ce texte
    8
    """
    chaine_caractère = chaine_caractère.split()
    mot = ""
    for x in chaine_caractère:
        if len(mot) < len(x):
            mot = x
    return len(mot)

# tests
import doctest
doctest.testmod()

# Entrée
nb_caractère = int(input())
chaine_caractère = input()

# Sortie
print(mot_le_plus_long(chaine_caractère))

Proposition 2

def recherche_mot_long(liste_mots : list) -> int:
    """ Renvoie la longueur du mot le plus long de la liste
    >>> recherche_mot_long(['bonjour','salutation','coucou'])
    10
    >>> recherche_mot_long(['ahahah','ok','voiture'])
    7
    """
    
    longeur_plus_longue = len(liste_mots[0])

    for x in range(1,len(liste_mots)):
        if len(liste_mots[x]) > longeur_plus_longue:
            longeur_plus_longue = len(liste_mots[x])
    return longeur_plus_longue

# tests
import doctest
doctest.testmod()

# Entrée
nb_caractère = int(input())
liste_mots = list(input().split())

# Sortie
print(recherche_mot_long(liste_mots))

Proposition 3

nombre_caractères = int(input())

liste_mots = input().split(" ")

# On crée une liste où, à la place d'avoir les mots, on a leur longueur en utilisant `map`
liste_longueur_mots = list(map(len, liste_mots))

# Et on affiche la plus grande longueur de la liste des longueurs de mots
print(max(liste_longueur_mots))

Proposition 4

def mot_le_plus_long(phrase : str) -> int:
    """Renvoie la longueur du plus long mot.
    >>> mot_le_plus_long('ecrivez une fonction qui trouve la longueur du plus long mot dans ce texte')
    8
    """
    liste = phrase.split()
    plus_grand_mot = ""
    for i in liste:
        if (len(plus_grand_mot) < len(i)):
            plus_grand_mot = i
    print(len(plus_grand_mot))

# Test
import doctest
doctest.testmod()

# Entrées
nb_lettres = int(input())
phrase = input()
if not (0 <= nb_lettres <= 200):
    raise ValueError("Trop de lettres")

# Sortie
mot_le_plus_long(phrase)

Proposition 5

def cherche_mot_long(nb_caractère: int, phrase):
    """ trouve le mot le plus long dans la phrase 
    et renvoie le nombre du plus grand caractère 
    >>> cherche_mot_long(74, ['ecrivez', 'une', 'fonction', 'qui', 'trouve', 'la', 'longueur', 'du', 'plus', 'long', 'mot', 'dans', 'ce', 'texte'])
    8
    """
    if nb_caractère > 200:
        raise ValueError("nombre de caractère trop grand")
    else:
        longeur_mot = len(phrase[0])
        for x in phrase:
            if len(x) >= longeur_mot:
                longeur_mot = len(x)
        return longeur_mot
        
import doctest
doctest.testmod()

nb_caractère = int(input())
phrase = input().split()
print(cherche_mot_long(nb_caractère, phrase))

Proposition 6

def mot_le_plus_long(texte):
    """ Cette fonction prend en paramètre une chaîne de caractères, et elle renvoie le nombre de caractères du plus long mot de cette chaîne.

    Je n'ai pas activer le test, car celui-ci faisait bugger le programme et je ne sais pas comment le rendre juste.
    # >>> mot_le_plus_long(ecrivez une fonction qui trouve la longueur du plus long mot dans ce texte)
    8
    """

    ans = ""
    for lettre in texte:
        if len(lettre)>len(ans):
            ans = lettre
    return ans
        
# tests
import doctest
doctest.testmod()

# Entrée
nb_caractères = int(input())
texte = input().split()

# Sortie
print(len(mot_le_plus_long(texte)))

Soit on code en anglais, soit en français. Le mélange n'est pas fabuleux...

Proposition 7

# 0- Coeur du programme

def mot_le_plus_long(nb_lettres: int, chaîne_mots: list) -> int:
    """ Renvoie le nombre de caractère du plus long mot de chaîne_mots
    >>> mot_le_plus_long(11, ["Hello", "World"])
    5
    >>> mot_le_plus_long(74, ["ecrivez", "une", "fonction", "qui", "trouve", "la", "longueur", "du", "plus", "long", "mot", "dans", "ce", "texte"])
    8
    """

    plus_long = 0
    for mot in chaîne_mots:
        longueur_mot = len(mot)
        if longueur_mot > plus_long:
            plus_long = longueur_mot
    return plus_long
    
# 1- Tests

import doctest
doctest.testmod()

# 2- Lecture des entrées

nb_lettres = int(input())
chaîne_mots = input().split()

# 3- Appel de la fonction / Sortie

print(mot_le_plus_long(nb_lettres, chaîne_mots))

Proposition 8

def longueur_max_mot(texte : str) -> int :
    """ Renvoie l'entier correspondant à la longueur du plus long mot 
    de la chaîne de caractère 'texte'. 
    
    >>> texte = 'ecrivez une fonction qui trouve la longueur du plus long mot dans ce texte'
    >>> longueur_max_mot(texte)
    8
    
    """ 
    max = 0
    for mot in texte :
        if len(mot) > max :
            max = len(mot)
    return max

# tests
import doctest
doctest.testmod()

# Entrée
nb_caractères = int(input())
assert 1 <= nb_caractères <= 200
texte = input().split()

# Sortie
print(longueur_max_mot(texte))

Corrigé du professeur

"""
auteur : Franck CHAMBON
https://prologin.org/train/2003/semifinal/mot_le_plus_long
"""

def longueur_plus_long_mot(chaîne: str) -> int:
    """Renvoie la longueur du mot le plus long.
    
    >>> longueur_plus_long_mot("ecrivez une fonction qui trouve\
                    la longueur du plus long mot dans ce texte")
    8

    >>> longueur_plus_long_mot("aaa b")
    3

    >>> longueur_plus_long_mot("a bbb")
    3

    >>> longueur_plus_long_mot("cc")
    2

    """
    taille = len(chaîne)
    longueur_max = 0
    longueur = 0
    for i in range(taille):
        if chaîne[i] == ' ':
            if longueur_max < longueur:
                longueur_max = longueur
            longueur = 0
        else:
            longueur += 1
    # test du dernier mot
    if longueur_max < longueur:
        longueur_max = longueur

    return longueur_max


import doctest
doctest.testmod()

taille = int(input())
chaîne = input()

print(longueur_plus_long_mot(chaîne))
def longueur_plus_long_mot(chaîne: str) -> int:
    return max(map(len, chaîne.split()))

map renvoie un itérateur, et aucune liste intermédiaire n'est créée.