一、前言
初一英语单词随机抽查,运行一段时间后,有的单词已抽查了3-4遍,仍有三分之一的单词没抽查到。本篇针对这个问题,解决不遗漏抽查,一遍查完再进入一下遍。
二、思路
单词用电子表格保存,增加一列:抽查记录列,每抽查一次记录加1。每次将记录最小值提出取list,在其中随机提取。如果列表小于提出数,在列表外的数据中,随机生成补齐数,满足提取要求。
三、代码
import random
import openpyxl
def xls_words(n):#单遍随机取数,不重复不遗漏,取完自动下一轮。
words=''
fn=u'D:/2018熊/伊学专栏/背单词方法/初一单词.xlsx'
xlsx=openpyxl.load_workbook(fn)#打开xlsx文件
sheet1=xlsx.worksheets[0]#打开第一个sheet
ns=sheet1.max_row#读取总行数
print(ns)
#下面excel为确定列最小值,取出行号集合,不足随机补充
mi=sheet1.cell(2,5).value#最小初值,第一行标题,第二行开始
min_list=[2]
for i in range(3,ns+1):#从第三行开始比较
if sheet1.cell(i,5).value<mi:
mi=sheet1.cell(i,5).value#新的最小值
min_list.clear()#清空列表
min_list.append(i)#添加行号
if sheet1.cell(i,5).value==mi:#如果等于最小值
min_list.append(i)#添加行号
#print(len(min_list))
if len(min_list)<n:#如果最小值不足的情况
ndel=n-len(min_list)#计算出差值
list_left=[x for x in range(1,n+1) if x not in min_list]#生成剩余数列表
for i in random.sample(list_left,ndel):#在其中随机生成行号
min_list.append(i)#补齐差值
#取出单词
for r in random.sample(min_list,n):#sample 没有重复数
words+=sheet1.cell(r,1).value+'\t'+sheet1.cell(r,2).value+'\t'\
+sheet1.cell(r,3).value+'\t'+sheet1.cell(r,4).value+'\n'#取出学习的单词
record=sheet1.cell(r,5).value #openpyxl库从1,1开始。注意
sheet1.cell(r,5).value=record+1#记录加1
xlsx.save(fn)#存盘
return words
xls_words(30)