Сообщение.content.split() Discord.PY

У меня есть несколько команд, которые могут иметь более одного значения, для которого мне нужно разделить сообщение. Тогда проблема в том, что я хочу дать пользователю возможность использовать только 1 значение или до 4. Когда я использую message.content.split(" ", 4), я получаю ошибку индекса, потому что он ожидает 4 значения. Есть ли более простой способ сделать это?

  if message.content.lower().startswith('!rip'):
        x = message.content.split(" ", 4)
        riptext = x[1]
        riptext2 = x[2]
        riptext3 = x[3]
        riptext4 = x[4]
        rip = discord.Embed(color=random.randint(0x000000, 0xFFFFFF))
        rip.set_image(
            url=f"http://www.tombstonebuilder.com/generate.php?top1 = {quote(riptext)}&top2 = {quote(riptext2)}&top3 = {quote(riptext3)}&top4 = {quote(riptext4)}&sp = ")
        await client.send_message(message.channel, embed=rip)

индексы начинаются с 0!

penta 09.04.2019 07:32

у вас все еще есть проблема после исправления вашего индекса? Кроме того, почему вы используете 4 разные переменные? почему бы просто не использовать x[0],x[1] напрямую?

penta 09.04.2019 07:35

@penta я должен сохранить индекс 1-4, иначе он использует «!rip» в качестве первого значения. Но я все еще получаю ошибку индекса, если использую менее 4 значений.

user10241025 09.04.2019 07:38

Используйте http://pythontutor.com/visualize.html#mode=display для визуализации и отладки вашего кода, я думаю, вы можете использовать нарезку, чтобы игнорировать первый !rip

penta 09.04.2019 07:41
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
4 258
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете нарезать вывод split(), чтобы игнорировать первый элемент ('!rip'), используя:

message.content.split(" ",4)[1:]

Затем вы можете заполнить его пустыми строками, если длина меньше 4.

Обратите внимание, что нет необходимости в отдельных переменных riptext1, riptext2 и т. д. Вы можете просто превратить riptext в список и получить доступ, например. первый элемент с riptext[0]:

if message.content.lower().startswith('!rip'):
    # store arguments in x, excluding the first element (!rip)
    x = message.content.split(" ",4)[1:]
    # pad x with empty strings in case there are less than 4 arguments, and store the result in riptext
    riptext = x[:4] + ['']*(4 - len(x))
    print(riptext)

    rip = discord.Embed(color=random.randint(0x000000, 0xFFFFFF))
    rip.set_image(
            url=f"http://www.tombstonebuilder.com/generate.php?top1 = {quote(riptext[0])}&top2 = {quote(riptext[1])}&top3 = {quote(riptext[2])}&top4 = {quote(riptext[3])}&sp = ")
    await client.send_message(message.channel, embed=rip)

Например, если message.content = '!rip 1 2',

  • x будет ['1', '2']
  • riptext будет ['1', '2', '', '']

Имеет большой смысл. Я знал, что должен где-то добавить len() для подсчета количества элементов, но не знал, как к этому подойти. Это отлично работает

user10241025 10.04.2019 17:24

Другие вопросы по теме