Bonjour à tous et merci d’avance de votre aide. Mon problème c’est que je suis bloquée sur un exercice. Voilà le sujet :
En étudiant différents types de textes (romans, lois, article de journaux…), on se rend compte que non seulement les mots utilisés ne sont pas les mêmes mais aussi que leurs longueurs sont statistiquement différentes : par exemple, il est beaucoup plus fréquent de trouver de longs mots complexes dans un article de loi que dans un livre pour enfants. Afin d’essayer de déterminer automatiquement à quelle catégorie appartient un livre, on souhaite déterminer le nombre de mots de 1 lettre, 2 lettres, 3 lettres… qu’il contient.
-
Contraintes : Le texte contient un ensemble de mots, séparés par des espaces, sans aucun signe de ponctuation. Chaque mot contient au plus 100 caractères.
-
Entrée : La première ligne contient deux entiers : nbLignes et nbMots. Chacune des nbLignes lignes suivantes contient nbMots mots.
-
Sortie : Pour chaque longueur de mot possible, et uniquement s’il y avait des mots de cette longueur dans le texte, vous devez afficher sur une ligne la longueur et le nombre de mots de cette longueur, séparés par un deux-points (il faut mettre un espace de chaque côté du deux-points).
Exemple :
entrée :
2 7
Qui vole un oeuf vole un boeuf
Une abeille vaut mieux que mille mouches
sortie :
2 : 2
3 : 3
4 : 4
5 : 3
7 : 2
Voilà le sujet. Alors mon problème c’est que mon programme marche seulement si :
- l’utilisateur ne rentre qu’une seule ligne
- et tous les mots sont différents. (si il y a deux fois "et" par exemple, ça ne marche pas bien.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | nbLignes, nbMots = map(int, input().split(" ")) texte = input() liste = [] motLong = "" premierMot = "" a = 1 b = 1 R1 = [] R2 = [] S = [] R3 = [] for mot in texte.split(" ") : liste.append(mot) liste.sort(key=len) if len(mot) > len(motLong) : motLong = mot longueurMax = len(motLong)+1 for mot in liste : if len(premierMot) != len(mot) : premierMot = mot for a in range(longueurMax) : if premierMot == mot and len(mot) == a : R1.append(a) S.append(b) elif premierMot != mot and len(mot) == a : R2.append(a) S.append(b) R3 = R1 + R2 for z in range(longueurMax) : for y in R1 : x = R3.count(z) if x != 0 and z == y : print(y, " : ", x) |
Voilà ! Je débute donc je me suis certainement compliqué la vie.
Pour quand il y a deux mêmes mots j’avais pensé utiliser un compteur mais je ne sais pas trop comment m’y prendre. Et pour plus d’une ligne, j’ai voulu utiliser for i in range(nbLignes) :
mais je n’arrive pas à afficher ce que je veux. Je pense que c’est parce que j’utilise les mêmes variables donc ça coince au niveau de mes listes.
Voilà, merci d’avance