Простенький вариант решения Вашей задачи
Нужно учитывать то, что этот вариант не будет работать, если после искомых слов появятся знаки пунктуации или слова будут иметь другую форму. К примеру двух слов
msg1 = 'Текст которы содержит два слова'
msg2 = 'Текст который не содержит этих слов'
key_words = {'два', 'слова'}
def key_words_provided(msg: str):
if not isinstance(msg, str):
# Если переменная msg не является строкой, возвращаем False
return False
# Создаем множество слов содержавшихся в переменной и переводим их в нижний регистр
words = {word.lower() for word in msg.split()}
# issubset вычисляет, является ли одно множество подмножеством другого
# Возвращаем это как искомый результат
return key_words.issubset(words)
# Если Вам нужно определить нахождение любого из этих двух слов в сообщении
# Вместо key_words.issubset(words), используем bool(key_words.intersection(words))
print(key_words_provided(msg1))
# True
print(key_words_provided(msg2))
# False
Поясню, в чем Ваша ошибка
Ваше выражение == "два" and "слова"
,
в случае если текст сообщения будет "два"
, вернет в качестве результата "слова"
msg3 = 'два'
print(
msg3 == 'два' and 'слова'
)
# слова
А если текст будет другим то вернет False
msg4 = 'два слова'
print(
msg4 == 'два' and 'слова'
)
# False
В данном случае, так как переменная не равна 'два'
, дальнейшая проверка не производится и возвращается False
.
Но поскольку любая не пустая строка в булевом (логическом) выражении будет True
,
то, при проверке через if
, в варианте с msg3
Вы получите True
, а в варианте с msg4
Вы получите False
print(
bool(msg3 == 'два' and 'слова')
)
# True