1. 出题程序:随机生成随机数目的题目【包括题号,答案(a b c d) 题目难度(难 中 易) 】,以.xls的形式保存在excle表格中
2. 抽题程序:读取excel表中的题目,输入抽题数量,难 中 易 的比值,随机从其中抽取指定数量的题目,并保存在excle表格中
代码实现
1. 出题程序:
知识点:
(1)生成随机数
随机生成[a,b]范围内一个整数: random.randint(a,b)
它从一个列表、元组或字符串中返回一个随机项目:random.choice()
(2)格式化函数format,"{} {}".format("hello", "world")
(3)openpyxl模块,操作excel
import random
from openpyxl import load_workbook, Workbook
"""
随机生成随机数目的题目,包括题号,答案(a b c d) 题目难度 难 中 易)
以.xls的形式保存在excle表格中
"""
def generate_question():
# 随机生成题目数量
number = random.randint(1, 100)
answer = ['A', 'B', 'C', 'D']
difficult = ["难", "中", "易"]
# 随机生成题目
for topic in range(number):
print("题号:{} , 答案:{}, 题目难度:{}".format(topic + 1, random.choice(answer), random.choice(difficult)))
# 以.xls的形式保存在excle表格中
wb_obj = Workbook()
worksheet = wb_obj.active
save_file = "test_generate_question.xlsx"
# wb_obj = load_workbook('test.xlsx')
# worksheet = wb_obj.worksheets[0]
worksheet['A1'].value = "题号"
worksheet['B1'].value = "答案"
worksheet['C1'].value = "题目难度"
for i in range(number):
worksheet['A' + str(i + 2)].value = i + 1
worksheet['B' + str(i + 2)].value = random.choice(answer)
worksheet['C' + str(i + 2)].value = random.choice(difficult)
wb_obj.save(filename=save_file)
wb_obj.close()
return save_file
2. 抽题程序
"""
抽题程序
输入 抽题数量,难 中 易 的比值,随机从其中抽取指定数量的题目,并保存在excle表格中
"""
from openpyxl import load_workbook, Workbook
import random
from test_generate import generate_question
import os
# 获取题库中题目的数量
wb_obj = load_workbook(filename=generate_question())
sheet_obj = wb_obj.worksheets[0]
sum_number = sheet_obj.max_row - 1
print(sum_number)
sum_easy, sum_medium, sum_difficult = 0, 0, 0
total_easy_list = []
total_medium_list = []
total_difficult_list = []
for i in range(2, sum_number + 2):
if sheet_obj['C' + str(i)].value == "易":
sum_easy = sum_easy + 1
total_easy_list.append(i)
elif sheet_obj['C' + str(i)].value == "中":
sum_medium = sum_medium + 1
total_medium_list.append(i)
elif sheet_obj['C' + str(i)].value == "难":
sum_difficult = sum_difficult + 1
total_difficult_list.append(i)
print(sum_easy, sum_medium, sum_difficult)
# 定义3个列表,分别用于存放抽取后的题目
easy_list = []
medium_list = []
difficult_list = []
# 指定抽取的题目数和难易比例
n = 60
easy, medium, difficult = 0.2, 0.6, 0.2
easy_num = int(n * easy)
medium_num = int(n * medium)
difficult_num = int(n * difficult)
print(easy_num, medium_num, difficult_num)
def draw_questions(draw_question, total_question, percentage, total_degree_num, draw_degree_list: list, total_degree_list: list):
"""
:param draw_question: 要抽取的题目总数
:param total_question: 全部题库的题目数
:param percentage: 要抽取的难中易类型占的比例
:param total_degree_num: 题库中不同类型题目总数
:param draw_degree_list: 抽取后的各个类型的题目生成的列表
:return:
"""
# 根据比例确定要抽取的题目类型的数量,取整
draw_degree_num = int(draw_question * percentage)
# 判断要抽取的题目类型的数量是否小于题目中该类型的总数,若小于,则随机抽取指定数量的题目数,否则,将该类型题目全部抽取
if draw_degree_num < total_degree_num:
i = 0
while (i < draw_degree_num):
draw_questions_num = random.randint(2, total_question + 1)
tmp = []
if (draw_questions_num in total_degree_list) and (draw_questions_num not in tmp):
# if sheet_obj['C' + str(draw_questions_num)].value == degree:
draw_degree_list.append(
[sheet_obj['A' + str(draw_questions_num)].value, sheet_obj['B' + str(draw_questions_num)].value,
sheet_obj['C' + str(draw_questions_num)].value])
i = len(draw_degree_list)
tmp.append(draw_questions_num)
else:
for item in total_degree_list:
draw_degree_list.append([sheet_obj['A' + str(item)].value, sheet_obj['B' + str(item)].value,
sheet_obj['C' + str(item)].value])
return draw_degree_list
easy_list = draw_questions(n, sum_number, easy, sum_easy, easy_list, total_easy_list)
medium_list = draw_questions(n, sum_number, medium, sum_medium, medium_list, total_medium_list)
difficult_list = draw_questions(n, sum_number, difficult, sum_difficult, difficult_list, total_difficult_list)
print(difficult_list)
# 全部抽取的题目
sum_list = easy_list + medium_list + difficult_list
# 写入excel中
# wb_obj = load_workbook("test_draw.xlsx")
# save_file = "test_draw.xlsx"
# # 在excel表中创建sheet
# wb_obj.create_sheet("sheet1", 1)
#
# # 将列表中的内容写入指定sheet
# worksheet = wb_obj["sheet1"]
#
# for row in sum_list:
# worksheet.append(row) # 把每一行append到worksheet中
# wb_obj.save(filename=save_file)
wb_obj = Workbook()
save_file = "test_draw_question.xlsx"
worksheet = wb_obj.active
for row in sum_list:
worksheet.append(row) # 把每一行append到worksheet中
wb_obj.save(filename=save_file)