Skip to main content
 首页 » 编程设计

python之需要有关 Python 的帮助

2025年05月04日15yyy_WW

问: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)