python自动化-通过问题进行巧妙设计选择题专练习

学字典建题库,孩子学习一定酷

  1. 开始组建试题
  2. 编写程序,运动,导入试题
  3. 为防止试题选项重复,转化选项为元组
  4. 孩子试题组卷时,首字母无法一致问题,建立条件分支
  5. 建立试题+答案,还有单独的答案副本
#coding=gbk
# 随机测试生成器.py - 生成问题及答案
# 随机生成问题并生成相应答案

import random,os


d = {}
name = ''
def file_list():
    global zj_ml
    print('物理组卷---w,英语组卷---e')
    ml = input('输入科目:')
    if ml == 'e':
        zj_ml = '英语组题'
    elif ml == 'w':
        zj_ml = '物理组题'

    files = os.listdir(f'F:\物理练习图\九年级\字典组建试题\{zj_ml}')

    return files

file = file_list()


def english(file):

    for ind, x in enumerate(file):
        print(ind, '-', x.strip('.txt'),end='\t')
        if ind%5== 0:
            print('')

    xz = int(input('\n选择序号:'))
    fil = file[xz]

    fil = ''.join(fil)
    with open(rf"F:\物理练习图\九年级\字典组建试题\{zj_ml}\{fil}") as f:

        print(f'------{fil.strip(".txt")} *** 试题已经组卷成功.------\nF:\物理练习图\九年级\英语试题生成文件 ')
        for line in f:
            key,val = line.split('|')
            val = ''.join(val)
            val = val.strip('\n')
            d[key] = val

    return d

eng_tests = english(file)
pd_letter_dx = []

file_name = input('文件名称:')
for quizNum in range(20):
    # 新建试卷及答案的txt文档。
    quizFile = open(r'F:\物理练习图\九年级\英语试题生成文件\{}-{}.doc'.format(file_name,quizNum + 1),'w',encoding='utf-8')
    answerKeyFile = open(r'F:\物理练习图\九年级\英语试题生成文件\{}-_答案{}.txt'.format(file_name,quizNum + 1), 'w')

    # 利用write语法,参数:字符串,给试卷写出表头。
    quizFile.write('姓名:\t\t日期:\t\t学期:\t\t')
    #利用*写入多空格,把卷和数字参数合并到起,+号连接
    quizFile.write((' ' * 20) + '英语专题测试 (%s)' % (quizNum + 1))
    #空两行
    quizFile.write('\n\n')

    # 把字典的键名,转化成列表,打乱试题答案。
    eng_test_list = list(eng_tests.keys())
    random.shuffle(eng_test_list)

    # 遍历每一个问题,并生成问题题干。
    for questionNum in range(len(eng_test_list)):

        # 得到四个答案,三错一对。
        correctAnswer = eng_tests[eng_test_list[questionNum]]#从获取的键名列表中把字典的键值传递给正确变量

        wrongAnsewers = list(eng_tests.values())
        #去除错误选项中的重复答案
        #然后再选择三个干扰项
        wrongAnsewers = set(wrongAnsewers)
        print(wrongAnsewers)
        wrongAnsewers = list(wrongAnsewers)
        del wrongAnsewers[wrongAnsewers.index(correctAnswer)]


        wrongAnsewers = random.sample(wrongAnsewers, 3)
        answerOptions = wrongAnsewers + [correctAnswer]


        random.shuffle(answerOptions)

        # 将问题和答案选项写进试卷的txt文档。
        quizFile.write('\n%s. %s(    ) \n' %(questionNum + 1,
            eng_test_list[questionNum]))

        #写入试卷中的选项首字母大写的判断

        # 判断列表中的单词首字母是否大写,如果correctAnswer[0]首字母在a~z之间,输出False 否则输出True
        letter_dx = "False" if ord('a') <= ord(correctAnswer[0]) <= ord('z') else "True"

        if letter_dx == 'True':
            answerOptions_dx = [i.capitalize() for i in answerOptions]  # 列表推导式

        elif letter_dx == 'False':
            answerOptions_dx = [i.lower() for i in answerOptions]  # 列表推导式

        for i in range(4):
            quizFile.write('%s. %s\t' % ('ABCD'[i], answerOptions_dx[i]))
        quizFile.write('\n【答案】%s\n' % ( 'ABCD'[
            answerOptions.index(correctAnswer)]))

        quizFile.write('\n')
        # 将答案写进答案的txt文档。
        # que_inp = ('输入答案:')
        answerKeyFile.write('%s.%s\n' %(questionNum + 1, 'ABCD'[
            answerOptions.index(correctAnswer)]))

    quizFile.close()
    answerKeyFile.close()

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值