【问题标题】:How can I convert this random.choices python list to a string?如何将此 random.choices python 列表转换为字符串?
【发布时间】:2020-10-10 20:53:49
【问题描述】:

我正在使用 Python 制作 Discord 机器人, 我希望机器人对随机消息做出反应,使用random.choice 可以正常工作 不过,我想补充一点。我发现random.choices(文档here) 您可以将权重添加到您的列表中,这样一些权重会比其他一些更频繁地被挑选。 现在我有:

@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']。等等

我尝试过: 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(['']))

但没有任何效果。

所以我的问题是:如何将这里的列表转换为字符串?

【问题讨论】:

  • 我忘了补充
  • 我也试过了
  • 一个简单的问题:['who dis']['hi'] 来自哪里?这些是您在brankos_greetings 中拥有的吗?
  • 抱歉,机器人实际上是这么说的,但我在实际列表中将其更改为更好理解的内容。
  • 是关于单词周围的 [] 和 ''

标签: python string list discord


【解决方案1】:

我认为这可能有效 response = " ".join(response)

【讨论】:

    【解决方案2】:

    您可以使用 join() 方法将字符串数组连接在一起。

    response = ' '.join(random.choices(brankos_greetings, weights, k = 1))
    

    【讨论】:

      【解决方案3】:

      random.choices() 以列表形式返回结果。由于您有k=1,这意味着返回的结果将是一个包含一个元素的列表。要将该元素作为消息发送,您需要索引并访问该元素。换句话说,

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

      【讨论】:

      • 非常感谢,已解决!
      • 很高兴它有帮助!
      猜你喜欢
      • 2019-10-21
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 2014-07-19
      • 2013-02-28
      • 2011-02-08
      • 2021-09-10
      • 2023-01-04
      相关资源
      最近更新 更多