【问题标题】:For in statement only prints last resultsFor in 语句只打印最后的结果
【发布时间】:2021-01-26 09:44:06
【问题描述】:

所以我正在使用可以查看机器人的命令进行测试。它将检测 arg 并查找 arg 是否在事物中,如果在事物中,它将打印以下信息。但是,它只适用于最后的信息。我该如何解决?

命令代码:

@client.command(pass_context=True)
async def viewbot(ctx, arg):
            for bot in data['bots']:
                name = bot["name"]
                #createdby = bot["createdby"]
                briefdesc = bot["briefdesc"]
                desc = bot["description"]
                slug = bot["slug"]
            if arg == f'{slug}':
                embed = discord.Embed(title=name,description=briefdesc,timestamp=ctx.message.created_at,colour=discord.Color.dark_green())
                await ctx.send(embed = embed)
            else:
                print("no")

JSON 代码:

{
    "bots": [
        {
            "name": "Bot1",
            "createdby": "Bit#0258",
            "briefdesc": "Texts.",
            "description": "Test",
            "library": "discord.py",
            "slug": "bot1"
        },
        {
            "name": "Bot2",
            "createdby": "BotTest#0001",
            "briefdesc": "Text",
            "description": "Rext",
            "library": "discord.js",
            "slug": "bot2"
        }
    ]
}

如果您知道如何解决,请回复此问题。谢谢。

【问题讨论】:

  • “最后的信息”是什么意思?还有你如何调用你的函数?
  • 您的代码实际上是这样缩进的吗?然后仔细想想:if arg == f'{slug}': 检查应该发生多少次?它实际上发生了多少次?你的代码有什么特点可以让它发生这么多次?考虑到您的代码的缩进,它会按照您的预期执行吗?

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


【解决方案1】:

看看你的逻辑:

        for bot in data['bots']:
            name = bot["name"]
            #createdby = bot["createdby"]
            briefdesc = bot["briefdesc"]
            desc = bot["description"]
            slug = bot["slug"]

        if arg == f'{slug}':
            ...

特别地告诉它遍历所有可用的机器人,提取它们的字段,并将每个字段覆盖在前一组数据的顶部。当您离开循环时,每个变量中只有最新的值。这就是变量的工作原理。

要获取所有值,请将您的处理(if)移动到循环内,或者将数据收集到列表中而不是标量变量中。

【讨论】:

    猜你喜欢
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多