寻找简单问题的简单解决方案

时间:2020-10-30 01:59:14

标签: python function

我是Python的新手,目前正在在线学习课程。这是作业给我的问题之一。看起来我已经正确解决了问题,但是看一下我的代码,它看起来非常复杂。我想知道还有什么其他方法可以解决此问题,以便我可以更好地学习。谢谢。

问题是:

编写一个Python函数来检查字符串是否为pangram。 (假设传入的字符串没有任何标点符号)

注意:连字是指至少每个字母包含一个字母的单词或句子。 例如:“敏捷的棕色狐狸跳过了懒狗”

ispangram(“快速的棕色狐狸跳过了懒狗”)

答案:

import string

space = ""

def ispangram(str1, alphabet=string.ascii_lowercase):
    str1 = sorted(str1.replace(" ", "").lower())
    if set(space.join(str1)) == set(string.ascii_lowercase):
        return True
    else:
        return False

2 个答案:

答案 0 :(得分:1)

将其转换为函数,它使用生成器表达式并使用ASCII代码:

s = "A quick brown fox jumps over the lazy dog"
print(all(chr(x).lower() in s for x in range(65,91)))

布尔值将指示是否所有字符都存在。一个功能:

def ispangram(s):
  return all(chr(x).lower() in s for x in range(65,91))

它将首先在65到91的范围内进行迭代,然后将其从ASCII代码转换为字符,并检查其是否为s,然后将所有26个条件与all()组合在一起,例如AND。并返回结果。

答案 1 :(得分:0)

假设使用英文字符集,可以执行以下步骤:

  • 小写该字符串,因为此处的大小写无关。
  • 仅列出其中的字母字符;
  • 在其中设置一个以删除重复项;
  • 确保该集合包含所有可能的字母。

在代码方面,该代码的简洁版本(上面的文本已合并,以便将来的开发人员可以清楚地了解其工作方式):

# Returns true if and only if the given sentence
# contains all English letters at least once:
#   1. Lowercase sentence.
#   2. Make list from letters in sentence.
#   3. Make set from list to remove duplicates.
#   4. Ensure set has exactly 26 letters.

def isPangram(sentence):
    return len(set([letter for letter in sentence.lower() if letter.isalpha()])) == 26