Как я могу преобразовать этот список random.choices python в строку? - PullRequest
0 голосов
/ 20 июня 2020

Я создаю бота Discord, используя Python, я хочу, чтобы бот реагировал случайным сообщением, которое отлично работает с использованием random.choice Однако я хотел кое-что добавить. Я обнаружил, что с помощью random.choices (docs здесь ) вы можете добавлять веса в свой список, чтобы одни выбирались чаще, чем другие. Прямо сейчас у меня есть:

@bot.event
async def on_member_join(channel):
    time.sleep(2)

    channel = bot.get_channel(723954693826674701)
    brankos_greetings = [
        "testMessageCommon1",
        "testMessageCommon2",
        "testMessageCommon3",
        "testMessageCommon4",
        "testMessageCommon5",
        "testMessageCommon6",
        "testMessageCommon7",
        "testMessageCommon8",
        "testMessageCommon9",
        "testMessageCommon10",

        "testMessageSemiRare1",
        "testMessageSemiRare2",
        "testMessageSemiRare3",
        "testMessageSemiRare4",
        "testMessageSemiRare5",
        "testMessageSemiRare6",
        "testMessageSemiRare7",

        "testMessageRare1",
        "testMessageRare2"
    ]

    weights = [
        0.077,
        0.077,
        0.077,
        0.077,
        0.077,
        0.077,
        0.077,
        0.077,
        0.077,
        0.077,

        0.03,
        0.03,
        0.03,
        0.03,
        0.03,
        0.03,
        0.03,
        
        0.01,
        0.01,
    ]

    response = random.choices(brankos_greetings, weights, k = 1)
    await channel.send(response)

Однако это дает следующий вывод в чате: ['testMessageCommon1'] ['testMessageRare1']. et c

Я пробовал: response = str(random.choices(brankos_greetings, weights, k = 1))

и await channel.send(str(response))

и response = random.choices(brankos_greetings, weights, k = 1).strip('[]')

и await channel.send(response.strip(['']))

Но ничего не работает.

Итак, мой вопрос: как преобразовать этот список в строку?

Ответы [ 3 ]

1 голос
/ 20 июня 2020

Вы можете использовать метод join () для объединения массива строк.

response = ' '.join(random.choices(brankos_greetings, weights, k = 1))
1 голос
/ 20 июня 2020

Думаю, это может сработать response = " ".join(response)

0 голосов
/ 20 июня 2020

random.choices() возвращает результат в виде списка. Поскольку у вас есть k=1, это означает, что возвращаемый результат будет списком с одним элементом. Чтобы отправить этот элемент в виде сообщения, вам необходимо проиндексировать этот элемент и получить к нему доступ. Другими словами,

response = random.choices(brankos_greetings, weights, k = 1)
await channel.send(response[0]) # index the first (zeroth) element
...