Retirer un élément d'une liste
Résolu/Fermémamiemando Messages postés 33381 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 26 novembre 2024 - 25 oct. 2022 à 15:21
- Retirer un élément d'une liste
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Comment retirer une page sur word - Guide
- Liste de diffusion whatsapp - Guide
- Liste groupe whatsapp - Guide
2 réponses
Modifié le 18 oct. 2022 à 18:23
Bonjour,
Tu devrais afficher avant de faire le liste.remove(...) ce que contient ta liste en insérant devant la commande :
print(liste)
À ce stade, à chaque itération, tu récupère le prochain caractère de phrase, puis transforme ce caractère i en une liste de 8 caractères, et dont la valeur du i-ème caractère est '0' ou '1' selon la valeur i-ème bit de la représentation binaire du caractère traité.
Si on fait le premier tour de boucle, dans ton exemple, i prend la valeur 'C', soit 67 en décimal (résultat de ord('C')), soit la chaîne '01000011' après formatage, et donc ta liste contient ['0', '1', '0', '0', '0', '0', '1', '1']. Du coup elle ne risque pas de contenir '00100000'.
Ici le code que tu sembles vouloir écrire consiste à retirer le caractère dont le code ASCII en binaire est 00100000 soit 32 en décimal, ce qui correspond au caractère espace.
Voici donc deux manières plus naturelles d'écrire ta boucle :
for a in phrase: if ord(a) != 0b00100000: ... for a in phrase: if a != ' ': ... # Si tu veux traiter tous les caractères espacés (tabulations...) for a in phrase: if not a.isspace(): ...
Ensuite, si j'ai bien compris ce que tu cherches à écrire, en réalité tu cherches à retourner une liste qui contient la représentation binaire d'une chaîne de caractère arbitraire en ignorant les espaces. Je ne sais pas pourquoi tu fais un traitement particulier sur les espaces (ni pourquoi, dans ce cas, tu ne traites pas les tabulations), mais tout ceci ne me regarde pas :-)
Si ma compréhension est correcte, voici comment retourner la représentation binaire (sous forme d'une chaîne de caractère) d'une chaîne s hormis les caractères espacés (espace, tabulation...) :
def str_to_bin(s: str) -> str: return "".join( f"{ord(a):8b}" for a in s if not a.isspace() )
Exemple :
print(str_to_bin("Codage ASCII")) # '0100001101101111011001000110000101100111011001010100000101010011010000110100100101001001'
Bonne chance
Bonjour, ta fonction n'est pas bien claire, je ne comprends pas ce qu'elle doit faire, de plus rien ne garanti que le binaire 00100000 soit dans ta liste, donc forcément, il y aura une erreur, donc une simple exception fera l'affaire.
def ASCII_phrase(phrase): tab = ["{:08b}".format(ord(i)) for i in phrase] try: tab.remove('00100000') except ValueError: pass return ' '.join(tab)
22 oct. 2022 à 07:32
merci beaucoup pour votre aide !
22 oct. 2022 à 07:32
Merci grandement pour votre investissement, j'ai bien compris grâce à vous et j'ai réussi, merci !
22 oct. 2022 à 10:27
j'aurais une dernière question, serait-il possible d'inserer un espace entre chaque moi ?
Modifié le 25 oct. 2022 à 15:28
Il suffit de corriger la boucle pour itérer de mot en mot, puis sur chaque mot de caractère en caractère. Ensuite à toi de choisir la chaîne qui sépare chaque élément itéré. Dans l'exemple ci-dessous je sépare chaque mot par "|" et chaque caractère par "-". Tu peux si tu le souhaites utiliser comme séparateur la chaîne vide.
Code :
Exemple :