Python成绩转换程序调试求助:int() base10无效字面量错误
问题解决:处理数组形式成绩输入并生成等级数组
错误原因分析
- 输入逻辑不匹配:原代码设计为逐个输入单个成绩,不符合你需要的数组形式输入(如
[89.79,55,12])的需求。 - 类型转换错误:尝试用
int()解析带小数的字符串(如"89.79")会触发invalid literal for int() with base 10错误,因为整数类型无法处理小数点。 - 语法错误:变量定义行
totals = []letters = []未分隔、注释Get and store user input未加#、循环和条件语句缩进不正确。 - 等级规则不符:原代码包含需求外的
C等级,需要调整匹配你要的[HD,D,P,F]体系。
修复后的代码
import ast # 初始化存储成绩和等级的列表 totals = [] letters = [] # 获取并解析数组形式的用户输入 print("请输入数组形式的成绩,例如 [89.79,55,12]") user_input = input("> ") # 安全解析输入的数组字符串为Python列表 try: totals = ast.literal_eval(user_input) except SyntaxError: print("输入格式错误,请按照要求输入数组形式的成绩") exit() # 为每个成绩计算对应的等级 for total in totals: # 将成绩转换为浮点数,兼容整数和小数 score = float(total) if score >= 90: letters.append("HD") elif score >= 80: letters.append("D") elif score >= 70: letters.append("P") else: letters.append("F") # 输出结果 print("学生的GPA等级为: {}".format(letters))
关键修改说明
- 数组输入解析:使用
ast.literal_eval()安全将用户输入的数组字符串转换为Python列表,避免直接使用eval()带来的安全风险。 - 类型转换优化:用
float()处理成绩,同时支持整数和小数输入,解决原代码的类型转换错误。 - 语法错误修复:分隔变量定义、添加注释符号、修正所有缩进问题,保证代码可正常运行。
- 等级规则调整:移除原代码中的
C等级,调整条件匹配你需要的HD/D/P/F体系(可根据实际需求修改分数阈值)。
内容的提问来源于stack exchange,提问作者Ash
相关产品推荐
相关产品推荐

