Python答题游戏调用API如何支持数字作答并仅返回正确答案
Python答题小游戏修复方案
核心优化点
- 支持用户输入数字序号作答,同时兼容直接输入答案文本的作答方式
- 答错时仅返回正确答案内容,不再输出完整的答案字典结构
修改后完整代码
import requests url = "" # 替换为你的API实际地址 the_questions = requests.get(url).json() print("------ Welcome to Python Quiz ------") def compare_answer(correct, user_input_answer): # 统一转小写去空格比对,避免格式问题误判 return any(ca["correct"] and ca["answer"].strip().lower() == user_input_answer.strip().lower() 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 total = len(the_questions['questions']) # 动态计算总题数,不用硬编码3 for question in the_questions['questions']: print(question['prompt']) answers = question['answers'] for i, a in enumerate(answers, start=1): print(f"[{i}] {a['answer']}") user_answer = input("> ").strip() # 处理用户输入序号的情况 if user_answer.isdigit(): idx = int(user_answer) - 1 # 校验序号合法性,避免输入超出选项范围报错 if 0 <= idx < len(answers): user_answer = answers[idx]['answer'] if compare_answer(answers, user_answer): score += 1 print(f"Right!") else: # 调用已有的get_correct_answers提取正确答案,拼接成字符串显示 right_ans = ', '.join(get_correct_answers(answers)) print(f"Wrong, the right answer is: {right_ans}") print(f"You got {score} points out of {total}!") if __name__ == '__main__': main()
关键修改说明
- 新增输入序号处理逻辑:判断用户输入是否为纯数字,合法的序号会转换为对应选项的答案文本再做比对,同时做了序号范围校验,避免输入超出选项数量导致索引报错
- 优化比对逻辑:统一对答案和用户输入做去空格、转小写处理,避免大小写、首尾空格等格式问题导致的误判
- 优化答错提示:调用你已经实现的
get_correct_answers()函数提取所有正确答案,用逗号拼接后输出,适配多选场景(比如示例API中第三题有两个正确答案) - 动态计算总题数:替换原来硬编码的总题数3,适配API返回不同数量题目的情况
内容的提问来源于stack exchange,提问作者Kevin R
相关产品推荐
相关产品推荐

