需要Python方面的帮助吗

需要Python方面的帮助吗,python,pangram,Python,Pangram,问:pangram是一个至少包含一次英语字母表中所有字母的句子,例如:敏捷的棕色狐狸跳过懒惰的狗。这里的任务是编写一个函数来检查一个句子,看它是否是pangram 我得到的是: def isPangram(s): alphabetList = 'abcdefghijklmnopqrstuvwxyz' alphabetCount = 0 if len(s) < 26: return False else: s = re.sub(

问:pangram是一个至少包含一次英语字母表中所有字母的句子,例如:敏捷的棕色狐狸跳过懒惰的狗。这里的任务是编写一个函数来检查一个句子,看它是否是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
def isPangram(s):
字母表='abcdefghijklmnopqrstuvxyz'
alphabetCount=0
如果长度小于26:
返回错误
其他:
s=re.sub(“[^a-zA-Z]”,“”,s).lower()
对于范围内的i(len(字母列表)):
如果字母列表[i]在s中:
alphabetCount=alphabetCount+1
如果alphabetCount==26:
返回真值
其他:
返回错误

然而,当我尝试示例s=[“敏捷的棕色狐狸跳过懒惰的狗”]时,结果是错误的,这是错误的。应该是真的b/c它包含了全部26个字母。有人能帮我修改代码吗?非常感谢

将句子中的字母缩减为一个集合,然后验证该集合是否是所有字母的集合更简单

def isPangram(s):
    alphabet = set('abcdefghijklmnopqrstuvwxyz')
    s = re.sub('[^a-zA-Z]', '', s)
    sentence = set(s.lower())
    return sentence == alphabet

assert isPangram("The quick brown fox jumped over the lazy dog")

将句子中的字母缩减为一个集合,然后验证该集合是否是所有字母的集合更简单

def isPangram(s):
    alphabet = set('abcdefghijklmnopqrstuvwxyz')
    s = re.sub('[^a-zA-Z]', '', s)
    sentence = set(s.lower())
    return sentence == alphabet

assert isPangram("The quick brown fox jumped over the lazy dog")

问题是您传入的是字符串列表,而不是列表。只需输入
“敏捷的棕色狐狸跳过懒惰的狗”
,而不使用括号,您的代码就可以工作了

您的代码也不必要地复杂(并且在引导时缩进错误):

太复杂了-
alphabetCount==26
是真是假!所以你可以简单地写

return alphabetCount == 26
此外,还可以使用索引变量对输入字符串进行迭代。这完全没有必要,只需迭代输入字符串,如下所示:

for c in alphabetList:
    if c in s:
        alphabetCount += + 1
最重要的是,这导致了错误,因为如果不是这样,代码可能会失败。对
len<26
的检查是完全多余的,只需将其删除即可

字母表也已经内置到Python中,称为。所以你不需要自己写

也就是说,你的算法仍然很慢——你迭代了26次!为什么不干脆写呢


问题是您传入的是字符串列表,而不是列表。只需输入
“敏捷的棕色狐狸跳过懒惰的狗”
,而不使用括号,您的代码就可以工作了

您的代码也不必要地复杂(并且在引导时缩进错误):

太复杂了-
alphabetCount==26
是真是假!所以你可以简单地写

return alphabetCount == 26
此外,还可以使用索引变量对输入字符串进行迭代。这完全没有必要,只需迭代输入字符串,如下所示:

for c in alphabetList:
    if c in s:
        alphabetCount += + 1
最重要的是,这导致了错误,因为如果不是这样,代码可能会失败。对
len<26
的检查是完全多余的,只需将其删除即可

字母表也已经内置到Python中,称为。所以你不需要自己写

也就是说,你的算法仍然很慢——你迭代了26次!为什么不干脆写呢

我会使用集合:

def isPangram(s):
    alphabetset = set('abcdefghijklmnopqrstuvwxyz')
    set_string = set(s.lower())
    return set_string.issuperset(alphabetset)
用法:

>>> isPangram('aabc')
False
>>> isPangram('aabcdefghijklmnopqrstuvwxyz')
True
>>> isPangram('aabcdefghijklmnopqrstuvwxyz J:L FSDJ f09823740235')
True
我会使用以下设置:

def isPangram(s):
    alphabetset = set('abcdefghijklmnopqrstuvwxyz')
    set_string = set(s.lower())
    return set_string.issuperset(alphabetset)
用法:

>>> isPangram('aabc')
False
>>> isPangram('aabcdefghijklmnopqrstuvwxyz')
True
>>> isPangram('aabcdefghijklmnopqrstuvwxyz J:L FSDJ f09823740235')
True
如果s是array()s=[“敏捷的棕色狐狸跳过了懒狗”]您只能得到len()=1,那么If len(s)<26:总是返回False

def isPangram(s):

    alphabetList = 'abcdefghijklmnopqrstuvwxyz'
    alphabetCount = 0
    if len(s) < 26:
        print "False 1"
    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:
            print "True"
        else:
            print "False"
a=isPangram("The quick brown fox jumps over the lazy dog")
def isPangram(s):
字母表='abcdefghijklmnopqrstuvxyz'
alphabetCount=0
如果长度小于26:
打印“假1”
其他:
s=re.sub(“[^a-zA-Z]”,“”,s).lower()
对于范围内的i(len(字母列表)):
如果字母列表[i]在s中:
alphabetCount=alphabetCount+1
如果alphabetCount==26:
打印“真”
其他:
打印“假”
a=isPangram(“敏捷的棕色狐狸跳过懒惰的狗”)
如果s是数组()s=[“敏捷的棕色狐狸跳过了懒狗”]你只能得到len()=1,那么If len(s)<26:总是返回False

def isPangram(s):

    alphabetList = 'abcdefghijklmnopqrstuvwxyz'
    alphabetCount = 0
    if len(s) < 26:
        print "False 1"
    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:
            print "True"
        else:
            print "False"
a=isPangram("The quick brown fox jumps over the lazy dog")
def isPangram(s):
字母表='abcdefghijklmnopqrstuvxyz'
alphabetCount=0
如果长度小于26:
打印“假1”
其他:
s=re.sub(“[^a-zA-Z]”,“”,s).lower()
对于范围内的i(len(字母列表)):
如果字母列表[i]在s中:
alphabetCount=alphabetCount+1
如果alphabetCount==26:
打印“真”
其他:
打印“假”
a=isPangram(“敏捷的棕色狐狸跳过懒惰的狗”)

请删除行后的else语句:

if alphabetCount == 26:
    return True
因为它将代码放入i=0本身的else条件中,因为它只需要一个字母计数

import re
def isPangram(s):
    alphabetList = 'abcdefghijklmnopqrstuvwxyz'
    alphabetCount = 0
    if len(s) < 26:
        print('lenth is short')
        return False
    else:
        s = re.sub('[^a-zA-Z]','',s).lower()
        print(s)
        for i in range(len(alphabetList)):
            if alphabetList[i] in s:
                print(alphabetList[i])
                print("The string is pangram2")
                alphabetCount = alphabetCount + 1
                print(alphabetCount)
                if alphabetCount >= 26:
                    print("The string is pangram")
                    return True
重新导入
def isPangram(s):
字母表='abcdefghijklmnopqrstuvxyz'
alphabetCount=0
如果长度小于26:
打印('长度较短')
返回错误
其他:
s=re.sub(“[^a-zA-Z]”,“”,s).lower()
印刷品
对于范围内的i(len(字母列表)):
如果字母列表[i]在s中:
打印(字母列表[i])
打印(“字符串为pangram2”)
alphabetCount=alphabetCount+1
打印(字母计数)
如果字母计数>=26:
打印(“字符串是pangram”)
返回真值

现在代码运行正常

请删除行后的else语句:

if alphabetCount == 26:
    return True
因为它将代码放入i=0本身的else条件中,因为它只需要一个字母计数

import re
def isPangram(s):
    alphabetList = 'abcdefghijklmnopqrstuvwxyz'
    alphabetCount = 0
    if len(s) < 26:
        print('lenth is short')
        return False
    else:
        s = re.sub('[^a-zA-Z]','',s).lower()
        print(s)
        for i in range(len(alphabetList)):
            if alphabetList[i] in s:
                print(alphabetList[i])
                print("The string is pangram2")
                alphabetCount = alphabetCount + 1
                print(alphabetCount)
                if alphabetCount >= 26:
                    print("The string is pangram")
                    return True
重新导入
def isPangram(s):
字母表='abcdefghijklmnopqrstuvxyz'
alphabetCount=0
如果长度小于26:
打印('长度较短')
返回错误
其他:
s=re.sub(“[^a-zA-Z]”,“”,s).lower()
印刷品
对于范围内的i(len(字母列表)):
如果字母列表[i]在s中:
打印(字母列表[i])
打印(“字符串为pangram2”)
alphabetCount=alphabetCount+1
打印(字母计数)
如果字母计数>=26: