Как проверить, содержит ли строка ВСЕ буквы алфавита в python?

Я пытаюсь написать программу на Python, которая проверяет, является ли данная строка панграммой - содержит ли все буквы алфавита.

Следовательно, "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

7 ответов

Решение

Это не то, что я бы решил с помощью регулярного выражения, нет. Создайте набор строк в нижнем регистре и проверьте, является ли он надмножеством букв алфавита:

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

Это мое решение на 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")

Вам не нужно регулярное выражение. То, что вы хотите, может быть сделано в две строки с хорошей эффективностью пространства.

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 будет либо True или же False в зависимости от того, все ли символы в string или нет.

import string

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

Сначала изменил все алфавиты на строчные, а затем удалил все пробелы с помощью replace. Затем преобразовано в набор, чтобы иметь уникальные символы, а затем использовать функцию сортировки для сортировки по алфавиту. Поскольку функция sorted выдает список, поэтому присоединитесь к func, чтобы присоединиться к нему без пробелов, а затем сравните его со всеми символами в нижнем регистре.

Вот мое решение:

      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)

Сегодня я делал то же упражнение, может быть, это не лучший подход, но я думаю, что это легко понять.

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 :(")

Панграмма - это функция, которая содержит как минимум каждую букву алфавита. Я пытался таким образом:

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'}... как вы видите, это набор без повторяющихся букв.

Другие вопросы по тегам