【问题标题】:Trouble while formatting a Discord message via `.join`通过`.join`格式化Discord消息时出现问题
【发布时间】:2019-01-07 08:54:45
【问题描述】:

我想让我的消息看起来像:

禁止名单:

• 用户 1 ID(用户 1 名称#用户 1 鉴别器)

• 用户 2 ID(用户 2 名称#用户 2 鉴别器)

• 用户 3 ID(用户 3 名称#用户 3 鉴别器)

我已经在列表格式中获得了用户的 ID、名称和鉴别器,我只是不知道如何让它正确格式化。我一直在搞乱.format.join 有一段时间了,但是如果没有每条数据都在新行上,我不知道如何以正确的顺序获取它。

作为参考,这是我的代码现在的样子:

userid = ['User 1 ID', 'User 2 ID', 'User 3 ID']
name = ['User 1 Name', 'User 2 Name', 'User 3 Name']
discriminator = ['User 1 Disc', 'User 2 Disc', 'User 3 Disc']

total = list(chain.from_iterable(zip(userid, name, discriminator)))


await client.send_message(message.channel, "**Ban List:** \n •<@{}>".format(">\n• <@".join(total)))

这个输出:

禁止名单:

• @用户 1 ID

• @用户 2 ID

• @用户 2 ID

【问题讨论】:

    标签: python string python-3.x discord discord.py


    【解决方案1】:

    你可以试试这个代码:

    userid = ['User 1 ID', 'User 2 ID', 'User 3 ID']
    name = ['User 1 Name', 'User 2 Name', 'User 3 Name']
    discriminator = ['User 1 Disc', 'User 2 Disc', 'User 3 Disc']
    
    total = zip(userid, name, discriminator)
    
    await client.send_message(message.channel, "**Ban List:** \n{}".format("\n".join(["• {}".format(" ".join(list(item))) for item in total])))
    

    【讨论】:

    • 试过了,但它只是发送相同的输出,但它们之间有空格。
    • 可以把最后一句替换成如下:await client.send_message(message.channel, "**Ban List:** \n{}".format("\n".join(["•&lt;@{} ({}#{})&gt;".format(*item) for item in total])))
    【解决方案2】:

    试试下面这段代码,它不是单行代码,但我想它更具可读性

    userid = ['User 1 ID', 'User 2 ID', 'User 3 ID']
    name = ['User 1 Name', 'User 2 Name', 'User 3 Name']
    discriminator = ['User 1 Disc', 'User 2 Disc', 'User 3 Disc']
    
    total = list((zip(userid, name, discriminator)))
    
    # reformat the code into the desired formatting
    pretty_list = set()
    for details in total:
        data = "•<@{} ({}#{})>".format(details[0], details[1], details[2]) 
        pretty_list.add(data)
    
    # debug print below
    # print("**Ban list:** \n{}".format("\n".join(pretty_list)))
    
    await client.send_message(message.channel, "**Ban list:** \n{}".format("\n".join(pretty_list)))
    

    祝你好运:)

    【讨论】:

    • @Pierre.Vriens ,我刚刚更新了代码以提高可读性。假设您要询问输出,它的作用基本上是将pretty_list 中格式正确的项目与换行符(“\n”)连接起来。然后,这个连接的字符串被“粘贴”在 "*Ban list:** \n{}" 的占位符{} 内。希望对你有帮助
    【解决方案3】:

    这是一个单行(ish)解决方案:

    userid = ['User 1 ID', 'User 2 ID', 'User 3 ID']
    name = ['User 1 Name', 'User 2 Name', 'User 3 Name']
    discriminator = ['User 1 Disc', 'User 2 Disc', 'User 3 Disc']
    
    #convert [['a1', 'a2'], ['b1', 'b2']] to iter([('a1', 'b1'), ('a2', 'b2')])
    total = zip(userid, name, discriminator)
    
    await client.send_message(message.channel, "**Ban List:**\n"
                              + "\n".join("• {} ({}#{})".format(*i) for i in total))
    

    输出应该是:

    禁止名单:

    • 用户 1 ID(用户 1 名称#用户 1 光盘)

    • 用户 2 ID(用户 2 名称#用户 2 光盘)

    • 用户 3 ID(用户 3 名称#用户 3 光盘)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-04
      • 2014-10-03
      • 2020-11-17
      • 2020-01-29
      相关资源
      最近更新 更多