Olivier Miakinen <om+
news@miakinen.net> a écrit ou cité :
Le 06/12/2024 15:51, Stefan Ram m'a répondu :
. . .
(ni de parenthèse
fermante) qui colle direct. Et après le deuxième slash, pareil,
pas de caractère alphanumérique (ni de parenthèse ouvrante)
qui suit direct.
Ok, mais ça ne fait que repousser le problème, parce que rajouter des espaces
n'est pas censé changer la formule mathématique, et qu'on peut vouloir les
mettre ou les retirer pour mieux formater l'affichage en colonnes :
Oui, il semble que ce ne soit pas possible de répondre à toutes
les exigences (à moins d'ajouter un programme d'IA peut-être).
Le programme Python suivant réussit quatre des six cas de test.
Sortie :
Original : /italique/ ou /penché/
Traité : italique ou penché
Attendu : italique ou penché
Correct : True
Original : f_1(x, y) = ((x + y) / x) + (y / (x + y))
Traité : f_1(x, y) = ((x + y) / x) + (y / (x + y))
Attendu : f_1(x, y) = ((x + y) / x) + (y / (x + y))
Correct : True
Original : f_2(x, y) = ((x + y) /x²) + (−y/ (x + y))
Traité : f_2(x, y) = ((x + y) x²) + (−y (x + y))
Attendu : f_2(x, y) = ((x + y) /x²) + (−y/ (x + y))
Correct : False
Original : f(x, y) = (x + y)/x − y/(x + y)
Traité : f(x, y) = (x + y)/x − y/(x + y)
Attendu : f(x, y) = (x + y)/x − y/(x + y)
Correct : True
Original : | Olivier | *TRÈS MAUVAIS* | Doit /redoubler/ | 0/20 |
Traité : | Olivier | TRÈS MAUVAIS | Doit redoubler | 0/20 |
Attendu : | Olivier | TRÈS MAUVAIS | Doit redoubler | 0/20 |
Correct : True
Original : ni *(attention c'est important)* ni (*attention c'est important*) ne
Traité : ni (attention c'est important) ni (*attention c'est important*) ne
Attendu : ni (attention c'est important) ni (attention c'est important) ne
Correct : False
Code source :
import re
def est_alphanum(caractere):
"""Vérifie si le caractère est alphanumérique ou un symbole de parenthèse."""
return caractere.isalnum() or caractere in '()'
def traiter_texte(texte):
"""Traite le texte pour conserver ou supprimer certains caractères."""
precedent = ' '
position = 0
longueur = len( texte )
resultat = ''
while position < longueur:
caractere = texte[ position ]
suivant = ' ' if position + 1 >= longueur else texte[ position + 1 ]
if caractere in( '/', '*' ):
# Vérifie les conditions pour décider de conserver le caractère
if not est_alphanum(precedent) and est_alphanum(suivant):
pass
elif est_alphanum(precedent) and not est_alphanum(suivant):
pass
else:
resultat += caractere # Conserver le caractère
else:
resultat += caractere # Conserver les autres caractères
position += 1
precedent = caractere
return resultat
# Cas de test
exemples = [
"/italique/ ou /penché/",
"f_1(x, y) = ((x + y) / x) + (y / (x + y))",
"f_2(x, y) = ((x + y) /x²) + (−y/ (x + y))",
"f(x, y) = (x + y)/x − y/(x + y)",
"| Olivier | *TRÈS MAUVAIS* | Doit /redoubler/ | 0/20 |",
"ni *(attention c'est important)* ni (*attention c'est important*) ne"
]
resultats_attendus = [
"italique ou penché",
"f_1(x, y) = ((x + y) / x) + (y / (x + y))",
"f_2(x, y) = ((x + y) /x²) + (−y/ (x + y))",
"f(x, y) = (x + y)/x − y/(x + y)",
"| Olivier | TRÈS MAUVAIS | Doit redoubler | 0/20 |",
"ni (attention c'est important) ni (attention c'est important) ne"
]
# Tester la fonction
for i, exemple in enumerate(exemples):
resultat = traiter_texte(exemple)
print(f"Original : {exemple}")
print(f"Traité : {resultat}")
print(f"Attendu : {resultats_attendus[i]}")
print(f"Correct : {resultat == resultats_attendus[i]}")
print()