word文档的读入(7)

news2024/11/24 14:13:24

获取了标准答案和学生答案后,就可以计算每位同学的填空题分数啦。
我们将分数累加studentData字典里的scoreTwo键中。
需要注意的是,使用这个键之前,必须先在第一个for循环里和第二个for循环外,对它进行初始化赋值为0,这样才能保证每位同学的起始分数都是0。

# 使用import导入os模块

import os

# 使用import导入docx

import docx

# 第二大题填空题标准答案

standardTwo = ["东临碣石", "行舟绿水前", "孤山寺北贾亭西", "断肠人在天涯", "故人具鸡黍", "一曲新词酒一杯", "何当共剪西窗烛", "误入藕花深处", "烟笼寒水月笼沙", "万籁此都寂", "初日照高林", "腾蛇乘雾"]

# 将乔老师的答题卡文件夹路径 /Users/qiao/answerKey 赋值给变量allKeyPath

allKeyPath = "/Users/qiao/answerKey"

# 使用os.listdir()函数获取该路径下所有的文件,并赋值给变量allItems

allItems = os.listdir(allKeyPath)

# 定义一个空列表allStudentsData存储所有学生数据

allStudentsData = []

# 使用for循环逐个遍历所有学生答题卡

for item in allItems:

    # 定义一个空字典studentData存储单个学生数据

    studentData = {}

   

    # 使用os.path.splitext()函数获取文件名的前半段,并赋值给变量fileName

    fileName = os.path.splitext(item)[0]

    # 使用split()函数以"-"分隔文件名,将第1部分班级信息赋值到学生数据字典的classInfo键里

    studentData["classInfo"] = fileName.split("-")[0]

    # 使用split()函数以"-"分隔文件名,将第2部分姓名信息赋值到学生数据字典的name键里

    studentData["name"] = fileName.split("-")[1]

   

    # 使用os.path.join()函数拼接出答题卡路径,并赋值给变量keyPath

    keyPath = os.path.join(allKeyPath, item)

    # 读取答题卡并赋值给变量doc

    doc = docx.Document(keyPath)

    

    # 读取第四段学号段,并赋值给变量idPara

    idPara = doc.paragraphs[3]

    # 读取学号段中第二个样式块,并赋值给变量idRun

    idRun = idPara.runs[1]

    # 读取学号,并赋值到学生数据字典的id键里

    studentData["id"] = idRun.text

    # 初始化学生数据字典里scoreTwo字段为0分,作为填空题分数

    studentData["scoreTwo"] = 0

    # 使用for循环和enumerate()函数

    # 遍历储存标准答案的列表standardTwo的同时

    # 生成一个从8开始的idx

    for idx,value in enumerate(standardTwo, 8):

        # 获取学生答案,并赋值给变量studentAnswerTwo

        studentAnswerTwo = doc.paragraphs[idx].runs[1].text

           

    # 使用append()函数

    # 将studentData添加到总学生数据allStudentsData中

    allStudentsData.append(studentData)

完善代码

现在只需使用if语句将学生答案studentAnswerTwo和标准答案value进行比较。
填空题一道题5分,答案正确时,我们就给学生填空题分数加5分。具体代码如下:

# 使用import导入os模块

import os

# 使用import导入docx

import docx

# 第二大题填空题标准答案

standardTwo = ["东临碣石", "行舟绿水前", "孤山寺北贾亭西", "断肠人在天涯", "故人具鸡黍", "一曲新词酒一杯", "何当共剪西窗烛", "误入藕花深处", "烟笼寒水月笼沙", "万籁此都寂", "初日照高林", "腾蛇乘雾"]

# 将乔老师的答题卡文件夹路径 /Users/qiao/answerKey 赋值给变量allKeyPath

allKeyPath = "/Users/qiao/answerKey"

# 使用os.listdir()函数获取该路径下所有的文件,并赋值给变量allItems

allItems = os.listdir(allKeyPath)

# 定义一个空列表allStudentsData存储所有学生数据

allStudentsData = []

# 使用for循环逐个遍历所有学生答题卡

for item in allItems:

    # 定义一个空字典studentData存储单个学生数据

    studentData = {}

   

    # 使用os.path.splitext()函数获取文件名的前半段,并赋值给变量fileName

    fileName = os.path.splitext(item)[0]

    # 使用split()函数以"-"分隔文件名,将第1部分班级信息赋值到学生数据字典的classInfo键里

    studentData["classInfo"] = fileName.split("-")[0]

    # 使用split()函数以"-"分隔文件名,将第2部分姓名信息赋值到学生数据字典的name键里

    studentData["name"] = fileName.split("-")[1]

   

    # 使用os.path.join()函数拼接出答题卡路径,并赋值给变量keyPath

    keyPath = os.path.join(allKeyPath, item)

    # 读取答题卡并赋值给变量doc

    doc = docx.Document(keyPath)

   

    # 读取第四段学号段,并赋值给变量idPara

    idPara = doc.paragraphs[3]

    # 读取学号段中第二个样式块,并赋值给变量idRun

    idRun = idPara.runs[1]

    # 读取学号,并赋值到学生数据字典的id键里

    studentData["id"] = idRun.text

    # 初始化学生数据字典里scoreTwo字段为0分,作为填空题分数

    studentData["scoreTwo"] = 0

    # 使用for循环和enumerate()函数

    # 遍历储存标准答案的列表standardTwo的同时

    # 生成一个从8开始的idx

    for idx,value in enumerate(standardTwo, 8):

        # 获取学生答案,并赋值给变量studentAnswerTwo

        studentAnswerTwo = doc.paragraphs[idx].runs[1].text

        # 判断当学生答案与标准答案相等时

        if studentAnswerTwo == value:

            # 当学生答案与标准答案一样时,学生的填空题分数加5分

            studentData["scoreTwo"] = studentData["scoreTwo"] + 5

           

    # 使用append()函数

    # 将studentData添加到总学生数据allStudentsData中

    allStudentsData.append(studentData)

   

# 使用print输出变量allStudentsData

print(allStudentsData)                                                              

今天,我们帮助乔老师获取了填空题的答题内容,并算出了对应的分数。明天,我们将继续学习如何读取答题卡中的选择题答案,并把所有的信息导入到Excel表格中~

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

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

相关文章

一文搞懂线程的生命周期以及状态

一. Java 线程生命周期概述 Java 中的线程生命周期主要分为以下五个状态: 新建状态(NEW):线程被创建但尚未启动。可运行状态(RUNNABLE):线程可以被操作系统调度执行。阻塞状态(BLO…

如何投放Spotify广告:费用与关键考量

Spotify在2008年上市时,市场上已经充斥着各种竞争对手的音乐服务。这款音乐流媒体应用不仅打破了预期,还在180个市场上吸引了超过602百万用户,其中包括2.36亿订阅用户。现如今,它是全球最受欢迎的音频流媒体订阅服务。 Spotify广…

MySQL分组查询(DQL)

先看一下我的表内容和数据,再做接下来的例子和讲解1.分组函数的基本用法 select 字段列表 from 表名 [WHERE 条件] group by 分组字段名 [HAVING 分组后的过滤条件] 2.先声明where和having的区别 1.执行时机不同:where是分组之前进行过滤,…

❤Node08-Express-jwt身份认证

❤Node08-Express-jwt身份认证 1、token基本概念​ Session认证的局限性​ Session 认证机制需要配合Cookie才能实现。由于 Cookie 默认不支持跨域访问,所以,当涉及到前端跨域请求后端接口的时候,需要做很多额外的配置,才能实现…

特征值特征向量

正交矩阵 施密特正交化,本质上是正交​编辑投影定理的应用

再次进阶 舞台王者 第八季完美童模全球赛荣耀大使【李暖希】赛场秀场超燃合集!

7月20-23日,2024第八季完美童模全球总决赛在青岛圆满落幕。在盛大的颁奖典礼上,一位才能出众的少女——李暖希,迎来了她舞台生涯的璀璨时刻。 荣耀大使——李暖希,以璀璨童星之姿,优雅地踏上完美童模盛宴的绚丽舞台&am…

Python爱心射线(完整代码)

目录 系列目录 写在前面​ 完整代码 下载代码 代码分析 写在后面 系列目录 序号直达链接表白系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3

【工资计算 / 2】

题目 枚举 #include <bits/stdc.h> using namespace std; int T; int a[] {0,1500,4500,9000,35000,55000,80000,1000000}; int b[] {0,3,10,20,25,30,35,45}; int check(int x) {if(x < 3500) return x;x - 3500;int tax 0;for(int i 1; i < 8; i){if(x >…

【Spring Boot 整合 MyBatis 详细教程】

文章目录 Spring Boot 整合 MyBatis 详细教程简介环境准备项目搭建项目结构配置项目1. pom.xml 配置2. 数据源和 MyBatis 配置3. 启动类配置4. Mapper 接口和 XML 映射文件 测试总结 Spring Boot 整合 MyBatis 详细教程 简介 Spring Boot 与 MyBatis 的整合可以让你轻松地构建…

Unity射击游戏开发教程:(35)轰炸敌人

现在敌人和飞机已经慢慢地越来越有各自地地行为了,在本文中,我们将介绍如何创建一个具有以下行为的敌人: 飞机会来回弹跳。飞机将有 4 架无人机轰炸机围绕飞机旋转。无人机轰炸机会偶尔投下沿着屏幕传播的炸弹。如果炸弹击中玩家或在随机时间后就会爆炸。如果炸弹没有击中玩…

机器学习--逻辑回归

逻辑回归 前情提要&#xff1a;线性回归 关于分类 C l a s s i f i c a t i o n Classification Classification 在逻辑回归中&#xff0c;我们只讨论 y ∈ { 0 , 1 } y\in\{0, 1\} y∈{0,1} 的情况。其中 1 1 1 表示 p o s i t i v e c l a s s positive \; class posit…

无人机培训机构组装调试技术详解

一、基础知识学习 在进入无人机组装调试领域之前&#xff0c;扎实的基础知识是不可或缺的。学员需掌握以下内容&#xff1a; 1. 无人机基本原理&#xff1a;了解无人机的飞行原理&#xff0c;包括升力、推力、重力和阻力等基本物理概念&#xff0c;以及无人机的飞行控制系统&…

CSP-J 初中的数学知识要学完, CSP-S 肯定是要需高中的知识

学信奥赛好处很多&#xff0c;进则科技特长&#xff0c;退则数理化强。

【97】shell实现精确延时

#!/bin/bash#使用date精确延时的函数&#xff0c;参数是毫秒 function precise_sleep_ms() {local duration_ms$1# 将毫秒转换为秒local duration_sec$(echo "scale9; $duration_ms / 1000" | bc)duration_sec$(printf "%.3f" "$duration_sec")#…

JDBC API详解二

PreparedStatement 作用&#xff1a; 预编译SQL的执行&#xff0c;&#xff0c;预防SQL注入问题 SQL注入 通过操作输入来修改预先定义好的SQL语句&#xff0c;用以达到执行代码对服务器进行攻击的方法&#xff1b; SQL注入延时 需求&#xff0c;完成用户登录 select * fr…

04 奇偶分家

题目&#xff1a; 代码&#xff1a; #include<iostream> using namespace std; #include<stdlib.h> #include<stdio.h>int main() {int N;cin>>N;int jicount0,oucount0;for(int i0;i<N;i){int temp;cin>>temp;if(temp%20){oucount;}else if…

【python基础】简要wxPython

文章目录 wxPython程序主事件循环通俗解释在窗口中添加控件 wxPython程序 import wxapp wx.App() frm wx.Frame(None, title第一个wxPython程序, size(400, 300), pos(100, 100)) frm.Show() app.MainLoop()app.MainLoop() 让应用程序进入主事件循环中。事件循环是一种事件或…

计网简简单单复习一下

文章目录 基础体系结构(分层模型)为什么要分层?OSI 七层模型?每一层的作用?TCP/IP 四层模型是什么?每一层的作用是什么?五层体系结构以及对应的协议每一层常见协议有哪些?从输入 URL 到页面展示到底发生了什么?URI和URL的区别;forward和redirect的区别DNS作用是什么?D…

Find My外卖箱|苹果Find My技术与外卖箱结合,智能防丢,全球定位

外卖箱是外卖送餐时使用的具有保温广告功能的箱包&#xff0c;一般具有轻便易携&#xff0c;保温性好&#xff0c;耐用&#xff0c;安全&#xff0c;易固定在外送电动车上等特点。随着生活水平的提高和餐饮行业的飞跃&#xff0c;外卖作为餐饮行业一个新的利润增长点&#xff0…

论文翻译:ICLR-2024 PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS

PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS https://openreview.net/forum?idKS8mIvetg2 验证测试集污染在黑盒语言模型中 文章目录 验证测试集污染在黑盒语言模型中摘要1 引言 摘要 大型语言模型是在大量互联网数据上训练的&#xff0c;这引发了人们的…