Supprimer les ponctuation d'une chaîne de caractères

Résolu
balkis3005 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   -
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
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.digit
ajoute tout les chiffres.

Quelqu'un aurait une solution ?
Voila voila, merci pour la lecture =)
A voir également:

3 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
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)
0
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
Bonjour,

Si tu prends le temps de regarder ce que contient
truc
, 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 dans
string.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
0
balkis3005 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
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 variable
val_button1
ne change pas. Pourtant, j'ai mis le
onvalue
et le
offvalue
... J'ai beau chercher, je n'ai rien trouvé...
0
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
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
0