使用Python程序计算HPU综合评定积分表中的课程成绩分,pandas DataFrame

编程入门 行业动态 更新时间:2024-10-25 12:17:08

使用Python程序计算HPU综合评定<a href=https://www.elefans.com/category/jswz/34/1768675.html style=积分表中的课程成绩分,pandas DataFrame"/>

使用Python程序计算HPU综合评定积分表中的课程成绩分,pandas DataFrame

使用Python程序计算HPU综合评定积分表中的课程成绩分

    • 程序功能
    • 使用说明
    • 注意事项
    • 程序源码
    • 视频参考

程序功能

课程成绩分X1计算公式如下:

本程序已经打包为exe文件,可以较方便的计算HPU综合评定积分表中的课程成绩分(X1)

使用说明

前期准备:需要下载本程序exe文件,有学院发的成绩单
使用方法:
1.新建一个空的Excel表格(.xlsx文件),命名为“班级成绩单.xlsx”
2.将专业成绩单中自己班级的成绩复制到“班级成绩单.xlsx”的sheet1页
3.进入HPU综合教务系统查看我的课表,
将对应两学期的课程清单复制到“班级成绩单.xlsx”的sheet2页,
粘贴的时候选择“匹配目标格式”,
删除除课程属性、学分、课程名称外的其他列
按照课程名称排序
4.保存“班级成绩单.xlsx”文件,然后关闭该文件
5.运行下载好的exe文件,稍等片刻
6.根据提示在弹出的界面中选择“班级成绩单.xlsx”表格
7.根据提示可能需要手动输入部分课程对应的学分数
8.听到或看到 “Successful Done!”即处理完成
9.在“班级成绩单.xlsx”所在的文件夹中可看到“班级成绩单–output.xlsx”文件,计算结果保存在该文件的最后几列

注意事项

注:因为没有大一大二学年的成绩单,暂时没有添加处理体育课的功能,暂不适合大一大二学年综合评定使用,如果可以提供相应的成绩单可以添加该功能
注:如有同学课程缓考,需要在第2步粘贴成绩后,手动将该同学该成绩所在单元格清空(右键点击该单元格 选择 清除内容或选中该单元格点击键盘上的delete

程序源码

源码GitHub地址:.git

exe文件及使用说明:链接: =73bj 提取码: 73bj 复制这段内容后打开百度网盘手机App,操作更方便哦

初版代码如下:

import pandas as pd
import numpy as np
import math
import os
import tkinter.filedialog
import pyttsx3##### 读取所学的主要课程和对应的学分数
# 获取文件
print('提示:请选择您处理后的成绩单,注:输出默认保存到相同路径\n')
#使用TK GUI选择成绩单文件
file_path = tkinter.filedialog.askopenfilename(title='请选择您处理过的成绩单', filetypes=[('所有文件', '.*'), ('xlsx文件', '.xlsx'), ('xls文件', '.xls')])
file_name2 = os.path.split(os.path.splitext(file_path)[0]) # 获取成绩单的文件名
outputfile1 = os.path.dirname(os.path.abspath(file_path))  # 获取成绩单所在路径的父路径
outputfile_path = outputfile1 + "\\" + file_name2[1] + "--output.xlsx" # 得出输出文件的路径
courselist = pd.read_excel(file_path,sheet_name = "Sheet2",usecols="A:C") #读取所学的主要课程和对应的学分数
# 将课程和对应的学分转换位字典 方便快速查找
cs1 = courselist.set_index(['课程名称'])['学分'].to_dict()
# 将课程和对应的课程属性转换位字典 方便快速查找
cs2 = courselist.set_index(['课程名称'])['课程属性'].to_dict()###### 读取成绩单
schoolreport = pd.read_excel(file_path,sheet_name = "Sheet1") # 将Sheet1中的原始成绩读入
# 查看主要课程学分列表全不全
a = 8
while schoolreport.columns[a] != "课程、学分、成绩": # 判断所有主要课程名称是否有对应的学分if cs1.setdefault(schoolreport.columns[a]) == None:print("sheet2页中无\"",schoolreport.columns[a],"\"对应的学分数,请手动输入(每次都要输入)或者在成绩单sheet2页补充(一劳永逸)")print("请输出上述课程对应的学分数,输入完毕后按回车键结束")cs1[schoolreport.columns[a]] = float(input())a += 1# 新添加四列用来记录结果
schoolreport['所学总学分数(分母)'] = '' 
schoolreport['所修课程成绩*该课程学分(分子)'] = ''
schoolreport['课程成绩分'] = ''
schoolreport['必修课最低一门成绩'] = ''
number_addcolumn = 4# 将等级制的等级转换为对应的分数
schoolreport.replace(['良好','85'])
for row in range(0,schoolreport.shape[0]):for col in range(8,schoolreport.shape[1]-number_addcolumn):content = schoolreport.loc[row][col]if not content is np.nan:if schoolreport.loc[row][col] == "优秀":schoolreport.iat[row,col] = 95elif schoolreport.loc[row][col] == "良好":schoolreport.iat[row,col] = 85elif schoolreport.loc[row][col] == "中等":schoolreport.iat[row,col] = 75elif schoolreport.loc[row][col] == "及格":schoolreport.iat[row,col] = 65elif schoolreport.loc[row][col] == "不及格":schoolreport.iat[row,col] = 0degree2score = {'优秀 ':95,'良好 ':85,'中等 ':75,'及格 ':65,'不及格 ':0}###### 计算课程成绩分、所学总学分、必修课最低分
# for循环一次一行 即一位同学一位同学的计算
for i in range(0,schoolreport.shape[0]):a = 8  # 从第八列开始才是成绩 注:序号列是第 0 列sumscore = 0 # 用来存放累加的值sumcredit = 0minscore = 101while schoolreport.columns[a] != "课程、学分、成绩": # 先将主要课程计算完毕if not math.isnan(schoolreport.loc[i][a]):  # 计算非空单元格的成绩,有成绩就表示修了这门课if cs2.get(schoolreport.columns[a]) == "必修":minscore = min(minscore,schoolreport.loc[i][a])sumscore += (schoolreport.loc[i][a] * cs1.get(schoolreport.columns[a])) # 累加成绩与学分的乘积sumcredit += cs1.get(schoolreport.columns[a]) # 累加所学课程学分数a = a + 1 if a >= schoolreport.shape[1]-number_addcolumn: # 越界检查breakelse: # 单元格为空表示学生没有修这门课a = a + 1if a >= schoolreport.shape[1]-number_addcolumn:breakcontinuewhile True: # 计算单列的课程成绩 并不是所有学生都有单列课程(班里没几个同学学的课才会单列为 “课程、学分、成绩”)if schoolreport.loc[i][a] is not np.nan: # 判断是否有单列课程成绩temp1=schoolreport.loc[i][a].split(',')  # 提取单列课程的if degree2score.get(temp1[2],101) != 101 :sumscore += float(temp1[1]) * degree2score.get(temp1[2])else:sumscore += float(temp1[1]) * float(temp1[2]) sumcredit += float(temp1[1])a += 1;if a >= schoolreport.shape[1]-number_addcolumn:breakelse:break
##### 保存结果schoolreport.iat[i,schoolreport.shape[1]-number_addcolumn] = sumcredit schoolreport.iat[i,schoolreport.shape[1]-number_addcolumn+1] = sumscoreschoolreport.iat[i,schoolreport.shape[1]-number_addcolumn+2] = sumscore / sumcreditschoolreport.iat[i,schoolreport.shape[1]-number_addcolumn+3] = minscoreschoolreport.to_excel(outputfile_path,sheet_name = '成绩单',index = False) # 转存为Excel表格
print('Successful Done!') # 操作成功提示
pyttsx3.speak("Successful Done!")

视频参考

B站视频演示地址

更多推荐

使用Python程序计算HPU综合评定积分表中的课程成绩分,pandas DataFrame

本文发布于:2024-02-11 11:01:16,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1680637.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:积分   成绩   课程   程序   Python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!