如何一次提取一个值?

How to extract one value at a time?

我正在尝试使用 Telebot 模块添加“/fact”命令,其中 return 是关于 API 中的狗的事实。但是,我希望它一次只 return 一个事实,并且每次都是一个新事实。我只是不知道如何处理这个问题。这是我的代码:

@bot.message_handler(commands=['fact'])
def get_fact(message):
    index = 0
    while True:
        facts = requests.get('https://dog-facts-api.herokuapp.com/api/v1/resources/dogs?index=' + str(index)).json()
        f = facts[0]['fact']
        index += 1
        bot.send_message(message.chat.id, f)

或:

@bot.message_handler(commands=['fact'])
def get_fact(message):
        facts = requests.get('https://dog-facts-api.herokuapp.com/api/v1/resources/dogs/all').json()
        f = list(facts)
        iterator = iter(f)
        bot.send_message(message.chat.id, iterator.__next__()['fact'])

您需要在命令函数定义之外初始化索引,这样它就不会每次都被重置,这样您就可以从狗的事实中获取一个事实 API 并确认已收到一个事实来自 JSON 负载。如果为空,则将 factIndex 重置为 1 并重新开始,这样每次都会显示一个新事实,直到到达事实列表的末尾。

factIndex = 1 # Start the index

@bot.message_handler(commands=['fact'])
def get_fact(message):
    facts = json.loads(requests.get("https://dog-facts-api.herokuapp.com/api/v1/resources/dogs?index=" + str(factIndex)).content)
    
    # Check to see if we obtained a fact
    if (not facts): # If we got not fact
        factIndex = 1 # Reset the index
        facts = json.loads(requests.get("https://dog-facts-api.herokuapp.com/api/v1/resources/dogs?index=" + str(factIndex)).content)

    bot.send_message(message.chat.id, facts[0]["fact"])