如何使用pythontelegrambot将列表中每10个项目的消息输出到聊天机器人

2024-09-29 23:15:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python电报机器人包编写一个电报机器人。 我想输出一个列表,将搜索结果存储到带有python电报机器人的聊天机器人。有时结果超过4000个字符,不允许输出。所以我想单独发送结果,如果列表中的项目超过10个,则让它在每条消息的列表中发送10个项目。到目前为止,我现在可以通过聊天机器人以少于4000个字符的格式输出我想要的格式,但我不知道如何使每条消息包含10个项目?我检查了slice,但它似乎只适用于列表,而python电报机器人只导出文本。由于学校日期是字典,我还尝试在“text=”搜索结果:\n“&;之间设置for循环;“对于i,枚举(搜索结果)中的school_数据:”,并且在这个for循环之后,它不断重复最后一行或重复单个行;使用了split()(希望从修改后的文本中修剪),但会弄乱输出格式

以下是我一直在工作的项目的理想输出格式:

university_name: blablabla
department: blablabla
staff_name: blablabla
ranking: blablabla
specialisation: blablabla
website: blablabla
-----
university_name: blablabla
department: blablabla
staf_name: blablabla
ranking: blablabla
specialisation: blablabla
website: blablabla
------
.
.
.

以下是我可以打印的代码,无论列表中有多少项:

        search_result = []

        for items in data["staffs"]:
            specialisation = items["staff_specialisation"]
            if keyword in specialisation:
                search_result.append({"university_name": items["university"], "department": items["department"], "staff_name": items["staff_name"], "ranking": items["ranking"], "specialisation": items["staff_specialisation"], "website": items["website"]})

        text = "Searching result:\n"
        for i, school_data in enumerate(search_result):
            for key in school_data:
                text += "\n" + "{}:{}".format(key, school_data[key])
            text += "\n------"

        update.message.reply_text(text)

非常感谢


Tags: 项目textname列表for格式机器人items
1条回答
网友
1楼 · 发布于 2024-09-29 23:15:47

当您进行迭代时,我会将reply_text()放在if item%10==9:中。使用%10modulo10),您将每10个循环执行一次操作。为什么是9?因为枚举从0开始,if也将在每个循环的末尾)

但是,如果项目列表不是10的倍数,则会留下一些项目而不显示。例如,如果您的项目列表有28个项目,您将显示前10个项目,后10个项目,仅此而已,您将错过最后8个项目。为了解决这个问题,最好使用if item%10==9 or item==len(itemlist)-1:,这样if还会检查您是否在搜索结果的最后一项,并执行最后的reply_text()

text = "Searching result:\n"
for i, school_data in enumerate(search_result):
    for key in school_data:
        text += "\n" + "{}:{}".format(key, school_data[key])
    text += "\n   "
    if i%10==9 or i==len(search_result)-1:
        update.message.reply_text(text)
        text = "Searching result:\n"

在这种特殊情况下,if子句位于第一个for循环中,该循环迭代搜索结果。sames用于我们在if中使用的i计数器

相关问题 更多 >

    热门问题