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