python如何计算个人gpa_Python版GPA计算器

最近在网申投简历时遇到一个需要计算GPA的问题,想起自己在上学时写的Excel公式版GPA计算器略显low,而且操作也比较复杂,于是一时兴起,写了个Python版的,在此分享给大家!

准备工作:

用户事先准备好如下图所示的Excel表格,其中A列为每门课程的学分,B列为每门课程的成绩。成绩可以有三种合法的表示方式:

百分制:支持0-100的整数或浮点数

五分制:默认支持'优', '良', '中', '差', '优秀', '良好', '中等', '及格', '不及格'的表示方式,可自行定义five_list变量

二分制:默认支持'通过', '不通过'的表示方式,可自行定义two_list变量

python如何计算个人gpa_Python版GPA计算器_第1张图片

"""

GPA计算器

"""

import numpy as np

import pandas as pd

# 用户定义参数

path = r'成绩单.xls' # 用户Excel文件路径

# 系统预置参数

method_list = ['STA4.0','MOD4.0_v1','MOD4.0_v2','PKU4.0'] # GPA计算方法代号列表

method_name_list = ['标准4.0方法','改进4.0方法v1','改进4.0方法v2','北大4.0方法'] # GPA计算方法名称列表

five_list = ['优', '良', '中', '差', '优秀', '良好', '中等', '及格', '不及格'] # 合法的五分制成绩

two_list = ['通过', '不通过'] # 合法的二分制成绩

# 百分制转换为4.0分制

def convert_100_4(n, method):

"""

百分制转换为4.0分制

:param n: int或float类型的百分制分数

:param method: str格式,使用的方法,应为method_list中的一个元素

:return: float类型的4.0分制分数

"""

# 标准4.0方法

if method == 'STA4.0':

if 90 <= n <= 100:

return 4.0

elif 80 <= n < 90:

return 3.0

elif 70 <= n < 80:

return 2.0

elif 60 <= n < 70:

return 1.0

elif 0 <= n < 60:

return 0.0

# 改进4.0方法v1

elif method == 'MOD4.0_v1':

if 85 <= n <= 100:

return 4.0

elif 70 <= n < 85:

return 3.0

elif 60 <= n < 70:

return 2.0

elif 0 <= n < 60:

return 0.0

# 改进4.0方法v2

elif method == 'MOD4.0_v2':

if 85 <= n <= 100:

return 4.0

elif 75 <= n < 85:

return 3.0

elif 60 <= n < 75:

return 2.0

elif 0 <= n < 60:

return 0.0

# 北大4.0方法

elif method == 'PKU4.0':

if 90 <= n <= 100:

return 4.0

elif 85 <= n < 90:

return 3.7

elif 82 <= n < 85:

return 3.3

elif 78 <= n < 82:

return 3.0

elif 75 <= n < 78:

return 2.7

elif 72 <= n < 75:

return 2.3

elif 68 <= n < 72:

return 2.0

elif 64 <= n < 68:

return 1.5

elif 60 <= n < 64:

return 1.0

elif 0 <= n < 60:

return 0

# 五分制转换为4.0分制

def convert_5_4(n):

"""

五分制转换为4.0分制

:param n: str类型的五分制分数

:return: float类型的4.0分制分数

"""

if n == '优秀' or n == '优':

return 4.0

elif n == '良好' or n == '良':

return 3.0

elif n == '中等' or n == '中':

return 2.0

elif n == '及格':

return 1.0

elif n == '不及格' or n == '差':

return 0.0

# 二分制转换为4.0分制

def convert_2_4(n):

"""

二分制转换为4.0分制

:param n: str类型的二分制分数

:return: float类型的4.0分制分数

"""

if n == '通过':

return 1.0

elif n == '不通过':

return 0.0

# 主程序

def run():

# 定义初始值

sum = 0 # 用来累加每行的学分

sumpro = [0 for i in range(len(method_list))] # 用来累加method_list中每种方法下的学分*4.0分制成绩

# 使用pandas读取为DataFrame(数字将自动转换格式)

data = pd.read_excel(path, index_col=None, header=0)

# 逐行校验合法性并累加计算

for i in range(len(data)):

credit = data.iloc[i, 0] # 学分

score = data.iloc[i, 1] # 成绩

# 校验学分合法性

if isinstance(credit, str):

print('Excel表中的A' + str(i + 2) + '单元格数值不合法!学分应为非负整数或浮点数!程序异常终止!')

break

elif credit<0:

print('Excel表中的A' + str(i + 2) + '单元格数值不合法!学分应为非负整数或浮点数!程序异常终止!')

break

# 校验成绩合法性并计算GPA

if isinstance(score, str):

if score in five_list:

sum += credit

sumpro = [sumpro[i] + credit * convert_5_4(score) for i in range(len(method_list))]

elif score in two_list:

sum += credit

sumpro = [sumpro[i] + credit * convert_2_4(score) for i in range(len(method_list))]

else:

print('Excel表中的B' + str(i + 2) + '单元格数值不合法!未定义的文字型成绩!程序异常终止!')

break

elif score < 0 or score > 100:

print('Excel表中的B' + str(i + 2) + '单元格数值不合法!百分制分数应在0-100之间!程序异常终止!')

break

else:

sum += credit

sumpro = [sumpro[i] + credit * convert_100_4(score, method_list[i]) for i in range(len(method_list))]

else:

print('计算完毕!使用每种方法计算的GPA分别为:')

for i in range(len(method_list)):

print(method_name_list[i]+'\t '+str(sumpro[i]/sum))

if __name__ == '__main__':

run()

计算完毕后,结果将以屏幕输出的形式展现:

python如何计算个人gpa_Python版GPA计算器_第2张图片

你可能感兴趣的:(python如何计算个人gpa)