excel随机取数,不重复不遗漏,取完自动下一轮

博客针对初一英语单词随机抽查时部分单词未被抽到的问题,提出解决方案。思路是在电子表格中增加抽查记录列,每次将记录最小值提出取列表并随机提取,不足时从列表外数据随机补齐。还给出了Python代码实现该功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

初一英语单词随机抽查,运行一段时间后,有的单词已抽查了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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值