gpt4 book ai didi

python - 我如何使一个函数遍历列表两次,从它停止的地方开始?

转载 作者:行者123 更新时间:2023-11-28 21:45:09 25 4
gpt4 key购买 nike

我正在制作一个 Facebook Messenger 机器人,它会返回公交车到达指定站点的时间。到目前为止,该机器人运行良好,但 Facebook 不允许机器人发送的消息超过 320 个字符。通常,机器人只能显示前 5 个左右而不会超过此限制,这在非常繁忙的站点上不够好。

我有一个 if 语句,如果停止有更多结果,它只显示前五个结果,然后将结果传递给机器人的 send_message 函数。

我正在寻找一种方法,以 5 个单独 block 的形式从大型停用列表中获取结果,并让机器人在发送第一条消息后从中断处继续。我目前的代码如下:

if len(info["results"]) > 5:
while i < 5:
n.append("Route:" + " " + str(info['results'][i]['route']) + " " + "to" + " " + str(info['results'][i]['destination']) + "\n" + "Due:" + " " + str(info["results"][i]["duetime"]) + " " + "minutes." + "\n")
i = i + 1
else:
while i < len(info["results"]):
n.append("Route:" + " " + str(info['results'][i]['route']) + " " + "to" + " " + str(info['results'][i]['destination']) + "\n" + "Due:" + " " + str(info["results"][i]["duetime"]) + " " + "minutes." + "\n")
i = i + 1

return '\n'.join(str(x) for x in n)

底部的 return 语句是传递给 send_message 函数的内容。有什么办法可以实现多消息方法吗?

最佳答案

你可以很容易地写一个 generator function像下面代码中的 chunks():

info = {'results': [
{'route': 1, 'destination': 'DestA', 'duetime': '10'},
{'route': 2, 'destination': 'DestB', 'duetime': '20'},
{'route': 3, 'destination': 'DestC', 'duetime': '30'},
{'route': 4, 'destination': 'DestD', 'duetime': '40'},
{'route': 5, 'destination': 'DestE', 'duetime': '50'},
{'route': 6, 'destination': 'DestF', 'duetime': '60'},
{'route': 7, 'destination': 'DestG', 'duetime': '70'},
{'route': 8, 'destination': 'DestH', 'duetime': '80'},
],
}

def chunks(info, n):
results = info['results']
for i in range(0, len(results), n):
chunk = [
'Route: {} to {}\nDue: {} minutes.\n'.format(
result['route'], result['destination'], result["duetime"])
for result in results[i:i+n]]
yield '\n'.join(chunk)

for i, chunk in enumerate(chunks(info, 5), 1):
print('== CHUNK {} ==\n{}'.format(i, chunk))

输出:

== CHUNK 1 ==
Route: 1 to DestA
Due: 10 minutes.

Route: 2 to DestB
Due: 20 minutes.

Route: 3 to DestC
Due: 30 minutes.

Route: 4 to DestD
Due: 40 minutes.

Route: 5 to DestE
Due: 50 minutes.

== CHUNK 2 ==
Route: 6 to DestF
Due: 60 minutes.

Route: 7 to DestG
Due: 70 minutes.

Route: 8 to DestH
Due: 80 minutes.

关于python - 我如何使一个函数遍历列表两次,从它停止的地方开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39809649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com