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

Résolu/Fermé
balkis3005 Messages postés 9 Date d'inscription dimanche 13 mars 2022 Statut Membre Dernière intervention 1 avril 2022 - Modifié le 16 mars 2022 à 15:19
mamiemando Messages postés 33333 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 31 octobre 2024 - 16 mars 2022 à 19:35
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 23309 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 2 novembre 2024 Ambassadeur 1 550
15 mars 2022 à 19:12
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 33333 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 31 octobre 2024 7 800
Modifié le 16 mars 2022 à 15:17
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 dimanche 13 mars 2022 Statut Membre Dernière intervention 1 avril 2022
Modifié le 16 mars 2022 à 19:32
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 33333 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 31 octobre 2024 7 800
Modifié le 16 mars 2022 à 19:36
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