CodeWars题目Vowel One代码问题:非元音字符未被替换
问题分析与修复方案
你的代码问题出在哪?
1. 嵌套if完全无效
你把非元音替换的if嵌套在item == key的条件里了——只有当当前字符是元音(等于某个字典key)的时候,才会进入这个分支。但此时item != key肯定不成立,所以非元音替换的代码根本不会执行,那些不是元音的字符自然保持原样,比如输入里的v、w、l、n就没变成0。
2. 取消嵌套后全0的原因
如果把那个if拉出来和第一个if同级,逻辑就变成:对每个字符,遍历所有元音key。比如某个字符是元音a,第一次匹配到key=a时会被设为1,但接下来遍历e、i、o、u的时候,item != key成立,就会把刚设好的1又改成0。不管是元音还是非元音,最后都会被遍历到的不匹配key触发替换成0,结果自然全是0。
正确的写法示例
方法一:利用字典get方法(简洁版)
直接遍历每个字符,用字典的get方法快速匹配,存在元音就取'1',不存在就取'0':
def vowel_one(s): vowels = {'a':'1', 'e':'1', 'i':'1', 'o':'1', 'u':'1'} return ''.join([vowels.get(c.lower(), '0') for c in s])
方法二:逐个判断(清晰版)
遍历每个字符,明确判断是否属于元音集合,对应替换:
def vowel_one(s): vowels = {'a', 'e', 'i', 'o', 'u'} result = [] for c in s.lower(): result.append('1' if c in vowels else '0') return ''.join(result)
内容的提问来源于stack exchange,提问作者earthian
相关产品推荐
相关产品推荐

