<每日一题>题目28:生成随机的测验试卷(单选题)

#项目:生成随机的测验试卷文件
import random
#资料库
capitals = {‘北京市‘:‘京‘,‘上海市‘:‘沪‘,‘天津市‘:‘津‘,‘重庆市‘:‘渝‘,‘河北省‘:‘冀‘,‘山西省‘:‘晋‘,‘辽宁省‘:‘辽‘,‘黑龙江省‘:‘黑‘,‘吉林省‘:‘吉‘,‘江苏省‘:‘苏‘,‘浙江省‘:‘浙‘,‘安徽省‘:‘皖‘,‘福建省‘:‘闽‘,‘江西省‘:‘赣‘,‘山东省‘:‘鲁‘,‘河南省‘:‘豫‘,‘湖北省‘:‘鄂‘,‘湖南省‘:‘湘‘,‘广东省‘:‘粤‘,‘海南省‘:‘琼‘,‘四川省‘:‘川‘,‘贵州省‘:‘黔‘,‘云南省‘:‘滇‘,‘陕西省‘:‘陕‘,‘甘肃省‘:‘甘‘}
#测试人数
for quizNum in range(1):
    #因为range()函数的循环是从0开始,所以都需要加1,分别创建每份测试的题目以及答案
    quizFile = open(‘capitalsquiz%s.txt‘%(quizNum + 1),‘w‘)
    answerKeyFile = open(‘capitalsquiz_answer%s.txt‘%(quizNum + 1),‘w‘)
    #在测试中留空,已供填写日期,姓名等,以写模式写文档不会自动换行,所以需要加入\n
    quizFile.write(‘姓名:\n\n年龄:\n\n日期:\n\n‘)
    quizFile.write((‘ ‘*20)+‘省会测试题(%s卷)‘%(quizNum + 1))     #留空20个空格,加题目序号
    quizFile.write(‘\n\n‘)
    #将资料库中的键随机打乱之后存入states中
    states = list(capitals.keys())
    random.shuffle(states)
    #del是删除列表操作,不同于def,看清楚
    for questionNum in range(20):
        correctAnswer = capitals[states[questionNum]] #根据随机后的states在capitals中反查正确答案
        wrongAnswers = list(capitals.values())       #列举所以答案
        del wrongAnswers[wrongAnswers.index(correctAnswer)]  #删除列举中的正确答案,index方法,找到返回索引值,然后由del删除
        wrongAnswers = random.sample(wrongAnswers,3)   #sample方法,在已给的序列中随机选取指定长度片段,不做修改
        answerOptions = wrongAnswers + [correctAnswer] #答案是,正确答案加3个错误答案
        random.shuffle(answerOptions)   # 将答案的顺序进行打乱
        quizFile.write(‘%s.%s的省会城市是?\n‘%(questionNum + 1,states[questionNum]))
        for i in range(4):
            quizFile.write(‘%s.%s\n‘%(‘ABCD‘[i],answerOptions[i])) #给出选项
        quizFile.write(‘\n‘)  #结尾空行
        answerKeyFile.write(‘%s,%s\n‘%(questionNum + 1,‘ABCD‘[answerOptions.index(correctAnswer)]))#由正确答案反求序号,得出对应的ABCD,
    #进过写操作,记得关闭文档
    quizFile.close()
    answerKeyFile.close()

  运行结果:

题目:

答案:

导入一个题库,我可以出N张卷子- -,纪念当初的高三生活!

原文地址:https://www.cnblogs.com/shuimohei/p/10383035.html

时间: 2024-11-09 10:18:20

<每日一题>题目28:生成随机的测验试卷(单选题)的相关文章

&lt;每日一题&gt;题目28:简单的python练习题(51-60)

#51.一行代码实现1-100的和 sum(range(1,101)) #52.如何在一个函数内部修改全局变量 ''' 利用global ''' #53.字典如何删除和合并2个字典 ''' del dic['name'] #删除 dic.update(dic2) #合并 ''' #54.谈下python的GIL ''' 全局解释器锁,同一进程中多线程同时只有一个线程能霸占python解释器(加了GIL),其他线程无法进行,该线程结束后才能运行. 多进程可以有多个python解释器,可以实现多个进

python 在指定的文件夹下生成随机的测验试卷文件

#! python3 #在指定的路径中生成指定数目的测验试卷和参考答案文本,试卷内容是测验对我国28个省级行政区的省会城市的选择, #要求每份试题的试题顺序不同,不同试卷中相同试题的选项随机抽取. import random import os # 各省及其省会的字典数据 capitals = {'新疆': '乌鲁木齐', '甘肃': '兰州', '宁夏': '银川', '陕西': '西安', '青海': '西宁', '西藏': '拉萨', '贵州': '贵阳', '内蒙古': '呼和浩特',

Python实践练习:生成随机的测验试卷文件

题目 假如你是一位地理老师,班上有 35 名学生,你希望进行美国各州首府的一个小测验.不妙的是,班里有几个坏蛋,你无法确信学生不会作弊.你希望随机调整问题的次序,这样每份试卷都是独一无二的,这让任何人都不能从其他人那里抄袭答案.当然,手工完成这件事又费时又无聊.好在,你懂一些 Python. 下面是程序所做的事: ? 创建 35 份不同的测验试卷. ? 为每份试卷创建 50 个多重选择题,次序随机. ? 为每个问题提供一个正确答案和 3 个随机的错误答案,次序随机. ? 将测验试卷写到 35 个

&lt;每日一题&gt;题目16:简单的python练习题(1-10)

#1.python程序中__name__的作用是什么? __name__这个系统变量用来表示程序的运行方式. 如果程序在当前膜快运行,__name__的名称就是__main__, 如果不在(被调用),则显示为导入模块的名称. 扩展:常常这样写if __name__ == "__main__":来表名这是整个工程开始运行的入口. 效果:如果直接从这个文件执行,if为Turn,可以运行if后面的程序 如果被调用,if为False,不执行if后面的程序 #2.表达式int('11111',2

&lt;每日一题&gt;题目2:编写装饰器,为多个函数加上认证功能(用户账号和密码来源于文件)

这里做个最简单的账号密码验证,主要为了实现装饰器同时对多个函数起作用 1 FLAG = False #加一个变量防止多次登录验证 2 def wrapper(f): 3 def inner(*args,**kwargs): 4 '''登录程序''' 5 global FLAG #将FLAG变量设置成全局变量 6 if FLAG: 7 ret = f(*args, **kwargs) 8 return ret 9 else: 10 username = input('username:') 11

&lt;每日一题&gt;题目1:简单的注册和登录1.0

#版本1.0,最基本的注册登录'''1.注册,将账号和密码分别写在不同的文档里面2.登录,分别从账户文档和密码文档进行读取并登录''' 1 #注册 2 Identity = input("请输入您想要注册的账号:") 3 Password = input("请输入您想要注册的密码:") 4 print("恭喜您注册成功") 5 with open('id_ZC',mode='w',encoding='utf-8') as f1,open('pw_

&lt;每日一题&gt;题目17:super()继承相关的面试题

class A(object): def go(self): print("go A go!") def stop(self): print("stop A stop!") def pause(self): raise Exception("Not Implemented") class B(A): def go(self): super().go() print( "go B go!") class C(A): def go

&lt;每日一题&gt;题目24:冒泡排序

''' 冒泡排序:比较相邻元素,顺序错误就交换顺序 ''' import random import cProfile def bubble_Sort(nums): for i in range(len(nums)-1): for j in range(i+1,len(nums)): if nums[i] > nums[j]: # max = nums[i] # nums[i] = nums[j] # nums[j] = max #python有更好的写法 nums[i],nums[j] = n

&lt;每日一题&gt;题目26:选择排序(冒泡排序改进版)

''' 选择排序:选择最小的,以此类推 ''' import random import cProfile def select_Sort(nums): for i in range(len(nums)-1): for j in range(i+1,len(nums)): if nums[i] > nums[j]: # max = nums[i] # nums[i] = nums[j] # nums[j] = max #python有更好的写法 nums[i],nums[j] = nums[j]