求助:编写Python脚本从CSV成绩计算学生及格或不及格
嘿,作为Python新手遇到这种问题太正常啦!我来一步步帮你搞定这个成绩分析的脚本,保证你能看懂又好用~
首先咱们先明确下前提:假设你的CSV文件格式是类似这样的(如果你的列名或结构不同,后面代码可以轻松调整):
姓名,分数
张三,85
李四,58
完整可运行的Python脚本(带详细注释)
我会用Python自带的csv模块来写,不用额外安装库,对新手更友好:
import csv # 这里定义及格分数线,你可以根据需求随便改 PASS_SCORE = 60 # ---------------------- 第一步:读取CSV并在控制台显示分析结果 ---------------------- # 替换成你自己的CSV文件路径,比如'./scores.csv'或者桌面路径 with open('grades.csv', mode='r', encoding='utf-8') as input_file: # 用DictReader可以把每行数据转成字典,直接用列名取值,超方便 csv_reader = csv.DictReader(input_file) # 先打印个好看的表头 print(f"{'姓名':<10} {'分数':<5} {'结果'}") print("-" * 25) # 遍历每一行学生数据 for student in csv_reader: name = student['姓名'] # 这里加个异常处理,防止分数不是数字导致脚本崩溃 try: score = int(student['分数']) except ValueError: print(f"{name:<10} {student['分数']:<5} *无效分数,请检查*") continue # 判断是否及格,一行代码搞定 result = "✅ 及格" if score >= PASS_SCORE else "❌ 不及格" # 打印结果 print(f"{name:<10} {score:<5} {result}") # ---------------------- 第二步(可选):把分析结果写入新的CSV文件 ---------------------- # 如果需要把结果保存下来,就运行这段代码 with open('graded_results.csv', mode='w', encoding='utf-8', newline='') as output_file: # 定义新CSV的列名 fieldnames = ['姓名', '分数', '结果'] writer = csv.DictWriter(output_file, fieldnames=fieldnames) # 先写入表头 writer.writeheader() # 重新读取原文件,把结果追加进去再写入新文件 with open('grades.csv', mode='r', encoding='utf-8') as input_file: reader = csv.DictReader(input_file) for student in reader: try: score = int(student['分数']) student['结果'] = "及格" if score >= PASS_SCORE else "不及格" except ValueError: student['结果'] = "无效分数" writer.writerow(student) print("\n🎉 分析完成!结果已保存到graded_results.csv文件里啦~")
给新手的几个关键提示
- 文件路径要对:把代码里的
'grades.csv'替换成你实际的文件路径,比如Windows桌面路径可能是'C:/Users/你的名字/Desktop/grades.csv',Mac/Linux是'/Users/你的名字/Desktop/grades.csv' - 列名要匹配:如果你的CSV列名不是“姓名”和“分数”,比如是“StudentName”和“Score”,记得把代码里的
student['姓名']改成student['StudentName'],student['分数']改成student['Score'] - 调整及格线:直接改
PASS_SCORE = 60这个数值就行,比如改成50分及格也没问题 - 处理异常情况:脚本里加了
try-except,就算CSV里有非数字的分数(比如填了“缺考”),脚本也不会崩溃,会提示你哪里有问题
运行这个脚本后,你既能在控制台看到每个学生的及格情况,还能得到一个带结果的新CSV文件,完美解决你的需求~
内容的提问来源于stack exchange,提问作者Amir Shaw




