【功能更新-1:选项统一】利用python生成自制英语试题程序开发

生成试题截图效果

生成其中一页试题---1/6

  1. 在本地硬盘建立一个源试题程序文件

  2. 在这里插入图片描述

  3. 利用下面程序代码,导入txt文件,同时生成一批练习文件

  4. 这个试题随机生成的效果还是很棒的!在这里插入图片描述

功能更新:

  1. 原程序,只能输出一组试题,但问题是每题答案不同,有的单词首字母是大小,而有的单词首字母是小写的,这就需要我们根据题目的设置,修改一下答案中的单词首字母
  2. 于是对程序进行了一个if…elif…的调整,根据答案先判断这个题目的正确答案是首字母大写,还是首字母小写,如果是大写,全部答案改为大写,如果是小写,那全部改变小写。
#代码片断:
        # 判断列表中的单词首字母是否大写,如果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]  # 列表推导式
            for i in range(4):
                quizFile.write(' %s. %s\n' % ('ABCD'[i], answerOptions_dx[i]))
        elif letter_dx == 'False':
            for i in range(4):
                answerOptions_dx = [i.lower() for i in answerOptions]  # 列表推导式
                quizFile.write(' %s. %s\n' % ('ABCD'[i], answerOptions_dx[i]))
#coding=gbk
# 随机测试生成器.py - 生成问题及答案
# 随机生成问题并生成相应答案

import random,os,re


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:\物理练习图\九年级\英语试题生成文件 ')
        try:
            for line in f:
                print(line)
                key,val = line.split('|')
                val = ''.join(val)
                val = val.strip('\n')
                d[key] = val
        except ValueError:
            print('请去检查,源文件格式,本次编辑已忽略错误')

    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) + f'英语专题_{file_name}测试 (%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\t' % ('ABCD'[i], answerOptions_dx[i]))
            quizFile.write('\n')
        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()



希望更多的老师借鉴,提出宝贵的建议!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值