运行Python成绩单生成代码时触发ValueError错误,求助排查
问题分析与解决方案
错误原因
- 触发
ValueError: invalid literal for int() with base 10: 'k'的直接原因:你错误地用int()去转换姓名和学校名称的输入内容。这两个字段是字符串类型(比如名字里的字母、汉字),无法被int()函数解析为整数,当输入包含非数字字符(比如'k')时就会报错。 int()函数仅能转换符合十进制整数格式的字符串,遇到字母、符号等非数字内容时,必然抛出该错误。
代码修正点
- 修正输入类型转换:姓名和学校名称不需要转换,直接保留字符串类型即可。
- 修复成绩等级判断逻辑:原代码用多个独立
if,会导致高分数的等级被后续低条件覆盖(比如90分最终会被设为C2),需改用elif链式判断,确保只匹配第一个符合条件的等级。
修正后的完整代码
# 生成带总分和百分比的成绩单 # 学生基本信息 r = int(input('Enter Roll No. :')) n = input('Enter Name:') # 去掉int()转换 s = input('Enter School name :') # 去掉int()转换 # 科目成绩 eng = float(input('Enter your English marks :')) math = float(input('Enter your Mathematics marks :')) social = float(input('Enter your Social marks :')) science = float(input('Enter your Science marks :')) malayalam = float(input('Enter your Malayalam marks :')) hindi = float(input('Enter your Hindi marks :')) # 计算总分和百分比 total = eng + math + social + science + malayalam + hindi percentage = (total * 100) / 480 # 确认每科满分是80,6科总分480,若满分不同请修改分母 # 判定等级 if percentage >= 80: grade = 'A1' elif percentage >= 70: grade = 'A2' elif percentage >= 60: grade = 'B1' elif percentage >= 50: grade = 'B2' elif percentage >= 40: grade = 'C1' elif percentage >= 33: grade = 'C2' else: grade = 'E' # 输出成绩单 print('Roll Number :', r) print('Name :', n) print('School Name:', s) print('Total:', total) print('Percentage :', percentage) print('Final Grade:', grade)
额外说明
- 若科目满分不是80,请自行调整百分比计算中的分母(比如每科100分的话,分母改为600)。
- 原代码中变量
t和p改为total和percentage是为了提升可读性,不影响功能。
内容的提问来源于stack exchange,提问作者amused_turtle14
相关产品推荐
相关产品推荐

