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!
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')
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!