要求就是:10套试卷题目顺序不同,答案顺序不同
import random
import os
city = {'河北省':'石家庄市','山西省':'太原市','辽宁省':'沈阳市','吉林省':'长春市','黑龙江省':'哈尔滨市','江苏省':'南京市','浙江省':'杭州市','安徽省':'合肥市','福建省':'福州市','江西省':'南昌市'}
#在当前路径下创建目录,用于保存试卷
if not os.path.exists('.\\data\\exam'):
os.makedirs('.\\data\\exam')
#切换到创建的目录下
os.chdir('.\\data\\exam')
#创建十套试卷
for i in range(10):
#试卷文件
exam = open('试卷'+str(i+1)+'.txt','w')
exam.write('姓名:\t')
exam.write('成绩:\n\n')
exam.write('单选题:请从下面选项中选出该省份对应的省会\n')
#答案文件
answ = open('试卷'+str(i+1)+'答案.txt','w')
#题目列表
provinces = list(city.keys())
#答案选项
options = ['A、','B、','C、','D、']
#10道题目
for j in range(10):
#答案列表
cityNames = list(city.values())
#随机选题,打乱顺序
province = random.choice(provinces)
exam.write(str(j+1)+'、'+province+'的省会是?\n')
#去除已选择的,避免重复
provinces.remove(province)
#随机选3个省会与正确的组成答案
succ = city[province]
cityNames.remove(succ)
#随机选取3个错误省会当作答案
error1 = random.choice(cityNames)
cityNames.remove(error1)
error2 = random.choice(cityNames)
cityNames.remove(error2)
error3 = random.choice(cityNames)
cityNames.remove(error3)
answers = [succ,error1,error2,error3]
#将选项顺序打乱随机
for opt in options:
answer = random.choice(answers)
answers.remove(answer)
exam.write(opt+answer+'\t')
#正确答案写入答案文件
if answer==succ:
answ.write(str(j+1)+'、'+opt+answer+'\n')
exam.write('\n\n')
exam.close()
answ.close()
'''
以上代码是自己依据java经验而写,在随机选择的地方有点麻烦,其实python有函数
random.sample(provinces,10) 从provinces中随机选10个
random.shuffle(provinces) 将provinces随机排序
两种方式都可以使用这样直接就将10道题目顺序打乱了,可以少一重for循环
'''
provinces = list(city.keys())
print('原provinces:',provinces)
print('random.sample()函数:',random.sample(provinces,10))
provinces = list(city.keys())
print('原provinces:',provinces)
random.shuffle(provinces)
print('随机排序后:',provinces)
效果: