WolfInChains
@WolfInChains

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

Есть такой вот код. Допустим пользователь отправил нам "выбери 1 или 2". Все работает, бот выбирает один вариант, но как только пользователь увеличивает число слов в варианте, то бот не работает корректно (выбирает слово "или" либо только часть варианта). Как правильно разделить строку? Если сделать разделителем слово "или", то как исключить из первого варианта слово "выбери", чтобы бот не отправлял нам "я выбираю выбери 1"

Если невозможно, то как заменить?
text = event.obj['text'].split(' ')
                   if text[0] == "Выбери" or text[0] == "выбери":
                       list = [text[1], text[3]]
                       change = random.choice(list)
                       vk.method("messages.send",
                                 {
                                     "chat_id": event.object.peer_id - 2000000000,
                                     "message": "Я выбираю " + f'{change}',
                                     "random_id": random.randint(1, 2147483647)
                                 })
  • Вопрос задан
  • 196 просмотров
Решения вопроса 1
WolfInChains
@WolfInChains Автор вопроса
Немного подумал и разделил. Если кому надо
text_1 = event.obj['text'].split(' ', maxsplit=1)
                   if text_1[0] == "Выбери" or text_1[0] == "выбери":
                       text_2 = text_1[1].split('или')
                       list = [text_2[0], text_2[1]]
                       change = random.choice(list)
                       vk.method("messages.send",
                                 {
                                     "chat_id": event.object.peer_id - 2000000000,
                                     "message": "Я выбираю " + f'{change}',
                                     "random_id": random.randint(1, 2147483647)
                                 })
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
Использовать регулярки как вариант:

import re
import random

if "выбери" in event.obj['text'].lower():
    variants_list = re.findall('\d+', event.obj['text'])
    if 'или' in event.obj['text'].lower():
         change = random.choice(variants_list)
         
...
Ответ написан
aRegius
@aRegius
Python Enthusiast
>>> stop_words = ['выбери', 'или']
>>> input_text_list = input_text.split()
>>> target_words_list = [word for word in input_text_list if word.lower() not in stop_words]

P.S.
list =

Не следует использовать Python built-in наименования ( см. dir(__builtins__) ) в качестве имен своих переменных.

if text[0] == "Выбери" or text[0] == "выбери":

При сравнениях в контексте верхних/нижних регистров просто приводите соответствующие объекты к единому регистру, например:
if text[0].lower() == "выбери":
Ответ написан
Комментировать
@nzarchii60
Вы можете разделить строку исполуя метод работы.
СО строками В частности метод split Преднозначен для работы со списками.
имея спиок
xx = ['1;2;3;4']
text.split(';')
text = список.
split() метод
';' символ между строками.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы