为何我的Python无重复字母词(isogram)判断函数返回None?
无重复字母词判断函数返回值差异解析
问题场景
需要编写函数判断单词是否为无重复字母词(isogram,即不含重复字符的单词),空字符串需返回True。自己的代码运行后返回None,他人实现返回True,需明确两者返回值不同的原因。
我的代码
from string import ascii_lowercase def is_isogram(iso): for x in iso: return False if (iso.count(x) > 1) and (x in ascii_lowercase) else True # 空字符串调用时返回None
他人的代码
def is_isogram(word): word = str(word).lower() alphabet_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 i in word: if word.count(i) > 1 and i in alphabet_list: return False return True # 空字符串调用时返回True
差异原因分析
1. 你的代码核心问题
- 循环逻辑错误:遍历第一个字符
x时,直接通过三元表达式返回结果,循环仅执行一次就结束,完全没检查后续字符。比如单词"hello",第一个字符是'h',count('h')为1,直接返回True,漏掉了后面重复的'l'。 - 空字符串处理缺失:当输入是空字符串时,
for x in iso循环根本不会执行,函数没有任何return语句,Python默认返回None。
2. 他人代码的正确逻辑
- 循环检查所有字符:遍历每个字符,只要发现某个字符重复且属于字母,立即返回
False;如果循环跑完所有字符都没发现重复,才执行最后的return True。 - 空字符串处理正确:空字符串时循环不执行,直接走到最后的
return True,符合题目要求。
额外说明:他人代码先把输入转小写,处理了大小写不敏感的情况(比如"Alpha"会被转成"alpha",判断重复更准确),而你的代码没处理大小写,这是功能上的差异,但不是返回None的直接原因。
内容的提问来源于stack exchange,提问作者Prophesierc
相关产品推荐
相关产品推荐

