Python实现移除字符串元音字母函数传参后运行不生效问题求助
代码存在的3个核心问题
- 条件判断逻辑完全错误:你写的
if(n is 'a' or 'e' or 'u' or 'o' or 'i')不会判断n是否是这些元音中的一个。Python中or连接的每个表达式独立判断,非空字符串布尔值为真,因此这个判断永远为真;且Python中判断字符串值相等要使用==,is用于判断两个对象是否为内存中的同一个实例,不能用来做值匹配,这一点和C#中字符串的==默认执行值比较的逻辑不同,是Python语法的典型差异点。 - replace参数错误:你写的
string_.replace('n' , '')里的'n'是写死的字符串常量,不是你遍历获取的变量n,这段代码实际执行的是删除字符串中所有的字母n,而非你匹配到的元音,这也是你运行disemvowel('Hello')得到原字符串的直接原因。 - 遍历对象被修改导致逻辑异常:你在遍历原始
string_的过程中不断修改string_的值,会导致后续遍历的字符索引错乱,出现漏判的情况。
修正后的参考实现
写法1:列表推导式(性能最优,推荐)
def disemvowel(string_): # 同时匹配大小写元音,如需仅匹配小写可删除大写元素 vowels = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'} return ''.join([char for char in string_ if char not in vowels]) print(disemvowel('Hello')) # 输出:Hll
写法2:沿用替换逻辑(更贴近你原本的思路)
def disemvowel(string_): # 遍历所有元音字符逐个替换,不需要遍历原字符串 for vowel in ['a','e','i','o','u','A','E','I','O','U']: string_ = string_.replace(vowel, '') return string_
内容的提问来源于stack exchange,提问作者user14967012
相关产品推荐
相关产品推荐

