Supprimer les ponctuation d'une chaîne de caractères
Résolu
Bonjour tout le monde,
Alors moi mon problème survient dans un gros programme, donc voici la partie qui me pose problème, sur une zone de test. Le but est de supprimer tous les éléments de

Voici le résultat obtenu avec ce programme :

Le problème, c'est que les ponctuations restent. Je précise que
Quelqu'un aurait une solution ?
Voila voila, merci pour la lecture =)
Alors moi mon problème survient dans un gros programme, donc voici la partie qui me pose problème, sur une zone de test. Le but est de supprimer tous les éléments de
string.punctation(dans le module
string, c'est tout les symboles de ponctuation) de la liste
truc.
Voici le résultat obtenu avec ce programme :
Le problème, c'est que les ponctuations restent. Je précise que
string.digitajoute tout les chiffres.
Quelqu'un aurait une solution ?
Voila voila, merci pour la lecture =)
3 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
peux-tu partager du texte, et pas des images?
as-tu envisagé d'ajouter des print() dans ton programme, pour comprendre son comportement?import string truc=[string.punctuation + string.digits] print (len(truc)) for x in truc: print(x) -
Bonjour,
Si tu prends le temps de regarder ce que contienttruc
, ce n'est ni une chaîne de caractère, ni une liste de caractère, mais une liste qui contient une chaîne de caractère :['!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~0123456789']. Donc quand tu itères dessus,x
désigne le première élément de cette liste (donc la chaîne'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~0123456789'), or cette chaîne n'est pas inclue dansstring.punctuation
.
Il faut bien voir qu'en python, comme les chaînes de caractères sont immutables. Tu ne peux donc pas supprimer le i-ème caractère.
Exemple :
s = "abcde" del s[2]
... renvoie :
----> 1 del s[2]
TypeError: 'str' object doesn't support item deletion
Si tu veux créer une chaîne obtenue en modifiant/combinant une ou plusieurs chaînes, tu vas être obligé de la reconstruire en mémoire. Du coup, tu as meilleur temps de construire la nouvelle chaîne en itérant sur celle d'origine.
import string truc = string.punctuation + string.digits print(truc) s = "".join( a for a in truc if a not in string.punctuation ) print(s)
Bonne chance -
Dernière question.........
Dans mon programme je fais des checkboxes, qui influent sur une génération de mot de passe. Si une checkbox est cochée, le programme doit être capable de s'adapter.
Voici le code :
# creation des checkboutons val_button1 = 'non' check_button1 = Checkbutton(frame2, text='Ponctuations', font=('Helvetica', 20), bg='#4065A4', fg='black', justify=LEFT, onvalue='oui', offvalue='non') val_button2 = 'no' check_button2 = Checkbutton(frame2, text='Majuscule', font=('Helvetica', 20), bg='#4065A4', fg='black', justify=LEFT, variable=val_button2, onvalue='ya', offvalue='non') val_button4 = None check_button4 = Checkbutton(frame2, text='Chiffre', font=('Helvetica', 20), bg='#4065A4', fg='black', justify=LEFT, variable=val_button4, onvalue='oui', offvalue='non') val_button5 = None check_button5 = Checkbutton(frame2, text='Lettre', font=('Helvetica', 20), bg='#4065A4', fg='black', justify=LEFT, variable=val_button5, onvalue='oui', offvalue='non') # affichage des checkboutons check_button1.pack() check_button2.pack() check_button4.pack() check_button5.pack()
Du coup, quand je coche une boite (je teste majoritairement la première), la valeur de la variableval_button1
ne change pas. Pourtant, j'ai mis leonvalue
et leoffvalue
... J'ai beau chercher, je n'ai rien trouvé...-
Ce problème n'ayant rien à avoir avec la question initiale, merci de la poser dans un autre fil de discussion. Mais pour faire court, ça n'est pas comme ça qu'on fait proprement une interface en Tk. Notamment il n'y a pas de boucle d'événements, Je t'invite donc à regarder un tutoriel, par exemple celui-ci : ici la boucle d'événement est lancée avec
root.mainloop()
).
Bonne chance
-