2

我正在尝试编写一个 python 程序来检查给定的字符串是否是pangram - 包含字母表中的所有字母。

因此,"We promptly judged antique ivory buckles for the next prize"应该返回True,而任何不包含字母表中每个字母的字符串至少应该返回一次False

我相信我应该为此使用 RegEx,但我不确定如何。它应该类似于:

import sys
import re

input_string_array = sys.stdin.readlines()
input_string = input_string_array[0]

if (re.search('string contains every letter of the alphabet',input_string):
    return True
else:
    return False
4

7 回答 7

12

这不是我用正则表达式解决的问题,不。创建一组小写字符串并检查它是否是字母表的超集:

import string

alphabet = set(string.ascii_lowercase)

def ispangram(input_string):
    return set(input_string.lower()) >= alphabet

只有当字母表中的每个字母都在从输入文本创建的集合中时,它才会是超集;通过使用超集而不是相等,除了(ASCII)字母之外,您还允许使用标点符号、数字和空格。

演示:

>>> import string
>>> alphabet = set(string.ascii_lowercase)
>>> input_string = 'We promptly judged antique ivory buckles for the next prize'
>>> set(input_string.lower()) >= alphabet
True
>>> set(input_string[:15].lower()) >= alphabet
False
于 2016-04-05T12:56:41.943 回答
1

这是我在 python 中的解决方案:

alphabet = "abcdefghijklmnopqrstuvwxyz"
sentence = input()
sentence = sentence.lower()
missing = ''
for letter in alphabet:
  if letter not in sentence:
    missing = missing+letter
if (len(missing) != 0):
  print("missing", missing)
else:
  print("pangram")
于 2021-03-19T17:45:21.733 回答
0

你不需要正则表达式。你想要的可以在两条线中完成,空间效率很高。

ms = itertools.chain(range(ord("a"),ord("z")),range(ord("A"),ord("Z")))
flag = all(chr(o) in string for o in ms)

就是这样。string是您要检查的字符串。flag将是TrueFalse取决于是否所有字符都在string

于 2016-04-05T13:18:25.180 回答
0

pangram 是一个至少包含字母表中每个字母的函数。我试过这样:

def pangram():
n = str(input('give me a word to check if it is a pangram:\n'))
n = n.lower()
n = n.replace(' ','')
if not isinstance(n, str):
    return n, False
elif set(n) >= set('abcdefghijklmnopqrstuvxywz'):
    return n, True
else: 
    return n, False

函数 isinstance(n, str) 检查 n 是否为字符串。函数 set() 给了我们一个集合。例如 set('penny') 返回 {'y', 'e', 'p', 'n'}... 如您所见,它是一个没有重复字母的集合。

于 2017-04-01T14:33:20.230 回答
0

我今天也在做同样的练习,也许这不是最好的方法,但我认为这很容易理解。

def ispangram(s):
  stringy = ''
  flag = True
  validLetters = "abcdefghijklmnopqrstuvwxyz"

  #transform the given string in simple string with no symbols only letters
  for char in s.lower():
    if(char in validLetters):
      stringy += char

  #check if all the letters of the alphabet exist on the string
  for char in validLetters:
    if(char in stringy):
      pass
    else:
      flag = False
      break

  return flag

if(ispangram("We promptly judged antique ivory buckles for the next prize")):
  print("It's PANGRAM!")
else:
  print("It's not Pangram :(")
于 2018-02-22T18:27:43.443 回答
0
import string

def ispangram(str1, alphabet=string.ascii_lowercase):
    return ''.join(sorted(set(str1.lower().replace(" ","")))) == alphabet

首先将所有字母更改为小写,然后使用替换删除所有空格。然后转换为具有唯一字符的集合,然后使用 sorted 函数按字母顺序排序。由于 sorted 函数给出了一个列表,所以 join func 以不带空格加入它,然后将其与所有小写字符进行比较。

于 2020-10-20T11:56:37.573 回答
0

这是我的解决方案:

def isaPangrams(s):
    alph = list(string.ascii_lowercase)
    s = s.lower()
    s = list(s)

    for letter in alph:
        if letter not in s:
            print('not pangram')
            present='false'
            break
        if letter in s:
            present = 'true'

    if present == 'true':
        print('pangram')

if __name__ == '__main__':
    s = input()
    answer = isaPangrams(s)
于 2022-01-07T08:26:18.857 回答