Python实现mask_out函数测试3无输出及elif语法错误求助
问题排查与修复
核心错误说明
- 函数内第一个
return store的位置错误:它放在了两个长度判断分支的中间,不管第一个len(banned)==len(substitutes)的判断是否成立,代码执行到这行都会直接退出函数,后续处理banned长度大于substitutes的代码完全不会执行,这是测试3无结果的核心原因。 - 你尝试把第二个
if改成elif报语法错误,是因为第一个if块结束后直接跟了return store语句,不属于任何if分支,导致elif找不到匹配的前置if,所以语法校验不通过。 - 变量名拼写错误:第二个分支中将
substitutes写成了substitute,运行会报未定义变量错误。 - 下标判断逻辑错误:
i<=len(substitute)会导致索引越界,Python字符串下标从0开始,合法下标范围是0 ~ len(变量)-1,应该用i < len(substitutes)。 - 分支判断冗余:不需要分开处理长度相等和不等的场景,一套逻辑即可覆盖所有规则要求。
修复后代码
def mask_out(sentence, banned, substitutes): store = "" sub_len = len(substitutes) # 提前构建替换映射字典,避免每次遍历重复查找下标 replace_map = {} for idx, ban_char in enumerate(banned): if idx < sub_len: replace_map[ban_char] = substitutes[idx] else: replace_map[ban_char] = substitutes[0] # 遍历原字符串完成替换 for ch in sentence: store += replace_map.get(ch, ch) return store
验证说明
上述代码可以同时满足三个测试用例的要求:
- 测试1:
e在banned下标0,匹配substitutes[0] = '#',输出结果为abcd# - 测试2:
a对应下标0替换为#,b对应下标1替换为$,输出结果为#$solute - 测试3:
p对应下标0替换为1,y对应下标1替换为2,t对应下标2超出substitutes长度(2),替换为substitutes[0] = '1',输出结果为121hon
内容的提问来源于stack exchange,提问作者tmiwetmiwtwete
相关产品推荐
相关产品推荐

