Bonsoir. Je dois faire un exo, mais je butte à mort : voici l'enoncé
Reprenez le programme de l'exercice pr ec edant en consid erant cette fois la vraie ponctuation de la langue fran caise :
une phrase peut egalement se terminer par "..." (en plus de ".", " ?" et " !"). Nota : si le texte inclut une phase vide,
elle est compt ee. Par exemple, "Ha !.Tu ris..." et "Ha..Tu ris..." contiennent 3 phrases (la deuxi eme phrase est vide).
L'enonce précedent est le même, sauf qu'il exclut "...". J'ai trouvé ça comme programme (qui marche) :
texte = "Ha !.Tu ris..."
i = 0
compteur = 0
longueur = len(texte)
while i<longueur :
if texte[i]=="." or texte[i]=="?" or texte[i]=="!" :
compteur = compteur + 1
i=i+1
print("Le texte contient",compteur,"phrases")
Help SVP ![]()
Déjà il faudrait que tu fasses une demande plus claire car bon avec les espaces et les accents manqués dans l’énoncé ...
Ouais je sais, c'est sale. Je vais faire capture écran, ce sera plus simple ![]()
Quand t'as un point t'as qu'à vérifier si en i+1 et i+2 t'as aussi un point, si c'est le cas c'est que ta phrase est finie.
C'est déjà un bon début.
Voilà. Mon programme correspond à celui de la question 2. Je n'arrive pas à faire la 3 : j'ai essayé d'autres conditions avec if, mais ca m'emmène toujours en gros bordel avec des : Le texte contient -6 phrases ![]()
Ah, j'y suis presque. Mais si je met quatre points, je me fait avoir (ca fait 1 phrase) :
texte = "Ha....Tu ris..."
i = 0
compteur = 0
longueur = len(texte)
while i<longueur :
if texte[i]=="." or texte[i]=="?" or texte[i]=="!" :
compteur = compteur + 1
if texte[i]=="." and texte[i-1]=="." and texte[i-2]=="." :
compteur = compteur - 2
i=i+1
Désolé pour les
, ça compte comme tabulation
print("Le texte contient",compteur,"phrases")
C'est plus facile de faire avec i +1 +2 que i -1 -2.
Tu n'as pas besoin de faire -2 à ton compteur, et rien ne t'oblige à faire i = i + 1, tu peux l'incrémenter de 3 au lieu d'1 si besoin est.
Ouais mais dans ce cas là, ca ne comptera plus les ? et les !, non? ![]()
Mais si tu veux rester avec ton -1 -2 tu peux garder en mémoire le i du dernier point de suspension. Si tu as encore des . après tes points de suspension tu pourras comparer le i actuel avec le i que tu as gardé au chaud, si y'a une différence de 2 ou moins c'est que tu dois compter ton point comme un point normal et non pas comme un nouveau point de suspension.
Et au passage, je ne sais pas comment fonctionne python mais si ta phrase commence par ... tu risques d'avoir des problèmes non ?
Ben j'ai dit "si besoin est", donc juste dans le cas où t'as 3 points d'affilés. Ça change rien au niveau des ? et !
Désolé, mais j'ai rien pigé à ce que t'as dit ![]()
A part les conditions et les variables de bases, j'y connais pas grand chose ![]()
http://pastebin.com/LZcvu9wD
Tiens j'ai commenté viteuf.
( v. 2 de Python )
C'est plutôt sale et ça marche que parce que interprétateur Python teste dans le même ordre duquel t'écris les conditions,
Sinon t'aurai une belle erreur du genre "Index undefined" à la ligne 10
C'est à dire que "TXT[i+1]" n'existe que si "i<len(TXT)-1" ,
Donc faire les deux tests dans la même condition c'est suicidaire ( mais j'aime ça )
Serialesky
Pas vraiment suicidaire ni même sale algorithmiquement on appelle ça un "et puis" ou "and then" la majorité des langage que je connaisse utilise des "et puis" et des "ou alors" (car plus pratique et plus optimisé). Les rare exception comme ADA propose 2 mot clef pour distingué le "et" et le "et puis" algorithmique.
Sinon ta solution ne marche pas car si tu a !? a la suite tu compte une phrase alors que ça doit être 2.
Sinon une solution simple est la suivante en jouant sur l'indice i (tout en faisant attention de pas sortir du tableau quand tu cherche des ...) :
http://pastebin.com/Br1mBy7J
" Sinon ta solution ne marche pas car si tu a !? a la suite tu compte une phrase alors que ça doit être 2. "
Euh .. non c'est géré ça.
"Coucou !? Ca va ?" > 2 phrases
"Coucou !?!.!?. KIKOO !...? " > 2 phrases
► http://redsky.fr ► Outils pour JVC ![]()
"Nota : si le texte inclut une phase vide,
elle est comptée. Par exemple, "Ha !.Tu ris..." et "Ha..Tu ris..." contiennent 3 phrases (la deuxième phrase est vide)."
donc
"Coucou !? Ca va ?" > 3 phrases
"Coucou !?!.!?. KIKOO !...? " > 10 phrases
► http://redsky.fr ► Outils pour JVC ![]()
Faut lire l'énoncé Serialesky, jc-angel a raison.
Ah, autant pour moi alors. (Mais bon l'énonce me semble illogique alors, j'vois pas l'intérêt.)
► http://redsky.fr ► Outils pour JVC ![]()
Il n'y a qu'une exception : trois points consécutifs.
Soit une chaîne de caractères S, si l'on souhaite compter le nombre de phrases comme définies dans l'énoncé, c'est-à-dire zéro caractère quelconque ou plus - différents de ".", "?", et "!" - suivi(s) soit du caractère ".", soit "?", ou bien "!", on doit exclure de S les caractères différents de ces derniers après avoir considéré chaque point suivi de deux pour qu'un point, c'est-à-dire enlever les deux points suivants pour n'en garder qu'un.
Le nombre de phrases dans S est alors égal à la taille de la chaîne S, c'est-à-dire au nombre de caractères restants dans S.
Par contre, l'énoncé n'est pas clair, car il n'est pas dit :
- si une exception suivie d'une règle, ou bien l'inverse, doit être considérée comme vérifiant le motif d'une ou deux phrases vides, e.g., "...?" pourrait ne correspondre qu'à une seule phrase ;
- si l'exception a une précédence plus élevée que les règles ou non, e.g., si "..." doit être effectivement vu comme tel, ou alors comme ".. ." ou bien ". .." (identiques).
Trois solutions, la solution C étant la plus rapide sur des petits tests et la B la plus rapide des trois : https://gist.github.com/anonymous/7591895/raw/ac072911ffa02d57a8af18f2dbb0421a1a93677b/gistfile1.py
texte = "Salut. Bien ou bien ? Okay !! ... Oui ! . :S"
ponct = ["...", "?", "!", "."]
texte = [texte]
for p in ponct:
txt = []
for t in texte:
txt += t.split(p)
texte = txt
print(len(texte) - 1)
7
![]()