Pangram detection



初学者——给定一个字符串,我的代码必须检测它是否是一个程序。如果是则返回True,否则返回False。它应该忽略数字和标点符号。

给予ABCD45EFGH,IJK,LMNOPQR56STUVW3XYZ"它不返回任何值,当给定"这不是一个程序!不是程序。"当答案应为False时,它返回True。

这不是一个程序!不是一个程序。我没看到什么?

import string
def is_pangram(s):
singlechar = set(s)
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 index, item in enumerate(singlechar):
if item in list:
list.remove(item)
if list:
return True
break 
if not list:
return False

集合是一种很好的方法,可以检查某项内容是否属于两个相交的集合,或者不属于两个不同的集合。

在你的例子中,如果你的短语中的字母集合和字母a-z之间的交集长度为26,则它是一个pangram。

from string import ascii_lowercase
def is_pangram(s):
return len(set(s.lower()).intersection(ascii_lowercase)) == 26

您可以继续使用集合和它们的方法.difference来找出所有字符的集合中是否有更多的字符或没有差异(在此之前,您需要从标点符号(和空白)中剥离字符串并使其小写(由.lower.translate.maketrans字符串方法完成)):

import string

def is_pangram(s):
input_set = set(s.lower().translate(
str.maketrans('', '', f'{string.punctuation} ')))
check_set = set(string.ascii_lowercase)
return not check_set.difference(input_set)

value1 = 'The quick brown fox jumps over a lazy dog!'
print(is_pangram(value1))
# True
value2 = 'This isn't a pangram! is not a pangram'
print(is_pangram(value2))
# False

如果你还想使用列表:

def is_pangram(s):
input_set = set(s.lower().translate(
str.maketrans('', '', f'{string.punctuation} ')))
lst = list(string.ascii_lowercase)
for item in input_set:
if item in lst:
lst.remove(item)
if not lst:
return True
return False

最新更新