【 办公类-03】 VS Python 大8班“运动场地”的周次安排。

21 篇文章 0 订阅

办公需求:

开学了,周计划教案的模板又要调整了。其中“分散活动”的内容需要按一定排序规律,每周填入不同的场地。

为了避免每个班级每天用的场地产生重复,组长制定了场地安排规则

以大八班为例,

1.第1周(周一到周五)的场地:

“8号对战投投乐”“”1号场地山洞大冒险““2号场地小小交通车””“3号场地爬龙接力赛”和“4号百变小能手”

2.第2周(周一到周五)的场地:

”1号场地山洞大冒险““2号场地小小交通车””“3号场地爬龙接力赛”和“4号百变小能手”“5号平衡小勇士”“

2.第3周(周一到周五)的场地:

““2号场地小小交通车””“3号场地爬龙接力赛”和“4号百变小能手”“5号平衡小勇士”“”6号跑跳小达人‘

依次类推……

操作需求:

作为周计划中相对固定有规律的填写内容,我会首先考虑将它们填写完成。但是通知中只有两条提示“第一周81234,第二周12345”,实际填写中,我还是需要按周次把场地数字一一写出来(写出20周的5组数字),然后按索引去拷贝相应的填写内容……在学习了Python后,我再也不想手动完成这类机械的工作。

实践过程:

第一步:个人尝试

我套用风变编程基础课的“轮流排座位“代码,写出了大8班的20周每周5天的场地排序列表。(下图)

问题:但是用已知方法都无法把终端里生成的值保存的TXT或者excel里。

二、高手指导

无奈之下,只能再次求助马先生。马先生用两天时间20220219-20220220陆续写了六个py代码。将全部8个班级20周的场地随机、样式随机、班号、周次等信息逐行保存,使用map、zip、enumerate等参数,成功将数据保存到不同抬头的xls内。

 问题:六款代码使用和反复引用列表,让我对马先生的高超的编程技术叹为观止。虽然我也尝试注释,但短时间内还是吃不透原理,不会应用。

第三步:套用保存部分代码

于是我尝试直接将马先生代码的“xls保存”部分的代码套用到“轮流排座位”的代码里,希望能让终端里的列表值逐行导入到excel,便于黏贴到周计划教案模板的相应位置。

马先生的代码太使用了。经过微调,就顺利获得了一个班级(大8班)的20周运动场地的excel结果。

1.代码(第一种保存方法)

import sys
import random
import xlrd
import xlwt
from openpyxl import load_workbook
# # list2=int(input('你班级第1周第1天的运动场地数字(不同班级不同的起始数字'))

# 作者:阿夏
# 第一步:大八班运动项目的范围 对战投投乐=8,山洞大探险=1,大8第1周周一从“战投投乐”开始,所以list内把对战投投乐放在第一个。
list=['对战投投乐(弹力球 吸盘球 飞镖盘)','山洞大探险(滑索、轮胎、水桶)',
        '小小交通车(指示牌、各种车类)','爬笼接力赛(爬笼树屋、书包铃铛)',
        '百变小能手(小足球、垫子、马甲)','平衡小勇士(竹梯、三脚架、垫子等)',
        '跑跳小达人(轮胎、跨栏、接力棒','勇敢者道路(背篓、布袋、小动物)']
# list=['a','b','c','d','e','f','g','h']# 八个场地八个班
# 以下选取每周5个
list2=[]# 取空列表
for i in range(1):#共20周这是第1周,是原始的位置81234
        list1=list
        print(list[0:5]) # 列表有8个运动项目,但只要其中5个(周一到周五)
        list2.append(list[0:5])
for i in range(2,21):  #共20周    这是第2-20周  ,如果是21周,把2,21 改成2,22 
        list1=list[0] # 获取第一个a
        list=list[1:]  #  a暂时离开,后面的号码都进一位。
        list.append(list1) # 将a安排到最后一个座位
        print(list[0:5]) # 列表是八个循环,我只要其中5个
        list2.append(list[0:5])  

# 以下是xls保存(作者:马清新)
arrlan = len(list2)# list2是终端显示的列表值
workbook = xlwt.Workbook()# 新建xls工作簿
sheet = workbook.add_sheet("Sheet")# 新建xls工作簿的工作表的名字是sheet

row = 21 # 共20周 写21行才会只出20条,若row = 0时,excel循环保存400条
for k in range(arrlan): 
    for i,item in enumerate(list2,0):  # 没有list2[k] 的K,就不会被拆分成一个字一个字  i=键lists item=0  
#        print(i)
#        print(item)
        if k == 0:  # 从0行开始写入
            for j,value in enumerate(item,0):
                # j=item
                print(i,j,value)
                sheet.write(i,j,value)
            row += 1             
        else:                
            for j,value in enumerate(item,0):
            #    if value in list2[k][0]:
            #        pass
            #    else:
                #    print(row,j,value)
                sheet.write(row,j,value)
            row += 1            # 每段都有抬头
    #本段只保存每周5天场地文字,第一行没有星期,第一列没有周次和班级
            
try:
    workbook.save(r"D:\test\分散运动的循环\大8班分散运动.xls") # 新建保存 只能xls
    print('计划生成成功')
except e:
    print('失败...')
    print(e)

第二种xls保存方法(简化代码 推荐使用)

import sys
import random
import xlrd
import xlwt
from openpyxl import load_workbook
# # list2=int(input('你班级第1周第1天的运动场地数字(不同班级不同的起始数字'))

# 第一步:大八班运动项目的范围 对战投投乐=8,山洞大探险=1,大8第1周周一从“战投投乐”开始,所以list内把对战投投乐放在第一个。
list=['对战投投乐(弹力球 吸盘球 飞镖盘)','山洞大探险(滑索、轮胎、水桶)',
        '小小交通车(指示牌、各种车类)','爬笼接力赛(爬笼树屋、书包铃铛)',
        '百变小能手(小足球、垫子、马甲)','平衡小勇士(竹梯、三脚架、垫子等)',
        '跑跳小达人(轮胎、跨栏、接力棒','勇敢者道路(背篓、布袋、小动物)']
# list=['a','b','c','d','e','f','g','h']# 八个场地八个班
# 以下选取每周5个
list2=[]# 取空列表
for i in range(1):#共20周这是第1周,是原始的位置81234
        list1=list
        print(list[0:5]) # 列表有8个运动项目,但只要其中5个(周一到周五)
        list2.append(list[0:5])
for i in range(2,21):  #共20周    这是第2-20周  ,如果是21周,把2,21 改成2,22 
        list1=list[0] # 获取第一个a
        list=list[1:]  #  a暂时离开,后面的号码都进一位。
        list.append(list1) # 将a安排到最后一个座位
        print(list[0:5]) # 列表是八个循环,我只要其中5个
        list2.append(list[0:5])  

# 以下是xls保存的简化方法
arrlan = len(list2)# list2是终端显示的列表值
workbook = xlwt.Workbook()# 新建xls工作簿
sheet = workbook.add_sheet("Sheet")# 新建xls工作簿的工作表的名字是sheet

row = 0# 保存的简化方法
for i in range(arrlan):
    for col,item in enumerate(list2[i],0):
            sheet.write(row,col,item)  
    row += 1
            
try:
    workbook.save(r"D:\test\分散运动的循环\大8班分散运动.xls")    # 新建保存 只能xls
    print('计划生成成功')
except e:
    print('失败...')
    print(e)

2.xls的结果(只有20周每行5个运动项目)

  3.xls的手工验证

 手工验证表的蓝色部分 第1周“对 山 小 爬 百”  第20周“爬 百 平 跑 勇”与 大8班分散运动的蓝色部分 第1周“对 山 小 爬 百”  第20周“爬 百 平 跑 勇敢”内容完全一直,证明这个代码跑出来的数据符合场地安排规则表的要求

不足之处:代码只能生成1个班(大8班),要替换其他班级,就要手工修改list=【‘’】中场地的位置,这点需要优化。

end

下一步要解决的内容:

1、“轮流排座位”的代码基础上:

(1)xls表格有班级号及周次

(2)输入“大1班” ,获得符合大1班需求的‘大1班分散运动.xls'

(3)批量生成大1-8的所有xls(分开的或者在一份表格里。)

解决:参考马的六个代码

2、马的六个代码原理解读、运用

3、把list列表里的内容通过xls进行调用的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿夏reasonsummer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值