生成试题截图效果
-
在本地硬盘建立一个源试题程序文件
-
-
利用下面程序代码,导入txt文件,同时生成一批练习文件
-
这个试题随机生成的效果还是很棒的!
功能更新:
- 原程序,只能输出一组试题,但问题是每题答案不同,有的单词首字母是大小,而有的单词首字母是小写的,这就需要我们根据题目的设置,修改一下答案中的单词首字母
- 于是对程序进行了一个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()