利用 Pandas 进行 班级德育分 个人分计算
使用Pandas == 1.5.3
班干部打德育分太辛苦了我给他们写个自动算总分的程序
- 昨天给我们的班干部 打德育分 总分算的是非常的坐牢
- 所以我决定写个小程序 帮助一下我们的班干部
数据也是非常不好啊
Main 主程序
- main.py 里面写了程序的小入口
import pandas as pd
import re
import tkinter.filedialog
from DefaultScore import DefaultScoreForMonthStart
from ScoreMonthEnd import score_month_end
def month_start():
file_path = tkinter.filedialog.askopenfilename(title='打开源文件')
# 读选中的文件
df = pd.read_excel(file_path, index_col=0)
# 保存文件的位置
save_file_path = tkinter.filedialog.asksaveasfilename(defaultextension='.xlsx', title='另存为文件',
filetypes=[('所有文件', '.xlsx')])
DefaultScoreForMonthStart(df=df, save_file_path=save_file_path)
def month_end():
file_path = tkinter.filedialog.askopenfilename(title='打开上一周文件')
# 读选中的文件
df = pd.read_excel(file_path, index_col=0)
# 保存文件的位置
save_file_path = tkinter.filedialog.asksaveasfilename(defaultextension='.xlsx', title='另存为文件',
filetypes=[('所有文件', '.xlsx')])
score_month_end(df=df, save_file_path=save_file_path)
if __name__ == '__main__':
for i in range(10):
print("欢迎使用本程序")
print("1.现在为月初(默认分数为75)")
print("2.现在为月中默认分数为上周的总分(需要导入上周的数据)")
print("退出请输入3, 超过10次未输入正确则退出程序")
user_input = input("请输入你现在的情况(输入1或者2):")
if user_input == '1':
try:
month_start()
except Exception as e:
print("报错", e)
elif user_input == '2':
try:
month_end()
except Exception as e:
print("报错", e)
elif user_input == '3':
print("用户指令退出!")
break
else:
print("不明白你在输入什么,请重新输入!")
定义了两个小函数 调用了另外两个文件里小模块
还使用了tk里的 filedialog 里面的askopenfilename方法用来打开文件路径
asksaveasfilename 放保存文件
ScoreMonthEnd
def score_month_end(df, save_file_path):
student_score_m = []
# 处理每格分数
def cnm(s):
a = re.findall(r'(-\d+|\+\d+)', str(s))
operations = [int(match) for match in a]
sum_sb = sum(operations)
if operations:
return sum_sb
else:
return 0
# 计算班级每人的分数
for i in range(1, 46):
try:
df_student = df.loc[i, '周一':'加减分']
student_data = df_student.apply(cnm)
a = student_data.values.sum()
student_score_m.append(a)
except:
continue
score = df.loc[:,['姓名',"总分"]]
score.loc[:,"本周分数"] = student_score_m
score.rename(columns={"总分":"上周分数", '本周分数':"本周扣分"}, inplace=True)
score.loc[:,"本周分数"] = score[['上周分数', '本周扣分']].sum(axis=1)
score = score.loc[:,"本周分数"]
# 把df复制给student_score
student_score = df
student_score.loc[:,"本周分数"] = score
student_score.rename(columns={"总分": "上周分数"}, inplace=True)
# 保存
student_score.to_excel(save_file_path)
DefaultScore
def DefaultScoreForMonthStart(df, save_file_path):
student_score = []
# 处理每格分数
def cnm(s):
a = re.findall(r'(-\d+|\+\d+)', str(s))
operations = [int(match) for match in a]
sum_sb = sum(operations)
if operations:
return sum_sb
else:
return 0
# 计算班级每人的分数
for i in range(1, 46):
try:
df_student = df.loc[i, '周一':'加减分']
student_data = df_student.apply(cnm)
a = student_data.values.sum() + 75
student_score.append(a)
except:
continue
# 将已经算好的总分放入表格
MonthStart = df
MonthStart.loc[:, "总分"] = student_score
MonthStart.to_excel(save_file_path)