python文件读写练习题--随机出10套试卷

本文介绍了一段Python代码,用于创建10份包含随机打乱顺序的省会知识选择题试卷,同时提供了代码优化建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要求就是: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)
    

 效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值