
Envoyé par
alainb
Pourrais-tu m'aider à le debugger ?
Le plus important dans ce détail du programme sera comment on va pouvoir tester ou pas et de la pertinence du plan de tests.
Si je prends comme test la chaine de caractères:
line = "Louise(H), Pa (Hh) Pierre (ABCDE) xBH) BH)"
le code pourrait être:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| i = len(line)
while True:
b = line.rfind(')', 0, i)
if b == -1:
break
a = line.rfind('(', 0, b)
if a == -1:
break
if not (1 <= b-a <= 4):
print('error1:', line[a:b+1])
else:
for j in range(a+1, b):
if not('A' <= line[j] <= 'Z'):
print('error2:',line[j], line[a:b+1])
break
i = b-1 |
qui affiche:
1 2 3 4
| error1: (ABCDE) xBH) BH)
error1: (ABCDE) xBH)
error1: (ABCDE)
error2: h (Hh) |
Si on est content, on améliore la remontée des erreurs et on emballe le tout dans une fonction.
On pourra noter qu'avec le pattern proposé par CosmoKnacki, manque des cas (de mon exemple)
1 2
| >>> re.findall(r'\b(?<!\()[A-Z]{1,4}\)', line)
['BH)'] |
ce qui n'a aucune importance car tout dépend de comment le problème a été analysé. Ce qui suppose travailler sur les données... pour définir la ou les solutions plutôt que de se plier à des desiderata qui ne sont peut être pas si fondés que çà.
- W
Partager