python有几级等级考试,python级别概念
大家好,本文主要讲用Python实现分级。有兴趣的同学过来看看,如果对你有帮助记得收藏。
00-1010等级创建新的等级销售表文件夹,以确定等级数量分割数据并保存工作簿汇总。
我们将开始学习如何评分。要实现这个功能,我们要学习五个新的知识点,分别是os.path.exists()、os.mkdir()、算术运算符//、%和cn2an.an2cn()
在这个函数中,我们需要将【销售汇总表. xlsxlsxlsx】按照销售排名拆分成【等级x销售表. xlsx】,放在【等级销售表】的文件夹中,其中120人为一个等级。
根据项目概述中对评分功能的描述,可以总结为以下三个小步骤,分别是:
1)新建一个等级销售表文件夹,存储生成的等级X销售表. xlsx;
2)将【总销售表. xlsx】按“销售排名”栏划分,每120人xlsx一个档次,确定档次数;
3)根据年级数,新建若干个工作簿,从年级开始往回排,写入所有年级的销售额和排名数据,保存为【年级x销售额表. xlsx】,其中x为对应的年级。
目录
等级划分
评分之后,不可避免的会出现一批新的练习册。如果它们仍然存储在与[销售摘要]相同的目录中。xlsx]和[销售数据]文件夹,找文件会不方便。
为了更好地汇总文件,您可以在拆分前设置一个文件夹来存储新工作簿。这里需要用到两个新的知识点:os.path.exists()和os.mkdir()。
Exists的意思是“存在”。顾名思义,os.path.exists()是用来判断路径是否存在的。文件/文件夹的路径写在括号中,如果路径存在,则返回True,如果不存在,则返回False。
导入操作系统
#测试文件夹存在于当前目录中
print(os.path.exists(。/test/))
#当前目录中不存在test_new文件夹
print(os.path.exists(。/test_new/))
因为[test]文件夹存在,所以将打印True,但是因为[test_new]文件夹不存在,所以将打印False。
如果你想在这个时候创建一个新的文件夹,你必须使用os.mkdir()。
Dir的意思是“目录/路径”,所以使用os.mkdir()来创建目录/路径。os.path.exists()和os.mkdir()经常一起使用。
还是以上面的场景为例。如果[test_new]文件夹不存在,请创建一个新的[test_new]文件夹。代码可以这样写:
导入操作系统
#确定文件夹是否存在。
路径=。/test_new/
如果不是os.path.exists(path):
#新文件夹
os.mkdir(路径)
我们可以看到在[static3]文件夹中多了一个[test_new]文件夹。
回到项目本身,如果我们要创建一个“等级销售表”文件夹,代码应该怎么写?
导入操作系统
路径=。/等级销售表/
#确定文件夹是否。/Grade Sales Table/存在,如果不存在,创建一个新的。/等级销售表/
如果不是os.path.exists(path):
os.mkdir(路径)
新建等级销售表文件夹
量
根据康明的需求,每 120 人会划分为一个等级。所以第一步我们要先确定总人数有多少,换个角度思考,其实就是要知道我们前面一直在用的列表 total_rows 有多长。
关于列表的长度,我们可以用len(list)
求得。
确定了总人数,接下来还需要结合运算的结果确定具体需要拆分成几个等级,因此在运算的时候需要用到算术运算符//
和%
。
//
用于返回除除法式子的商,可以理解为取整除。
%
则用于返回除法式子的余数,即取模
来串代码看看
print(商:, 10 // 3)print(余数:, 10 % 3)
10 除以 3,得到的商是 3,余数是 1,刚好与代码结果相符。
下面我们取 total_rows 中的前 10 项数据为例进行拆分,每 4 项分为一个等级,
cut = 4# 取出在汇总排序功能中最后得到的total_rows的一小部分数据
total_rows = [[陈洁, 销售七组, 10393, 815, 2993, 971, 1833, 889, 1128, 8629, 1], [刘波, 销售七组, 10133, 1496, 2667, 774, 1924, 315, 1142, 8318, 2], [陈涛, 销售六组, 10140, 1481, 2267, 568, 1989, 1236, 741, 8282, 3], [张华, 销售二组, 10212, 1395, 2908, 490, 1485, 1149, 837, 8264, 4], [陈伟,
销售八组, 10427, 1289, 2828, 502, 1279, 1354, 972, 8224, 5], [李冬梅, 销售六组, 10195, 326, 2946, 886, 1963, 1309, 657, 8087, 6], [杨秀兰, 销售五组, 10371, 509, 2715, 992, 1394, 1301, 1174, 8085, 7], [杨林, 销售四组, 10063, 862, 2766, 799, 1611, 964, 1077, 8079, 8], [李波, 销售一组, 10044, 1380, 2995, 886, 946, 1468, 327, 8002, 9], [李雪梅, 销售二组, 10078, 1099, 2448, 760, 1574, 1215, 889, 7985, 10]]
# 计算等级数量,先整除,得到至少需要拆分的等级数量nums
nums = len(total_rows) // cut
# 如果余数不为0,则等级数量nums+1,得到最终需要的等级数量
if len(total_rows) % cut != 0:
nums += 1
print(nums)
在上面的代码中,第 8 行是先整除计算出等级数量,第 11 到13 行,则是用于判断计算数量等级的时候是否能整除,即余数是否为 0 。如果余数不为 0 ,则等级数量加 1 ,即可得到最终需要的数量等级。
拆分数据并保存工作簿
明确了等级数量,下面开始新建工作簿,写入表头信息,遍历 total_rows 列表,但有一个新的问题,如何实现每 120 人就拆分成一个等级呢?
其实不难,就是做切片,
# 拆分为3个等级nums = 3
# 每4项为一个等级
cut = 4
# 定义列表
list_info = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 通过遍历拆分成了3个列表
for i in range(nums):
# 限定了每个列表最多有cut项
print(list_info[i*cut:(i+1)*cut])
这里第 10 行之所以乘以 cut,是因为我们想以每 4 项切分为一个等级,保证了每一次切片得到的列表最多是 4 项,list_info[i * cut: (i + 1) * cut]
分别取到了list_info[0:4]
,list_info[4:8]
,list_info[8:12]
,因为 list_info 只有 10 项,最多到list_info[9]
,因此list_info[8:12]
实际上就只是取到 list_info 列表的最后两项,得到最后一个等级列表。
回到项目中,我们做一个练习,依旧取前面用的 total_rows 列表的前 10 项,每 4 项拆分为一个等级并写进新工作表,
from openpyxl import Workbook# 每4项拆分为一个等级
cut = 4
# 总共拆成3个等级
nums = 3
# 取出在汇总排序功能中最后得到的total_rows的一小部分数据
total_rows = [[陈洁, 销售七组, 10393, 815, 2993, 971, 1833, 889, 1128, 8629, 1], [刘波, 销售七组, 10133, 1496, 2667, 774, 1924, 315, 1142, 8318, 2], [陈涛, 销售六组, 10140, 1481, 2267, 568, 1989, 1236, 741, 8282, 3], [张华, 销售二组, 10212, 1395, 2908, 490, 1485, 1149, 837, 8264, 4], [陈伟,
销售八组, 10427, 1289, 2828, 502, 1279, 1354, 972, 8224, 5], [李冬梅, 销售六组, 10195, 326, 2946, 886, 1963, 1309, 657, 8087, 6], [杨秀兰, 销售五组, 10371, 509, 2715, 992, 1394, 1301, 1174, 8085, 7], [杨林, 销售四组, 10063, 862, 2766, 799, 1611, 964, 1077, 8079, 8], [李波, 销售一组, 10044, 1380, 2995, 886, 946, 1468, 327, 8002, 9], [李雪梅, 销售二组, 10078, 1099, 2448, 760, 1574, 1215, 889, 7985, 10]]
# 按等级数量,拆分等级表
for num in range(nums):
# 新建工作表
new_wb = Workbook()
new_sheet = new_wb.active
# 写入表头
new_sheet.append([姓名, 销售小组, 工号, 牛奶/瓶, 矿泉水/瓶, 果蔬汁/瓶, 汽水/瓶, 茶饮料/瓶, 咖啡/瓶, 总计/瓶, 销售排名])
# 写入数据
for row in total_rows[num*cut:(num+1)*cut]:
new_sheet.append(row)
# 保存等级表
new_wb.save(等级{}销售表.xlsx.format(num + 1))
因为我们每次都提取出来 4 个人的销售数据,每个人的销售数据是一个单独的列表,所以按上面示例第 21 行代码切片得到的实际结果如下所示:
[['陈洁', '销售七组', 10393, 815, 2993, 971, 1833, 889, 1128, 8629, 1], ['刘波', '销售七组', 10133, 1496, 2667, 774, 1924, 315, 1142, 8318, 2], ['陈涛', '销售六组', 10140, 1481, 2267, 568, 1989, 1236, 741, 8282, 3], ['张华', '销售二组', 10212, 1395, 2908, 490, 1485, 1149, 837, 8264, 4]]
[['陈伟', '销售八组', 10427, 1289, 2828, 502, 1279, 1354, 972, 8224, 5], ['李冬梅', '销售六组', 10195, 326, 2946, 886, 1963, 1309, 657, 8087, 6], ['杨秀兰', '销售五组', 10371, 509, 2715, 992, 1394, 1301, 1174, 8085, 7], ['杨林', '销售四组', 10063, 862, 2766, 799, 1611, 964, 1077, 8079, 8]]
[['李波', '销售一组', 10044, 1380, 2995, 886, 946, 1468, 327, 8002, 9], ['李雪梅', '销售二组', 10078, 1099, 2448, 760, 1574, 1215, 889, 7985, 10]]
嵌套的列表并不适合写进新工作表,第 20-22 行增加遍历是为了获取到每个人单独的销售数据也就是单独的小列表,然后再写进新工作表。
最后用 num+1 是因为我们要从等级1开始往后排,而不是从等级 0 开始。
重新看一下,康明在保存为【等级x销售表.xlsx】的时候,x 用的是中文数字,而不是我们项目中的阿拉伯数字。因此引出我们要学习的一个最后一个新知识点——cn2an.an2cn()
,这个用法是很容易的。
在电脑本地运行的时候需要提前安装 cn2an 模块。我们使用pip在cmd/终端中进行安装。
# Windows系统:pip install cn2an
# Mac系统:
pip3 install cn2an
import cn2annum1 = 101
num2 = 三百六十九
# 将num1转成中文数字
num1_new = cn2an.an2cn(num1)
# 讲num2转成阿拉伯数字
num2_new = cn2an.cn2an(num2)
print(num1_new)
print(num2_new)
可以看到 101 转换成了一百零一,三百六十九转换成了 369。因此在项目中要想把【等级x销售表.xlsx】中的x换成中文数字,其实就是把保存文件夹代码中的 num+1 先用 cn2an.an2cn() 做转换。
总结
以上,就是功能二的相关知识点,让我们来用思维导图来总结一下吧。
到此这篇关于用Python实现等级划分的文章就介绍到这了,更多相关Python等级划分内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。