从 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 获取单个数字,而不是字典的主要内容,如果未能解决你的问题,请参考以下文章
Django REST API 接受列表而不是发布请求中的字典