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