【办公类-51-01】月评估数字生成01-平均数空值

news2024/7/4 5:17:57

期末需要制作月评估,每月给孩子的能力水平打分。

以前我是做在EXCEL里,手动打分,然后用公式计算1、2、3出现的个数,然后计算平均数,最后复制到Word里。

因为是手动计算,每次都要算很长时间,确保逐月的分数平均值增加

第1个月是1.0-1.5,第2个月在1.5-2.0之间,,第3个月在2.0-2.5,第4个月在2.5-3.0之间

于是我想,是否可以用Python自动按照比例在指定的Word单元格里输入1,2,3数字,并计算个数和平均值。。

经过三天实验,终于作出了一份

素材准备:

word第一页是评估表、第二页是参考目标,第三页是分页符生成的一个空行回车

代码展示

# -*- coding: utf-8 -*-

'''
目的:自动生成2-6月幼儿能力评估的打分(按比例生成) 1-12 13-14
工具:星火讯飞,阿夏
时间:2024年6月22日
'''

import os
import random
from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.shared import Pt
from docx.enum.text import WD_UNDERLINE

date=['2、3','4','5','6']
# 抽取比例比如1抽取60%,2抽取40%、3抽取0%
bl=[[60,40,0],[40,50,10],[20,60,20],[0,20,80]]

wz=['孩子们大部分思维活跃,因此在区角活动中明显发现与动手操作活动中的活跃气氛相比,幼儿对于安静的活动(扣扣子、夹豆子、阅读)等兴趣不高,主动参与图书阅读活动的幼儿不多,很多幼儿快速翻完书本后就使用书作为道具开展其他动作游戏的道具,对于画面的解读能力偏弱,会对幼儿的逻辑思维、语言表达能力产生不利影响。因此我们以“小青蛙故事比赛”为契机,家园合作引导幼儿进行书本阅读和看图编故事的活动。孩子们都愿意通过阅读,结合动作、语言、歌曲进行表演活动,我们将继续引导幼儿开展相关阅读表演活动。',
'本月我们通过《周围的人》《幼儿园里朋友多》等主题引导孩子认识社会,在社会实践、家园共育、教育教学等活动下,孩子们逐渐积累关于周围各种不同职业的人的特点和相关信息,提高孩子对成人职业的认识。让幼儿了解社会成员的工作与我们的关系,并尊重他们的劳动。关心、热爱、尊重周围的人们。本月幼儿对自主午餐活动非常兴趣,他们尝试自己取碗筷、盛饭盛菜,这些都让孩子们感到很新奇。“老师你看我把自己盛的饭菜都吃光了!”自主午餐对中班孩子来说是非常有利的。',
'部分孩子在与同伴交往过程中产生了矛盾冲突,产生了愤怒、暴躁、倾诉等行为;部分孩子的情绪容易兴奋,难以迅速平静下来;部分孩子在因为他人的评价而产生自卑感……中班幼儿期是情绪发展最迅速和最关键的时期,面对全体幼儿不同的情绪问题,本学期我们将使用paths情绪课程来引导幼儿建立正确的情绪自我评价意识。本月引导幼儿正确认识正面和负面情绪,接受自己的情绪变化,并在情景中感知面对自己的各种情绪该如何处理才最恰当。很多孩子通过经验回忆,描述了自己对生气、愤怒、狂笑等情绪的体验,通过讨论梳理出一些应对方法。',
'本月对孩子们发展目标进行了观察和统计,除了一些长期病假的孩子以外,其他的孩子的数值都在原有基础有所提高,特别是阅读兴趣、情绪管理、自我服务的能力有了明显的提升,孩子们对于在人际关系中常见的“和朋友吵架了怎么办?”有了许多自己独特的解决方法。同时也发现个别特殊儿童的生活自理(自主午餐、自我服务)、手脑协调、语言表达能力都有明显的提高。下学期,我们将在关注幼儿集体发展的基础上,继续关注个别幼儿的发展情况,帮助幼儿个性化成长。'
]
print(len(wz))
# path=r'C:\Users\jg2yXRZ\OneDrive\桌面\月评估'
for num in range(5):
    for x in range(len(bl)):
        # 缺的学号
        q=[1,7]
        # 评价条数 确保表格有足够多的行数
        bs=['0315','1516']    # 2-14列
        # 人数,确保表格有足够多的行数
        r=31
        # b=[]

    
        def delete_numbers(table, row_start, col_start, col_end):
            for cell in table.rows[row_start - 1].cells[col_start - 1:col_end]:
                cell.text = ""

        def fill_random_numbers(table, row_start, row_end, col_start, col_end):
            for row in table.rows[row_start - 1:row_end]:
                for cell in row.cells[col_start - 1:col_end]:
                    cell.text = str(random.choices([1, 2,3], weights=[bl[x][0],bl[x][1],bl[x][2]], k=1)[0])
                    paragraph = cell.paragraphs[0]
                    paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER

        def count_ones(table, row_start, col_start, row_end):
            count = 0
            for row in table.rows[row_start - 1:row_end]:
                cell = row.cells[col_start - 1]
                if cell.text == "1":
                    count += 1
            return count

        def count_twos(table, row_start, col_start, row_end):
            count = 0
            for row in table.rows[row_start - 1:row_end]:
                cell = row.cells[col_start - 1]
                if cell.text == "2":
                    count += 1
            return count

        def count_threes(table, row_start, col_start, row_end):
            count = 0
            for row in table.rows[row_start - 1:row_end]:
                cell = row.cells[col_start - 1]
                if cell.text == "3":
                    count += 1
            return count

        def calculate_average(table, row_start, col_start, row_end):        
            total = 0
            count = 0
            for row in table.rows[row_start - 1:row_end]:
                cell = row.cells[col_start - 1]
                if cell.text != "":
                    total += float(cell.text)  # 将文本转换为浮点数进行计算
                    count += 1
            
                else:
                    pass
            return round(total / count, 1)
        
        def calculate_average(table, row_start, col_start, row_end, clear_cells=False):
            total = 0
            count = 0
            for row in table.rows[row_start - 1:row_end]:
                cell = row.cells[col_start - 1]
                if cell.text != "":
                    total += float(cell.text)  # 将文本转换为浮点数进行计算
                    count += 1
                else:
                    pass

            average = round(total / count, 1)
            
            total=0
            count=0
        
            return average





        def main():
            import time
            path=r'C:\Users\jg2yXRZ\OneDrive\桌面\月评估'
            input_file = path+r"\模板 月评估.docx"

            new_folder=path+r'\零时文件夹'       
            os.makedirs(new_folder, exist_ok=True)
            
            output_file=new_folder+fr"\{x}.docx"

            # 读取输入文件
            doc = Document(input_file)

            # 获取第一个表格
            table = doc.tables[0]

            # 插入文字
            # 在指定的单元格(23,0)里插入文字
            cell = table.cell(r+6-1, 2)  # 注意索引从0开始,所以需要减1
            # 在单元格中写入文字
            cell.text ='    '+wz[x]

                # 获取第二段 插入月份
            paragraph = doc.paragraphs[1]

            
            # 在段落中添加文本和下划线
            run1 = paragraph.add_run("  "+date[x]+" ")
            run1.font.underline = WD_UNDERLINE.SINGLE
            run2 = paragraph.add_run(" 月 ")
            run3 = paragraph.add_run("   中(4) ")
            run3.font.underline = WD_UNDERLINE.SINGLE
            run4 = paragraph.add_run("班")   

            for  b in bs:
                
                b1=int(b[0:2])
                b2=int(b[2:4])               


                # paragraph.text = new_text

                # 单元格(table, 第2行, 第32行, 第10列, 第14列)
                # 填充随机数字
                fill_random_numbers(table, 2, r+1, b1, b2)

                # 删除第一行中第2格子到第17格子里面的数字
                for qq in q:
                    delete_numbers(table, qq+1, 2, b2+1)

                # 计算个数
                # 遍历每一列,统计数字1的个数并填入对应的单元格
                for col in range(b1, b2+1):
                    total_ones = count_threes(table, 2, col, r+2)
                    cell = table.cell(r+2-1, col-1)
                    cell.text = str(total_ones)
                    paragraph = cell.paragraphs[0]
                    paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER

                # 遍历每一列,统计数字1的个数并填入对应的单元格
                for col in range(b1, b2+1):
                    total_ones = count_twos(table, 2, col, r+3)
                    cell = table.cell(r+3-1, col-1)
                    cell.text = str(total_ones)
                    paragraph = cell.paragraphs[0]
                    paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER

                # 遍历每一列,统计数字1的个数并填入对应的单元格
                for col in range(b1, b2+1):
                    total_ones = count_ones(table, 2, col, r+4)
                    cell = table.cell(r+4-1, col-1)
                    cell.text = str(total_ones)
                    paragraph = cell.paragraphs[0]
                    paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER

                

               

                
                # 计算平均值
                # 在 main() 函数中添加以下代码:
                for col in range(b1, b2+1):
                    # 计算指定范围内单元格的平均值
                    average = calculate_average(table, 2, col, r-1)
                    # 获取要写入平均值的单元格
                    cell = table.cell(r+5-1, col-1)
                    # 将平均值转换为字符串并写入单元格
                    cell.text = str(average)
                    # 获取单元格中的段落对象
                    paragraph = cell.paragraphs[0]
                    # 设置段落居中对齐
                    paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER
            

            # 保存为新文件
            doc.save(output_file)
        
        if __name__ == "__main__":
            main()


    print('---4、合并文档--')
    import os,time
    import shutil
    from docx import Document
    path=r'C:\Users\jg2yXRZ\OneDrive\桌面\月评估'
    new_folder=path+r'\零时文件夹' 
    os.makedirs(new_folder,exist_ok=True)


    output_file = path+fr"\{num:02d}中4班 月评估(202402-202406).docx"
    output_doc = Document(new_folder+r'\0.docx')   

    files = os.listdir(new_folder)
    for index, file in enumerate(files):
        if file.endswith(".docx") and index != 0:
            input_file = os.path.join(new_folder, file)
            input_doc = Document(input_file)
            # output_doc.add_page_break()  # 添加换页符
            
            for element in input_doc.element.body:    
                output_doc.element.body.append(element)


    # 获取文档的段落数量  删除最后一段
    num_paragraphs = len(output_doc.paragraphs)
    if num_paragraphs > 0:
        output_doc.paragraphs[num_paragraphs - 1]._element.getparent().remove(output_doc.paragraphs[num_paragraphs - 1]._element)


    time.sleep(2)
    output_doc.save(output_file)



我对4个月的数据,进行比例抽取(1-12列、13-14列分别抽取)

结果发现第1个月和最后一个月里,13-14列的平均值并没有比1-12的平均值小。所以我生成了5份。从里面找了一份相对适合的。

这份月评估生成时间很长很长,一份就可以生成5分钟。

最后只找出第5份的平均数相对符合要求

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1859948.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

借助TheGraph 查询ENS信息

关于ENS (以太坊域名服务) ENS 全称是 Ethereum Name Service,它是一个建立在以太坊区块链上的去中心化域名系统。 ENS 在 Web3 领域发挥着重要作用,主要有以下几个方面: 可读性更好的地址: ENS 允许用户将复杂的以太坊地址(如 0x12345…) 映射为更简单易记的域名。这极大地提…

KUBIKOS - Animated Cube Mini BIRDS(卡通立方体鸟类)

软件包中添加了对通用渲染管线 (URP) 的支持! KUBIKOS - 动画立方体迷你鸟是17种不同的可爱低多边形移动友好鸟的集合!每只都有自己的动画集。 完美收藏你的游戏! +17种不同的动物! + 低多边形(400~900个三角形) + 操纵和动画! + 4096x4096 纹理图集 + Mecanim 准备就绪…

生命在于学习——Python人工智能原理(4.3)

三、Python的数据类型 3.1 python的基本数据类型 3.1.4 布尔值(bool) 在Python中,布尔值是表示真或假的数据类型,有两个取值,True和False,布尔值常用于控制流程、条件判断和逻辑运算,本质上来…

项目实训-接口测试(十八)

项目实训-后端接口测试(十八) 文章目录 项目实训-后端接口测试(十八)1.概述2.测试对象3.测试一4.测试二 1.概述 本篇博客将记录我在后端接口测试中的工作。 2.测试对象 3.测试一 这段代码是一个单元测试方法,用于验证…

idea 开发工具properties文件中的中文不显示

用idea打开一个项目,配置文件propertise中的中文都不展示,如图: 可修改idea配置让中文显示: 勾选箭头指向的框即可,点击应用保存,重新打开配置文件,显示正常

篮球联盟管理系统

管理员账户功能包括:系统首页,个人中心,管理员管理,球员管理,用户管理,球队管理,论坛管理,篮球资讯管理,基础数据管理 前台账户功能包括:系统首页&#xff0…

Cell2Sentence:为LLM传输生物语言

像GPT这样的LLM在自然语言任务上表现出了令人印象深刻的性能。这里介绍一种新的方法,通过将基因表达数据表示为文本,让这些预训练的模型直接适应生物背景,特别是单细胞转录组学。具体来说,Cell2Sentence将每个细胞的基因表达谱转换…

前端架构(含演进历程、设计内容、AI辅助设计、架构演进历程)

前端架构的演进历程 前端架构师的必要条件 全面的技术底蕴全局观(近期 远期)业务要有非常深刻的理解沟通协调能力和团队意识深刻理解前端架构的原则和模式 前端架构的设计内容 技术选型(库、工具、标准规范、性能、安全、扩展性 )设计模式及代码组织(模…

ADS SIPro使用技巧之RapidScan-Z0

PCB走线的阻抗对每个网络的信号完整性至关重要,但是,验证每个信号是不切实际的,尤其对于设计复杂度很高的产品而言,设计者的有限精力只能用于关注关键的设计点,这一过程往往会造成一些设计的疏忽从而导致错误。 ADS SI…

97. 交错字符串(leetcode)

97. 交错字符串(leetcode) 题目描述 给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串: s s1 …

图书管理系统(详解版 附源码)

目录 项目分析 实现页面 功能描述 页面预览 准备工作 数据准备 创建数据库 用户表 创建项目 导入前端页面 测试前端页面 后端代码实现 项目公共模块 实体类 公共层 统一结果返回 统一异常处理 业务实现 持久层 用户登录 用户注册 密码加密验证 添加图书…

串口小工具(来源网络,源码修改)

从CSDN 中的一位博主的分享做了一些修改 QtSerial 的配和更稳定些 信号和槽 … … 更不容易崩 # This Python file uses the following encoding: utf-8 import sys import timefrom PySide6.QtGui import QIcon, QTextCursor from PySide6.QtWidgets import QApplication, QWi…

【PyQt5】一文向您详细介绍 layout.addWidget() 的作用

【PyQt5】一文向您详细介绍 layout.addWidget() 的作用 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介:985高校的普通本…

el-dialog el-select适配移动端

一、el-dialog 2024.06.20今天我学习了如何对el-dialog弹窗适配移动端展示,效果如下: 代码如下: media screen and (min-width: 220px) and (max-width: 600px) {::v-deep .el-dialog {width: 95% !important;} } 二、el-select 代码如下…

技术革命背后的新功能发布:探索Facebook创新

随着技术的飞速发展和社交媒体的普及,Facebook作为全球最大的社交平台之一,不断推出新的功能和服务,以满足用户的需求和提升用户体验。这些新功能不仅仅是技术进步的体现,更是Facebook在竞争激烈的数字化时代中保持领先地位的关键…

CANFD每秒最多可以发送多少帧报文?CAN FD结构详解

我们知道CANFD比CAN拥有更长的数据长度(最长64字节),更高的波特率(8Mbps甚至更高)。那么波特率更高,数据更长的CANFD,一秒钟最高可以发送多少帧CANFD报文呢? 想知道问题的答案&#…

C++结构体内存对齐规则

背景介绍 最近在使用Java语言写一个Java客户端,对接一个C/C语言编写的Server时,采用TCP协议进行通信,在将C结构体序列化的输出流转换为Java结构体时,需要按照结构体每个字段对应的字节长度截取字节流转换为Java类型,遇…

2024国际数字能源展,推动全球能源产业转型升级和可持续发展

随着全球对能源安全和可持续发展的日益关注,数字能源技术作为推动能源革命的重要力量,正逐步成为国际能源领域的新热点。2023年6月29日至7月2日,深圳会展中心成功举办了全球首个以数字能源为主题的2023国际数字能源展,这一盛会的成…

ET实现游戏中邮件系统逻辑思路(服务端)

ET是一个游戏框架,用的编程语言是C#,游戏引擎是Unity,框架作者:熊猫 ET社区 在游戏中我们通常都会看到有邮件系统,邮件系统的作用有给玩家通知、发放奖励等 下面小编使用ET框架带大家看一下邮件系统的一种实现方…

新型基坑气膜:施工开挖的得力干将—轻空间

随着城市建设的加速推进,施工过程中的环境问题日益受到关注。新型基坑气膜以其卓越的防尘、降噪、节能和防火功能,成为施工开挖领域中的得力干将,极大地提升了绿色施工的水平。 基坑气膜的作用 基坑气膜在施工现场形成了一个完全封闭的作业空…