出题程序和抽题程序

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)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值