Является ли строка панграммой?
Требуется проверить, является ли строка панграммой, т.е если в строке все буквы алфавита.
И я ее решил таким образом:
def is_pangram(s):
return set('abcdefghijklmnopqrstuvwxyz') == set(s.lower().replace(' ', ''))
text = input()
print(is_pangram(text))
Но нашел схожее решение:
def is_pangram(s):
return not set('abcdefghijklmnopqrstuvwxyz') - set(s.lower())
text = input()
print(is_pangram(text))
Не могу понять 2х вещей:
- почему вычитая одно множество из другого куда-то девается знак пробела
- почему добавляя логический оператор not функция возвращает булево значение
Ответы (1 шт):
почему вычитая одно множество из другого куда-то девается знак пробела?
Когда мы вычитаем множество B из A в результирующем множестве остаются только те элементы из множества A, которые не встречаются в множестве B.
В множества A символ пробела отсутствует, поэтому он не может быть в результате.
почему добавляя логический оператор not функция возвращает булево значение?
In [163]: not set()
Out[163]: True
интерпретируется как:
In [165]: not bool(set())
Out[165]: False
именно это и происходит при проверке результата
PS здесь можно подробнее прочитать о том как работает not <expression> в Python и как это реализовано в исходном коде Python