Pangram detection实现代码返回错误结果问题排查
Pangram检测代码问题分析
你的代码一共存在4处逻辑和功能缺陷,正好对应你遇到的两个异常:
- 未处理大小写匹配问题:你预设的目标字母列表是小写a-z,但输入字符串中的大写字母不会被识别到匹配项。第一个测试用例全是大写字母,循环全程不会触发匹配分支,函数走完没有触发任何return,自然返回none。
- 匹配成功后的判断逻辑完全写反:你写的是每匹配到一个存在的字母、删除目标列表对应项后,只要目标列表
list还不为空就直接返回True,相当于只要字符串里有任意一个英文字母就会直接返回True,这就是第二个测试用例错误返回True的直接原因。 - 循环结束后的返回逻辑也写反:循环走完后如果目标列表是空,说明26个字母全部匹配到了,应该返回True,但你的代码写的是返回False。
- 多余的break写法:return之后函数已经直接终止了,后面的break永远不会执行,属于无效代码。另外不建议用
list作为变量名,这是Python的内置关键字,会覆盖原有的list类型功能。
修正后的参考代码
import string def is_pangram(s): # 统一转小写,忽略大小写差异 char_set = set(s.lower()) target = set(string.ascii_lowercase) # 判断所有小写字母是不是都存在于输入的字符集合中 return target.issubset(char_set)
如果要按你原来的遍历写法修改也可以:
def is_pangram(s): singlechar = set(s.lower()) target_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] for item in singlechar: if item in target_list: target_list.remove(item) # 所有字母都匹配到了才提前返回True if not target_list: return True # 循环走完看是不是所有字母都匹配完了 return not target_list
内容的提问来源于stack exchange,提问作者kdendon
相关产品推荐
相关产品推荐

