【办公类-16-07-02】家园沟通-随机名单(python 排班表系列)

背景需求:

下周我就是中班的班主任了,由于内向少沟通的性格,家园沟通一直困扰我的薄弱项目。为此我决定对28位幼儿进行每月1次的家长微信联系沟通(交流孩子的情况、优势、不足等,让家长知道老师关心幼儿的成长)

为了不遗漏孩子,需要对28个数字进行随机抽取,打乱排序,确保3月、4月、5月、6月,每月都有1次微信沟通的机会

代码展示-word版


'''
作者:阿夏
时间:2023年6月
需求:家园沟通确保每周都能微信沟通,保证每个人都沟通到
一学期20周,共28人,3-6月4个月每月4周=16周
平均一周聊7个孩子,4周2正好28人。
'''
import random
import docx
from docx import Document
from docx.shared import Pt 
from docx.shared import RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qn
# 设置基本模板
doc = docx.Document()# 打开带页脚的docx模板(样板要输入数据 才能被保存,)
doc.add_paragraph('中X班每月家园联系的对象(2023.3-6)')     # 把内容按段落输入到doc这个docx文件内
doc.add_paragraph('')     # 把内容按段落输入到doc这个docx文件内
# 学号的列表
list=[]
for s in range(1,29):
    n='学号'+str('%02d'%s) 
    list.append(n)
# print(list)
# print(len(list))

# 每月固定练习,月上第1周联系1-7号,
r=int(len(list)/4)
t1=[]
for t in range(4):    # 每月4周
    t1.append(list[t*r:t*r+r])
# print(t1)
# [['学号01', '学号02', '学号03', '学号04', '学号05', '学号06', '学号07'], 
# ['学号08', '学号09', '学号10', '学号11', '学号12', '学号13', '学号14'], 
# ['学号15', '学号16', '学号17', '学号18', '学号19', '学号20', '学号21'], 
# ['学号22', '学号23', '学号24', '学号25', '学号26', '学号27', '学号28']]


# 打乱联系人
for y in range(3,7):    # 3-6月,一共四个月
    t1.clear()
    a1 =random.sample(list, 28)
    # print(a2)   # ['10', '5', '8']现在是字符串格式
    # print(a1)
    
    t2=[]
    t3=[]
    for t in range(4):    # 每月4周
        t1.append(a1[t*7:t*7+7])
    # print(t1)
    # 抽取七个七个组合在一起[['学号12', '学号26', '学号07', '学号22', '学号10', '学号24', '学号25'], ['学号20', '学号18', '学号01', '学号13', '学号11', '学号23', '学号08'], ['学号19', '学号02', '学号28', '学号09', '学号05', '学号03', '学号21'], ['学号17', '学号14', '学号15', '学号16', '学号27', '学号04', '学号06']]

        for t2 in t1:        # 遍历[[],[],[]]的每一个[]
            t2.sort()          # 升序排列小到大
        print('{}月第{}周:{}'.format(y,t+1,t2))         # ['学号01', '学号08', '学号10', '学号12', '学号14', '学号22', '学号28']['学号01', '学号08', '学号11', '学号13', '学号18', '学号20', '学号23']
        
        w='{}月第{}周:{}'.format(y,t+1,t2)
  
        # 写入word
        



        
        # “题目docx”和“题目+答案word”都需要同样的格式设置,把设置部分做一个函数体,便于调用。
        # for l in range(len(w)):     # 用k 在selectList3的列表值(40题*N)内遍历
            # print(k)     # 打印遍历的内容
        doc.add_paragraph(w)     # 把内容按段落输入到doc这个docx文件内
        doc.add_paragraph(' ')     # 把内容按段落输入到doc这个docx文件内
        # CSDN博主「编程亿直爽」
        # 字体这一段一定要再写一次
        for paragraph in doc.paragraphs:
            for run in paragraph.runs:             
                run.font.size = Pt(22)                # 数字题目字体大小
                run.font.bold = False                    #数字题目字体是否加粗 不加粗,5*8再加粗比较满,压抑了
                run.font.name = 'Arial'           # 控制是英文时的字体
                run.element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')  # 控制数字是中文时的字体
                paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 设置数字页眉居中对齐
                # paragraph.paragraph_format.line_spacing=2.5 #数字中文字的段行距
                paragraph.paragraph_format.line_spacing = Pt(50) #数字段间距

        # 设置主要页边距 5
        from docx.shared import Cm # 导入cm模块
        doc.sections[0].top_margin = Cm(1)# sections[1]是第二节=第二页 上边距
        doc.sections[0].bottom_margin = Cm(1)# sections[1]是第二节=第二页 下边距
        doc.sections[0].left_margin = Cm(1) # sections[1]是第二节=第二页 左边距
        doc.sections[0].right_margin = Cm(1.5)# sections[1]是第二节=第二页 右边距
        # 设置其他页边距 
        doc.sections[0].gutter=Cm(0)# sections[1]是第二节=第二页 装订线 默认为0 左
        doc.sections[0].header_distance=Cm(0.8)# sections[1]是第二节=第二页 页眉边距
        doc.sections[0].footer_distance=Cm(1.3)# sections[1]是第二节=第二页 页脚边距
        # 装订线还有一个位置属性,暂时未发现如何设置,默认为左,如果需求设置成右,可以建个模板docx文档导入。

        # 设置纸张方向和大小  LANDSCAPE=横  PORTRAIT纵  默认信纸 纵
        from docx.shared import Cm # 导入CM # 
        from docx.enum.section import WD_ORIENTATION  # 导入纸张方向
        doc.sections[0].page_height = Cm(21)  # 设置A4纸的高度
        doc.sections[0].page_width = Cm(29.7)  # 设置A4纸的宽
        doc.sections[0].orientation = WD_ORIENTATION.LANDSCAPE # 设置纸张方向为横向 L 

        # 设置分栏 如果不要,就把数字该为为1
        from docx.oxml.ns import qn
        doc.sections[0]._sectPr.xpath('./w:cols')[0].set(qn('w:num'), '1') #把第二节页设置为2栏

        # 设置页眉和页脚
        from docx.enum.text import WD_PARAGRAPH_ALIGNMENT# 导入文本居中 居左、居右
        from docx.shared import Pt 


doc.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\家园沟通表.docx') #保存才能看到结果



    

研究亮点:

sort 排序

确保28随机抽取的数字,切割位7个数字一组,7数字一组里面的数字也从小到大排序。

word 随机抽取的联系名单展示。

存在问题:

  1. word阅读起来一长串,最好还是用EXCLE做

  1. 用EXCEL,最好具体到周次、日期、星期,学号填入专门的单元格(1周7天,每天联系1个人)

  1. 单元格下面有空行,可以打钩说明联系过了。

后续写入EXCEL代码设计

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿夏reasonsummer

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

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

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

打赏作者

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

抵扣说明:

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

余额充值