随笔记录方便自己和同路人查阅。

#------------------------------------------------我是可耻的分割线-------------------------------------------

  假如你是一个地理老师,班上有35名学生,你希望进行美国各州首府的一个小测验。不妙的是,班里有几个坏蛋,你无法确信

学生不会作弊。你希望随机调整问题的次序,这样每份试卷都是独一无二的,这让任何人都不能从其他人那里抄袭答案。当然,手工

完成这件事又费时又无聊。好在,你懂一些 Python。

  下面是程序所做的事:

  (1)创建35份不同的测试试卷

  (2)为每份试卷创建50个多重选择题,次序随机

  (3)为每个问题提供一个正确的答案和3个随机的错误答案,次序随机

  (4)将测验试卷写到35个文本文件中

  这意味着代码需要做下面的事:

  (1)将州和它们的首府保存在一个字典中

  (2)针对测验文本文件和答案文本文件,调用open()、write()和close()

  (3)利用random.shuffle()随机调整问题和多种选项的次序  

#------------------------------------------------我是可耻的分割线------------------------------------------

  示例代码:

#! python 3
# -*- coding:utf-8 -*-
# Autor: Li Rong Yang
#第一步
import random #第二步,生成一个字典,以美国州名作为键,以州首府作为值
capitals = {'Alabama': 'Montgomery', 'Alaska': 'Juneau', 'Arizona': 'Phoenix',
'Arkansas': 'Little Rock', 'California': 'Sacramento', 'Colorado': 'Denver',
'Connecticut': 'Hartford', 'Delaware': 'Dover', 'Florida': 'Tallahassee',
'Georgia': 'Atlanta', 'Hawaii': 'Honolulu', 'Idaho': 'Boise', 'Illinois':
'Springfield', 'Indiana': 'Indianapolis', 'Iowa': 'Des Moines', 'Kansas':
'Topeka', 'Kentucky': 'Frankfort', 'Louisiana': 'Baton Rouge', 'Maine':
'Augusta', 'Maryland': 'Annapolis', 'Massachusetts': 'Boston', 'Michigan':
'Lansing', 'Minnesota': 'Saint Paul', 'Mississippi': 'Jackson', 'Missouri':
'Jefferson City', 'Montana': 'Helena', 'Nebraska': 'Lincoln', 'Nevada':
'Carson City', 'New Hampshire': 'Concord', 'New Jersey': 'Trenton', 'New Mexico': 'Santa Fe',
'New York': 'Albany', 'North Carolina': 'Raleigh',
'North Dakota': 'Bismarck', 'Ohio': 'Columbus', 'Oklahoma': 'Oklahoma City',
'Oregon': 'Salem', 'Pennsylvania': 'Harrisburg', 'Rhode Island': 'Providence',
'South Carolina': 'Columbia', 'South Dakota': 'Pierre', 'Tennessee':
'Nashville', 'Texas': 'Austin', 'Utah': 'Salt Lake City', 'Vermont':
'Montpelier', 'Virginia': 'Richmond', 'Washington': 'Olympia', 'West Virginia': 'Charleston',
'Wisconsin': 'Madison', 'Wyoming': 'Cheyenne'}
capitalsItems = list(capitals.items()) #第三步,创建35份试卷文件
for quizNum in range(35):
#生成35份问题文件,名称为capitalsquiz + 1到35数字
quizFile = open('D:\\quiz\\capitalsquiz%s.txt' % (quizNum + 1),'w') # 生成35份答案文件,名称为capitalsquiz_answers%s + 1到35数字
answerKeyFile = open('D:\\quiz\\capitalsquiz_anwers%s.txt' % (quizNum + 1),'w') #写入测验试卷的头内容
quizFile.write('Name:\n\nDate:\n\nPeriod:\n\n')
quizFile.write((' ' * 20) + 'State Capitals Quiz (Form %s)' % (quizNum + 1))
quizFile.write('\n\n') #把各州名转换为列表
states = list(capitals.keys())
#使用random.shuffle(),创建随机列表,内容为各州名
random.shuffle(states) for questionNum in range(50):
'''这个循环将遍历打乱过的 states 列表中的州,从 states[0]到 states[49],
在 capitals 中找到每个州,将该州对应的首府保存在 correctAnswer 中'''
correctAnswer = capitals[states[questionNum]]
#可能的错误答案列表需要一点技巧。你可以从capitals字典中复制所有的值
wrongAnswers = list(capitals.values())
#删除正确的答案
del wrongAnswers[wrongAnswers.index(correctAnswer)]
#然后从该列表中选择3个随机的值
wrongAnswers = random.sample(wrongAnswers, 3)
'''random.sample()函数使得这种选择很容易,它的第一个参数是你希望选择的列表,第二个参数
是你希望选择的值的个数。完整的答案选项列表是这 3 个错误答案与正确答案的组合'''
answerOptions = wrongAnswers + [correctAnswer]
#最后 ,答案需要随机排列,这样正确的答案就不会总是选项 D。
random.shuffle(answerOptions) #quizFile.write('%s. What is the capital of %s?\n' % (questionNum + 1,states[questionNum]))
quizFile.write('%s. What is the capital of %s?\n' % (questionNum + 1,states[questionNum]))
# 一个遍历整数 0 到 3 的 for 循环,将答案选项写入 answerOptions 列表
for i in range(4):
#表达式'ABCD'[i]将字符串'ABCD'看成是一个数组,它在循环的每次迭代中,将分别求值为'A'、'B'、'C'和'D'。
quizFile.write(' %s. %s\n' % ('ABCD'[i],answerOptions[i]))
#写入换行
quizFile.write('\n')
'''表达式 answerOptions.index(correctAnswer)将在随机排序的答案选项中,找到正确答案的整数
下标,并且'ABCD'[answerOptions.index(correctAnswer)]将求值为正确答案的字母,写入到答案文
件中。'''
answerKeyFile.write('%s. %s\n' % (questionNum + 1, 'ABCD'[answerOptions.index(correctAnswer)]))
quizFile.close()
answerKeyFile.close()

  运行结果:

Python学习笔记文件读写之生成随机的测试试卷文件的更多相关文章

  1. Python 读写文件 小应用:生成随机的测验试卷文件

    去年学习了python的读写文件部分,了解了python读写的常用模块os.shelve,今天准备把课后作业试着自己做一下 目标:1)生成35份试卷.每个试卷有50道选择题 2)为了防止有学生作弊,需 ...

  2. Python学习笔记(三):随机生成函数方法

    本文是在Python2下总结! Python中的random模块用于生成随机数,如果想生成随机数需要先导入random的模块然后才能使用其中的方法,下面简单介绍一下常用的结果函数方法: 1·.rand ...

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

    题目 假如你是一位地理老师,班上有 35 名学生,你希望进行美国各州首府的一个小测验.不妙的是,班里有几个坏蛋,你无法确信学生不会作弊.你希望随机调整问题的次序,这样每份试卷都是独一无二的,这让任何人 ...

  4. Python学习笔记系列——读写文件以及敏感词过滤器的实现

    一.读文件 #打开文件,传入文件名和标识符,r代表读 f= open('\\Users\ZC\Desktop\zc.txt','r') #调用read方法一次性读取文件的全部内容,存入内存,用str对 ...

  5. python学习笔记(20)--生成点拨【已放弃】

    说明: 1. 本来是要写个脚本生成点拨rtf给讲师朗读的,不过实在是安装不上pywin32这个模块,虽然下载下来了whl文件,pip install 也能安装,但是导入pywin32.win32com ...

  6. Python学习笔记_使用openpyxl操作Excel,在同一个文件里复制某一个sheet

    应用场景:定制一个Excel模板文件,其中定义了一个模板Sheet,以此模板文件里的模板sheet为样例,制作报表,里面有不止一个模板样例Sheet 一.软件环境: 1.OS:Win10 64位 2. ...

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

    #项目:生成随机的测验试卷文件 import random #资料库 capitals = {'北京市':'京','上海市':'沪','天津市':'津','重庆市':'渝','河北省':'冀','山西 ...

  8. [Python学习笔记]文件的读取写入

    文件与文件路径 路径合成 os.path.join() 在Windows上,路径中以倒斜杠作为文件夹之间的分隔符,Linux或OS X中则是正斜杠.如果想要程序正确运行于所有操作系统上,就必须要处理这 ...

  9. Python学习笔记之文件处理

    1.打开和关闭 要打开文件可以使用函数 open(),它位于自动导入模块 io 中.函数将文件名作为唯一不可缺少的函数,并返回一个文件对象.它还有一个名叫 mode 的参数,用于指定文件模式,其可取值 ...

  10. python学习笔记(五岁以下儿童)深深浅浅的副本复印件,文件和文件夹

    python学习笔记(五岁以下儿童) 深拷贝-浅拷贝 浅拷贝就是对引用的拷贝(仅仅拷贝父对象) 深拷贝就是对对象的资源拷贝 普通的复制,仅仅是添加了一个指向同一个地址空间的"标签" ...

随机推荐

  1. Mysql数据库基础第七章:流程控制结构

    Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...

  2. 使用windows平板学习与办公的一些经历(酷比魔方i9篇)

    大概是在2019年的时候,我在某平台上购买了900元的二手windows平板电脑,酷比魔方i9 首先谈谈背景.当时我手里是有个笔记本,屏幕大概15.6寸,4G+256G的,平时用的时候功率平均20几W ...

  3. .NET 6 + Hangfire 实现后台作业管理

    一.环境: ASP.NET Core 6 + Hangfire + MySQL   二.新建ASP.NET Core空项目 项目名称:HangfireExample 框架:.NET 6.0   三.N ...

  4. 20200420关于mysql突然停止服务的记录

    期待评论ing... 前天开发商城项目的时候,没注意d盘满了,后来5.5的mysql就突然无法启动,而且提示2003错误,在cmd中启动也是没有任何报错信息. 然后就找5.5原因,在windows的, ...

  5. Django的反向解析

    Django的请求生命周期是指用户在浏览器访问网页时,Django根据网址在路由列表里查找相应的路由,在从路由里找到视图函数或视图类进行处理,将处理结果作为相应内容返回浏览器并生成网页内容. 这个生命 ...

  6. Monstache的安装和使用

    一.什么是Monstache Monstache 是Golang语言实现的基于MongoDB的oplog实现实时数据同步及订阅的插件,支持MongoDB与ES之间的数据同步.其中MongoDB需要搭建 ...

  7. element-ui组件Table排序(sort-by),某些数据无需排序

    在列中设置 sortable 属性即可实现以该列为基准的排序, 接受一个 Boolean,默认为 false. 可以通过 Table 的 default-sort 属性设置默认的排序列和排序顺序. 可 ...

  8. Vue3.0 实现数据双向绑定的方法

    ue3.0 是通过Proxy实现的数据双向绑定,Proxy是ES6中新增的一个特性,实现的过程是在目标对象之前设置了一层"拦截",外界对该对象的访问,都必须先通过这层拦截,因此提供 ...

  9. io流转换为Multipart文件

    io流转换为Multipart文件 个人的话是运用到了minio文件服务器保存文件,前端(vue)异步上传文件后,由于要提升用户体验效果,先上传文件到后台服务器,返回视频在文件服务器的link()参数 ...

  10. js 防抖

    // 防抖 作用:防止重复触发事件 var count = 1; var container = document.getElementById('container'); function getU ...