从 Web API 获取单个数字,而不是字典

Posted

技术标签:

【中文标题】从 Web API 获取单个数字,而不是字典【英文标题】:Get single number from web API, instead of dictionary 【发布时间】:2021-11-30 18:49:00 【问题描述】:

我的 Python 问答游戏有问题,我真的不知道如何继续使用它。这些问题来自一个 API,我希望能够用一个数字来回答正确的问题是什么(我已经修复了问题,以便替代问题的前面有数字)。我现在可以写出正确的答案,但不能用数字。当我写错答案或用数字回答时,我会像这样得到整个字典:

Wrong, right answer is: ['answer': 'print', 'correct': True, 'answer': 'input', 'correct': False, 'answer': 'import', 'correct': False, 'answer': 'sys.exit', 'correct': False]

我只是想要正确的答案,但我真的不知道如何解决这个问题。 所以,我希望能够用一个数字来回答,然后得到正确的答案。我该如何解决?我试图在正确答案 = 问题 ['answers'] 的主函数中应用 int(user_answer) - 1,但我没有让它工作,所以它可能是错误的方法。

import requests

url = ""
the_questions = requests.get(url).json()

print("------ Welcome to Python Quiz ------")


def compare_answer(correct, answers):
    return any(ca["correct"] and ca["answer"].strip().lower() == answers for ca in correct)


def get_correct_answers(answers):
    res = []
    for ans in answers:
        if ans['correct']:
            res.append(ans['answer'])
    return res


def main():
    score = 0
    for question in the_questions['questions']:
        print(question['prompt'])

        for i, a in enumerate(question['answers'], start=1):
            print(f"[i] a['answer']")

        user_answer = input("> ")
        correct_answer = question['answers']
        if compare_answer(correct_answer, user_answer):
            score += 1
            print(f"Right!")
        else:
            print(f"Wrong, the right answer is: correct_answer")
    print(f"You got score points out of 3!")


if __name__ == '__main__':
    main()

这就是 API 现在的样子,如果它有帮助的话。

"questions":["id":"1","prompt":"Vilken funktion anv\u00e4nder du f\u00f6r att skriva ut text i terminalen?","answers":["answer":"print","correct":true,"answer":"input","correct":false,"answer":"import","correct":false,"answer":"sys.exit","correct":false],"id":"2","prompt":"Hur tar man fram l\u00e4ngden p\u00e5 listan i variabeln \"fruits\"?","answers":["answer":"for _ in range(10)","correct":false,"answer":"input(fruits)","correct":false,"answer":"len(fruits)","correct":true],"id":"3","prompt":"Vad heter nyckelordet f\u00f6r att g\u00f6ra en loop i python?","answers":["answer":"in","correct":false,"answer":"for","correct":true,"answer":"while","correct":true]]

【问题讨论】:

那么,你为什么不使用自己的函数get_correct_answers() @Neuron 我得到了帮助写它,但我真的不知道如何正确使用它 对我来说,您似乎缺乏字典/收藏的基础知识。这对于编程初学者来说是正常的,但你应该对自己诚实,向你展示解决方案的人只会帮助你更好地理解它。在网上找到一个很好的教程(youtube 有一堆 python 教程)并尝试理解它以自己解决问题:) 【参考方案1】:

get_correct_answers() 函数将返回正确答案。所以调用它并显示它的结果。

        if compare_answer(correct_answer, user_answer):
            score += 1
            print(f"Right!")
        else:
            all_correct = ", ".join(get_correct_answers(correct_answer)
            print(f"Wrong, the right answer is: all_correct")

【讨论】:

谢谢!现在看起来好多了。我尝试将 int(user_answer) - 1 添加到代码的第一行以便能够用数字回答,但我只得到一个 KeyError。 看起来用户输入的是答案的文本,而不是数字。您的 compare_answer() 函数不查找数字。

以上是关于从 Web API 获取单个数字,而不是字典的主要内容,如果未能解决你的问题,请参考以下文章

IOS:如何从字典中获取单个键的值

Django REST API 接受列表而不是发布请求中的字典

为啥“数据”不是字典

尝试从一系列字典中检索键时出现“类型错误:列表索引必须是整数或切片,而不是 str”

从数字字典中获取最高值作为字符串[重复]

从python中两个数字之间的字典中获取所有键