Maison > développement back-end > Tutoriel Python > Pourquoi ma boucle saute-t-elle les voyelles lorsqu'elle les supprime d'une chaîne ?

Pourquoi ma boucle saute-t-elle les voyelles lorsqu'elle les supprime d'une chaîne ?

DDD
Libérer: 2024-12-12 14:39:10
original
879 Les gens l'ont consulté

Why Does My Loop Skip Vowels When Removing Them From a String?

La boucle ignore certaines suppressions dans la fonction anti-voyelle

Dans ce code, nous visons à créer une fonction anti_voyelle qui éliminera toutes les voyelles de une chaîne donnée. Cependant, lorsqu'il est testé avec l'exemple de texte « Hey look Words ! », il renvoie le résultat indésirable « Hy lk Words ! ». Le problème réside dans l'omission du deuxième « o » lors du processus de suppression.

Le nœud du problème est que nous modifions la liste en la parcourant, ce qui perturbe le comportement attendu. Pour résoudre ce problème, nous créons une copie superficielle de la liste et parcourons-la à la place.

Pour une compréhension plus claire, examinons le comportement de la boucle lors de l'impression des caractères et de la liste de textes au début de la boucle :

H ['H', 'e', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']
e ['H', 'e', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']
  ['H', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] # !
l ['H', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']
o ['H', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']
k ['H', 'y', ' ', 'l', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] # Problem!!
  ['H', 'y', ' ', 'l', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']
W ['H', 'y', ' ', 'l', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']
o ['H', 'y', ' ', 'l', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] 
d ['H', 'y', ' ', 'l', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']
s ['H', 'y', ' ', 'l', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']
! ['H', 'y', ' ', 'l', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']
Hy lk Words!
Copier après la connexion

Comme nous pouvons le voir, après avoir supprimé le premier 'o', nous sautons le second car l'index de la liste a avancé, provoquant l'omission du prévu suppression.

Pour résoudre ce problème, nous faisons une copie de la liste en utilisant textlist[:]. Ce faisant, nous garantissons que la boucle parcourt une liste statique, évitant ainsi tout saut indésirable.

De plus, nous pouvons utiliser les compréhensions de liste de Python pour une solution plus concise :

def remove_vowels(text): # An improved function name
    return ''.join(ch for ch in text if ch.lower() not in 'aeiou')
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal