Как получить от пользователя два раздельных слова?

Рейтинг: -2Ответов: 1Опубликовано: 25.08.2023

Нужно чтоб пользователь ввел два слова.

 @dp.message_handler(state=InputWhatever.x2)
    async def get_number(message: types.Message, state: FSMContext):
        if message.text.isalpha():
            if str(message.text) == "два" and "слова": # если так пишу то пропускается одно состояние и приложение работает не корректно
                await InputWhatever.x12.set()

if str(message.text) == "два слова": так не получается из-за пробела.

Ответы

▲ 0

Простенький вариант решения Вашей задачи

Нужно учитывать то, что этот вариант не будет работать, если после искомых слов появятся знаки пунктуации или слова будут иметь другую форму. К примеру двух слов

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