导入CSV计算学生成绩时遇TypeError错误求助
问题解决:TypeError: '>=' not supported between instances of 'list' and 'int'
错误原因
你犯了两个关键错误:
- 判断条件里误用整个
marks列表和整数比较(marks >=70),列表和整数无法直接做大小判断,应该用当前行的单个分数值。 - 从CSV读取的分数是字符串类型,必须先转为数字(整数或浮点数)才能和数字做比较。
修正后的代码
import csv filename = 'students.csv' name = [] marks = [] grade = [] with open(filename) as f: reader = csv.reader(f) # 若CSV有表头(如"姓名,分数")则保留此行跳过表头,无表头可删除 next(reader) for row in reader: name.append(row[0]) # 将CSV读取的字符串分数转为整数,存入列表 current_mark = int(row[1]) marks.append(current_mark) # 用当前单个分数判断等级 if current_mark >= 70: grade.append("A") elif current_mark >= 60: grade.append("B") elif current_mark >= 50: grade.append("C") else: grade.append("D") print(name) print(marks) print(grade)
关键改动说明
- 替换判断对象:把
marks >=70改成current_mark >=70,用当前行的单个分数值做判断,而非整个列表。 - 类型转换:新增
current_mark = int(row[1]),将CSV读取的字符串类型分数转为整数,确保能和数字正常比较。 - 简化代码:移除无用的
array模块导入和多余变量v,直接将等级字符串追加到grade列表,逻辑更清晰。 - 表头处理:添加
next(reader)跳过CSV表头行(无表头可删除此行)。
额外提示
如果分数包含小数(如85.5),将int()替换为float()即可避免转换报错。
内容的提问来源于stack exchange,提问作者Fake Chi
相关产品推荐
相关产品推荐

