问:pangram 是一个包含所有英文字母至少一次的句子,例如:The quick brown fox jumps over the lazy dog。你的任务是编写一个函数来检查一个句子是否是 pangram。
我有的是:
def isPangram(s):
alphabetList = 'abcdefghijklmnopqrstuvwxyz'
alphabetCount = 0
if len(s) < 26:
return False
else:
s = re.sub('[^a-zA-Z]','',s).lower()
for i in range(len(alphabetList)):
if alphabetList[i] in s:
alphabetCount = alphabetCount + 1
if alphabetCount == 26:
return True
else:
return False
但是,当我尝试示例 s=["The quick brown fox jumps over the lazy dog"] 时,结果为 False,这是错误的。它应该是 True b/c 它包含了所有 26 个字母。谁能帮我修复代码?非常感谢!!!
请您参考如下方法:
问题是您传递的是字符串列表而不是列表。只需传入 "The quick brown fox jumps over the lazy dog"没有方括号,您的代码将正常工作。
您的代码也不必要地复杂(并且错误缩进以启动):
if alphabetCount == 26:
return True
else:
return False
太复杂了 - alphabetCount == 26已经是True or False了!所以你可以简单地写
return alphabetCount == 26
此外,您还可以使用索引变量遍历输入字符串。这是完全没有必要的,只需遍历输入字符串,如下所示:
for c in alphabetList:
if c in s:
alphabetCount += + 1
最重要的是 - 这导致了现在的错误,否则代码会失败 - 检查 len(s) < 26完全是多余的,只需将其删除即可。
字母表也已经内置到 Python 中,它叫做 string.ascii_lowercase .所以你不需要自己写!
话虽如此,您的算法仍然非常慢 - 您迭代了 s 26 次!为什么不简单地写
import string
def isPangram(s):
return set(s.lower()) >= set(string.ascii_lowercase)
