Python答题程序扣分逻辑失效求助:答错扣分但分数循环重置
解决答题程序分数循环重置问题
你的问题核心是score变量的作用域错误——把它定义在了for循环内部,导致每次循环都会重新初始化,之前的扣分记录被清空,自然最多只能扣1分。
解决方案
把score的初始化代码移到for循环外部,让变量在整个循环周期内保持唯一实例,分数修改会持续累积。
示例代码(正确写法)
# 初始化分数在循环外,仅执行一次 score = 10 # 模拟题目列表 questions = [ {"content": "1+1=?", "answer": "2"}, {"content": "3*5=?", "answer": "15"}, {"content": "10/2=?", "answer": "5"} ] for q in questions: user_answer = input(q["content"] + " ") if user_answer != q["answer"]: score -= 1 # 扣分操作作用于外部定义的score print(f"答错!当前分数:{score}") else: print(f"答对!当前分数:{score}") print(f"最终得分:{score}")
错误写法对比(为什么会重置)
如果把score放在循环内,每次循环都会重新赋值,之前的扣分完全无效:
questions = [{"content": "1+1=?", "answer": "2"}, ...] for q in questions: score = 10 # 每次循环都重置为初始值,扣分只在本次循环生效 user_answer = input(q["content"] + " ") if user_answer != q["answer"]: score -= 1
额外注意事项
- 避免在循环内部再次定义
score变量(比如不要写score = ...),否则会覆盖外部的变量。 - 如果程序采用函数拆分实现,可通过函数返回值传递更新后的分数,或者将score作为参数传入(不推荐滥用全局变量)。
内容的提问来源于stack exchange,提问作者ElephantSpaghetti
相关产品推荐
相关产品推荐

