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)
                                 })
  • Вопрос задан
  • 131 просмотр
Решения вопроса 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)
                                 })
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@bacon
Никак.
ЗЫ только требовать от пользователя более-менее строгий формат ввода.
Ответ написан
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() метод
';' символ между строками.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
от 150 000 до 200 000 ₽
OnederX Москва
от 100 000 до 120 000 ₽
Кенарий Санкт-Петербург
от 120 000 до 250 000 ₽
30 сент. 2020, в 10:13
1000 руб./за проект
30 сент. 2020, в 10:11
30000 руб./за проект
30 сент. 2020, в 09:57
5000 руб./за проект