У меня есть несколько команд, которые могут иметь более одного значения, для которого мне нужно разделить сообщение. Тогда проблема в том, что я хочу дать пользователю возможность использовать только 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)
у вас все еще есть проблема после исправления вашего индекса? Кроме того, почему вы используете 4 разные переменные? почему бы просто не использовать x[0],x[1] напрямую?
@penta я должен сохранить индекс 1-4, иначе он использует «!rip» в качестве первого значения. Но я все еще получаю ошибку индекса, если использую менее 4 значений.
Используйте http://pythontutor.com/visualize.html#mode=display
для визуализации и отладки вашего кода, я думаю, вы можете использовать нарезку, чтобы игнорировать первый !rip
Вы можете нарезать вывод 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() для подсчета количества элементов, но не знал, как к этому подойти. Это отлично работает
индексы начинаются с 0!