使用递归函数判断成绩是否合格 现有代码如何精简优化
代码可优化点说明
你当前的实现逻辑思路正确,但存在以下可优化的问题:
- 语法错误:原代码缩进不规范,不符合Python语法要求,直接运行会报错
- 安全风险:直接用
eval()解析用户输入,若传入恶意代码会被直接执行,存在较高安全风险 - 逻辑冗余:不需要额外的
f参数统计合格成绩数量,只要遍历到任意小于40的成绩就可以直接判定为不及格,无需继续遍历剩余内容 - 退出逻辑粗暴:直接调用
quit()强制结束程序,灵活度低,递归函数可仅返回布尔判定结果,由外层统一处理输出 - 递归逻辑不清晰:终止条件拆分过于零散,可读性较差
优化后的递归实现
import ast # 用ast.literal_eval替代eval,仅解析字面量数据,避免恶意代码执行风险 score_list = ast.literal_eval(input()) def check_pass(index): # 递归终止条件1:已遍历完所有成绩,无<40的项,判定为及格 if index == len(score_list): return True # 递归终止条件2:遇到<40的成绩,直接判定为不及格,终止递归 if score_list[index] < 40: return False # 递归检查下一个成绩 return check_pass(index + 1) # 输出中文结果,需英文的话可替换为 Pass/Fail print("及格" if check_pass(0) else "不及格")
非递归极简实现(供参考)
如果不需要练习递归语法,用Python内置函数一行即可实现相同功能,性能比递归更优:
import ast print("及格" if all(score >= 40 for score in ast.literal_eval(input())) else "不及格")
内容的提问来源于stack exchange,提问作者Singularity
相关产品推荐
相关产品推荐

