需求:

作为双语教学的老师,学科单词一直是教学的重要一关

之前抽测学生都是用的自己做的word模板,打印出来一张纸上能切成三个人的试题:

类似的表格,打出来就是三个人的考试题

但是久而久之有的班级监管不力的话抄袭的现象也会出现,而如果针对每个人调换顺序的话工作量太大,可操作性和扩展性也太弱。

而且手头有这样的单词表(excel格式),于是动了python批处理脚本自动生成的心思

目标是生成有每个人名字,并且每个人的抽测单词是从单词表里随机抽出的


手头的资源:

类似的单词表,有几百个词

学生名单:


开工:

因为需要用python最后输出word方便打印,参考网上使用了python-docx库

使用pip安装docx库(win使用cmd输入命令,mac使用终端terminal输入):

pip install python-docx

docx库使用方法参见了这两部分:

python-docx 使用教程​www.cnblogs.comhttps://python-docx.readthedocs.io/en/latest/​python-docx.readthedocs.io

然后为了便于操作,将现有的单词表和名单都存为csv格式

思路大致如下:

野路子自学。。流程图的规范忘的差不多了。。

开始码字:

#引入所用库:

from docx import Document
import random
import csv

#声明一下变量

voca_en = []
voca_cn = []
names = []

#读单词表文件(已存为voca.csv),将每一行的第一列(英文单词)增加入voca_en列表,第二列(中文意思)增加入voca_cn列表

csv_voca = csv.reader(open('voca.csv',encoding='utf-8'))
for row in csv_voca:voca_en.append(row[0])voca_cn.append(row[1])

#读取名单数据(存为G81.csv),将名字存入names列表中

csv_names = csv.reader(open('G81.csv',encoding='utf-8'))
for row in csv_names:names.append(row[0])

#新建一个word文档对象,名为doc

doc = Document()

#开始一个一个提取名字,并写在前面成为一段

for name in names:nametitle = doc.add_paragraph()nametitle.add_run('Name:' + name)

#(仍在循环内)画一个2列10行的空表格,样式为"所有边框"

    table = doc.add_table(rows=10, cols=2,style='Table Grid')

#(仍在循环内)把中文意思的列表复制一下(直接用voca_cn_test = voca_cn赋值语句只会在内存中的这个列表赋予两个名称,一会不放回取出的时候实际voca_cn也会同等收到影响,必须另外复制一个完全独立的才行)

    voca_cn_test = list(voca_cn)

#(仍在循环内)开始不放回随机抽取单词(中文意思),使用的是列表的pop方法;每次取出之后待抽单词列表的长度都会变化,所以随机数的取值范围也要时刻更新

    for a in range(0,10):cell= table.cell(a,0)x = random.randrange(len(voca_cn_test)-1)print(len(voca_cn_test))cell.text = voca_cn_test.pop(x)

#(仍在循环内)为了好看,每循环完成一个人的单词表,就在shell里面提示一下(删去无影响)

    print('finished quiz:'+ name)print('==================================')

#最后所有人名都完成了循环,需要将这个docx文件保存一下(运行过程中一直都在内存中,保存后才能看得到)

doc.save('quiz.docx')

跑一遍看看效果

基本完成了预想的样子,格式什么为了方便打印还需要调整一下(比如名字离上一个人的quiz太近了,打印出来不好裁剪),不过都还比较好搞。

还有很多不足,比如语句冗余还是很多;方法应该还有更高效的,不过目前的数据量较小基本不用考虑运行时间问题。

下一步的升级希望能和学生的成绩水平挂钩,根据平常类似单词考试的成绩来提高或者降低难度(通过调整汉译英和英译汉的比例),简单来说可以直接拿平时成绩的分数换算为汉译英/英译汉的比例从而调整抽提,更深的学生成绩数据存储可能需要数据库知识了吧,还需要恶补。

自己从身边发现的需求然后摸石头过河做的,知乎大佬们见笑了。

欢迎各种指导~

python docx 复制_python制作单词抽测题(word版)(一)相关推荐

  1. python docx 复制_99%的人都不知道的Python整理文件方法,效率提升100倍

    现在人们经常要去下载或者接收一些文件. 比如说同事传来的文档,自己建立的文件,想看的电影等等,那大家都会怎么处理这些文件呢? 科研工作者.学生们可能需要阅读大量的文献,我们也需要阅读很多的电子书等等, ...

  2. 查python的软件_Python制作天气查询软件【python实战必学】

    在这里插入图片描述 以前,公众号分享了如何使用 PyQt5 制作猜数游戏和计时器,这一次,我们继续学习:如何使用 PyQt5 制作天气查询软件. 如需获取源代码和 exe 文件,请在微信公众号Pyth ...

  3. python课堂点名_Python制作课堂点名器,原来还能这么玩!

    Python制作课堂点名器,原来还能这么玩! 作者:PHPYuan 时间:2019-03-19 03:40:36 我们用的是Python中的Tkinter模块,我们大概做的功能有三个:随机点名 惩罚 ...

  4. python测试代码_python英语单词测试小程序代码实例

    这篇文章主要介绍了python英语单词测试小程序代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 爬取了扇贝英语网,并制作了一个英语单词测试的 ...

  5. python翻转函数_Python翻转单词顺序

    首先需要写一个reverse函数,把任何输入的字符串完全翻转.然后从前往后依次遍历新字符串,如果遇到空格,就把空格前的字符串用reverse翻转,添加空格,继续遍历.需要注意的是,如果新字符串结尾不是 ...

  6. python注册系统_Python制作简易注册登录系统

    Python制作简易注册登录系统 这篇文章主要为大家详细介绍了 Python 简易注册登录系统的制作方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Python 是一种面向对象.解释型计算机程 ...

  7. python仪表盘绘图_Python制作仪表盘图,比Excel快速N倍

    之前写过一篇用Excel制作仪表盘图的教程高端大气上档次的Excel图形-仪表盘主要是利用环形图和饼图分别制成半圆环和指针,制作过程较为繁琐,且指针准确度不易掌控,这里我们用Python中的pyech ...

  8. python 仪表盘数据显示_Python制作仪表盘图,比Excel快速百倍

    之前写过一篇用Excel制作仪表盘图的教程Excel可视化之精美仪表盘,主要是利用环形图和饼图分别制成半圆环和指针,制作过程较为繁琐,且指针准确度不易掌控,这里我们用Python中的pyecharts ...

  9. python画小兔子_python制作“小兔子和Bun小游戏

    说明 python版本:3.5.4 pygame版本:1.9.3(pip安装即可) 愉快地开始 Step1:你好,兔子 效果: Step2:添加背景 首先载入所需的图片:其次依次通过x和y进行循环,并 ...

最新文章

  1. SAP PM技术对象的功能
  2. 检测到目标主机可能存在缓慢的HTTP拒绝服务攻击
  3. asp.net源碼坊論壇上線
  4. Arduino产生PWM的3种方法
  5. 阿里云mysql创建多个用户_阿里云MySQL创建指定用户访问指定表
  6. 木桶布局 原理与实现
  7. 解决iframe在ios中无法滚动的bug
  8. Vue.JS学习笔记
  9. 问题 E: 货币兑换 山东科技大学OJ c 语言
  10. hackrf+portapack 组装上手体验记录
  11. 视频录制软件进行电脑屏幕录像的使用方法
  12. html5图片在线剪辑,Web端裁剪图片方法
  13. 模拟与仿真两个词的区别
  14. Okra框架(三) 搭建HTTP服务器
  15. Oracle如何保持一致读?
  16. OMAP3530资料
  17. 尼日利亚4g频段_4G全球频段划分及主要运营商对应表2015版.xls
  18. imperva agent 的重新注册
  19. CANN训练营第三季_昇腾CANN算子精讲课_TBE算子Sinh开发笔记_算子开发(二)
  20. 软考高级 真题 2010年下半年 信息系统项目管理师 案例分析

热门文章

  1. [Vue.js] 深入 -- 案例 - 购物车
  2. 用python内置函数算复杂度吗_Python减少代码量的两个内置函数
  3. body curl命令测试post_HTTP接口调试利器!4.8万Star的HTTP命令行客户端!
  4. 交换二叉树中所有结点的左右子树的位置
  5. 输入框禁止输入emoji标签
  6. Netty(三) 什么是 TCP 拆、粘包?如何解决?
  7. django mysql settings
  8. 关于如何控制一个页面的Ajax读数据只读一次的简单解决办法!
  9. 下拉菜单(含有阻止事件冒泡)
  10. Android类参考---Fragment(五)