Как проверить слово в python?

Использую pyTelegramBotAPI. Если первое слово !add, то выполнять определённое действие, Т.е

     elif message.text[0,1,2,3,4] == '!add':
        add_message(message.from_user.id, message.from_user.id)
        bot.send_message(message.from_user.id, 'Ваш запрос добавлен в базу данных!\nВ скорем времени 
        мы вам ответим!')

Но по индексу проверить не получается


Ответы (1 шт):

Автор решения: insolor

Будем считать, что message.text - строка.

1 вариант: вырезать 4 первых символа и сравнить с нужными

elif message.text[:4] == '!add':

Выкинет исключение, если строка короче 4 символов. Также условие будет срабатывать на более длинные команды, начинающиеся на !add - какой-нибудь !addmeplease, например. Можно в этом случае проверять не 4 символа, а 5 символов с пробелом:

elif message.text[:5] == '!add ':

Но это не отменяет необходимость проверки длины строки.

Еще один минус этого способа - можно забыть исправить размер слайса, в итоге условие всегда будет ложным, например:

elif message.text[:4] == '!add ':

- тут будут сравниваться строки разной длины - 4 и 5 элементов, это всегда False.


2 вариант: проверять начало сообщения с помощью метода startswith

elif message.text.startswith('!add '):

Этот метод сам уже учитывает длину исходной строки (если строка слишком короткая - метод просто вернет False)


3 вариант: разбить строку по пробелам, взять первый элемент. В данном случае удобно использовать метод partition:

elif message.text.partition(' ')[0] = '!add':

Отличие от метода split:

  • split разбивает строку по разделителю, возвращает список частей. В случае пустой строки - это будет пустой список, соответственно получение первой части вызовет исключение
  • partition разделяет строку по первому разделителю. Для любой строки возвращает три элемента: первая часть, разделитель, остальная часть. Если разделитель не найден - то вся исходная строка и две пустых строки. Если исходная строка пустая, то будет три пустых строки. Поэтому можно спокойно проверять первую часть на равенство нужному параметру.
→ Ссылка