Python保龄球分数统计输入q退出触发NameError如何解决
报错核心原因
- 你当前使用的是Python 2.x版本运行代码:Python 2中的
input()函数会将用户输入的内容直接当作Python表达式解析执行,输入q时系统会尝试查找名为q的变量,找不到就抛出NameError。Python 3中input()默认返回字符串,不会出现该问题。 - 你的代码本身还存在多处逻辑漏洞:没有适配大写
Q的退出判定、将函数定义和求和逻辑放在循环内重复执行、没有做非法输入校验、空输入场景下求平均会触发除零错误。
修复后可直接运行的代码
nums = [] def Average(nums): return sum(nums) / len(nums) while True: # 如果是Python 2运行,将下方input替换为raw_input即可 scores = input("Please enter a score (xxx) or 'q' to exit: ").strip().lower() if scores == 'q': print("quitting") break # 校验输入是否为合法数字 try: score_num = int(scores) nums.append(score_num) except ValueError: print("输入不合法,请输入数字或者q/Q退出") total = sum(nums) print(f"The total score is: {total}") if nums: average = Average(nums) print("The score average is: ", round(average, 2)) else: print("未录入任何分数,无法计算平均分")
修复说明
- 输入统一转为小写判断,同时支持
q和Q触发退出 - 将函数定义、统计逻辑移到循环外部,避免重复执行
- 增加异常捕获逻辑,非数字、非退出指令的输入会提示重入,不会直接崩溃
- 增加空数组判定,用户未录入任何分数直接退出时不会触发除零错误
- 简化循环逻辑,去除冗余判定
内容的提问来源于stack exchange,提问作者Ryan B
相关产品推荐
相关产品推荐

