一个有意思的Python小程序(全国省会名称随机出题)
本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃
最近比较迷Python,仿照《Python编程快速上手》8.5写了一个随机出卷的小程序。程序本身并不难,关键是解决问题的思路,还有就是顺便复习了一下全国地名(缅怀一下周总理)。
OK其实还是有一个难点的,就是关于Python的中文编码问题,如何把中文字典输入到txt然后再把它读出来,程序中借用了json方法,而且在输出时decode、encode,有一些参考的价值吧。废话不说了,上程序。
# *encoding:utf-8 *
from __future__ import print_function
import os
import json
import random
#总理的诗:两湖两广两河山,五江云贵福吉安,四西二宁青甘陕,还有内台北上天
capitals = {'湖南':'长沙','湖北':'武汉','广东':'广州','广西':'南宁','河北':'石家庄','河南':'郑州','山东':'济南','山西':'太原',
'江苏':'南京','浙江':'杭州','江西':'南昌','黑龙江':'哈尔滨','新疆':'乌鲁木齐','云南':'昆明','贵州':'贵阳','福建':'福州','吉林':'吉林','安徽':'合肥',
'四川':'成都','西藏':'拉萨','宁夏':'银川','辽宁':'长春','青海':'西宁','甘肃':'兰州','陕西':'太原',
'内蒙古':'呼和浩特','台湾':'台北','北京':'北京','上海':'上海','天津':'天津','重庆':'重庆',
'香港':'香港','澳门':'澳门',}
#将测试集合保存为txt,中文字典转字符串后很难处理,所以借用json处理,json.dumps转字符串
capitalslContent = json.dumps(capitals, encoding = 'utf-8', ensure_ascii = False)
capitalTxt = open('./lesson8/capitals.txt','w')
capitalTxt.write(capitalslContent)
capitalTxt.close() #从txt中读取测试集合
capitalTxt = open('./lesson8/capitals.txt')
capitals = json.loads(capitalTxt.read()) #直接print为Unicode编码字典
# capitals = json.dumps(capitals,ensure_ascii=False) #输出中文字符串编码
# for key,value in capitals.items(): #遍历字典输出中文的key和value
# print(key+':'+value)
capitalTxt.close()
#生成首府测试集合试卷(随机生成试卷2份)
for qNum in range(2):
qFile = open('./lesson8/capitalQuestions%s.txt'%(qNum+1),'w')
aFile = open('./lesson8/capitalAnswers%s.txt'%(qNum+1),'w')
qFile.write('姓名:\n\n日期:\n\n学号:\n\n')
qFile.write((' '*20)+'全国省会名称测试 (地理卷%s)\n\n'%(qNum+1))
states = list(capitals.keys())
random.shuffle(states)
for questionNum in range(len(capitals)):
correctA = capitals[states[questionNum]]
wrongA = list(capitals.values())
del wrongA[wrongA.index(correctA)]
wrongA = random.sample(wrongA,3)
answerOption = wrongA+[correctA]
random.shuffle(answerOption)
qFile.write('%s. %s的省会是_____\n'%(questionNum+1,states[questionNum].encode('utf-8')))
for i in range(4):
qFile.write('%s. %s\n'%('ABCD'[i],answerOption[i].encode('utf-8')))
qFile.write('\n')
aFile.write('%s. %s\n'%(questionNum+1,'ABCD'[answerOption.index(correctA)]))
qFile.close()
aFile.close()
注意,没有检测文件路径,需要在当前文件夹下新建一个lesson8的文件夹,运行程序后会在该目录生成测试卷。
一个有意思的Python小程序(全国省会名称随机出题)的更多相关文章
- 微信小程序答题系统实现随机出题 答题小程序如何实现随机出题 微信小程序 答题系统
最近头脑王者非常火爆,公司也在开发类似头脑王者的答题系统,这个重任交到我这边来了,我们在开发的这个微信小程序答题系统,需要实现随机出题.尤其是一些比如闯关的环节,需要随机从题库里抽取若干道题目,给到用 ...
- Day1:第一个python小程序
Day1:第一个python小程序与开发工具Pycharm 一.Hello World C:\Users\wenxh>python Python 3.6.2 (v3.6.2:5fd33b5, J ...
- 怎么样通过编写Python小程序来统计测试脚本的关键字
怎么样通过编写Python小程序来统计测试脚本的关键字 通常自动化测试项目到了一定的程序,编写的测试代码自然就会很多,如果很早已经编写的测试脚本现在某些基础函数.业务函数需要修改,那么势必要找出那些引 ...
- Python 小程序,对文件操作及其它
以下是自己写的几个对文件操作的小程序,里面涉及到文件操作,列表(集合,字典)的运用等.比方说,从文件里读取一行数据.分别存放于列表中,再对列表进行操作.如去掉里面的反复项.排序等操作. 常见对文件里行 ...
- 实现一个servlet的helloworld小程序(不适用Eclipse)
实现一个servlet的helloworld小程序(不适用Eclipse) 1. 在tomcat中的webapps下建一个应用程序FirstServlet(C:\tomcat\webapps\Firs ...
- 一个简单的python爬虫程序
python|网络爬虫 概述 这是一个简单的python爬虫程序,仅用作技术学习与交流,主要是通过一个简单的实际案例来对网络爬虫有个基础的认识. 什么是网络爬虫 简单的讲,网络爬虫就是模拟人访问web ...
- 微信小程序-全国快递查询
微信小程序-全国快递查询 摘要:WeChat.小程序.JS 开发过程 源码下载 1. GitHub 2. 百度云 链接:https://pan.baidu.com/s/1XVbtT2JsZslg4Y0 ...
- 【云开发】10分钟零基础学会做一个快递查询微信小程序,快速掌握微信小程序开发技能(轮播图、API请求)
大家好,我叫小秃僧 这次分享的是10分钟零基础学会做一个快递查询微信小程序,快速掌握开发微信小程序技能. 这篇文章偏基础,特别适合还没有开发过微信小程序的童鞋,一些概念和逻辑我会讲细一点,尽可能用图说 ...
- 制作一个windows垃圾清理小程序
制作一个windows垃圾清理小程序: 把下列代码保存为.bat文件(如垃圾清理.bat) 双击它就能很快地清理垃圾文件,大约一分钟不到. 就是下面的文字(这行不用复制)=============== ...
随机推荐
- Struts第八篇【资源国际化、对比JSP的资源国际化】
资源国际化 我们在学JSTL标签的时候就涉及到了资源国际化,,,但是呢,在JSP的章节我并没有写博文来讲解怎么弄-.一方面感觉JSP的资源国际化好麻烦,另一方面是感觉用的地方很少-..因此就没有深入去 ...
- 如何延长IntelliJ IDEA的试用期?
想打开idea写个代码...提示idea快过期...不开森...然鹅. 根据网上各种说明,总结大体分为以下4种方法: 方法1.直接输入激活码Activation Code(亲自验证有效而且非常简单 ...
- 如何使用fiddler抓取https请求(PC和移动端)
最近做一个抓取移动端app接口,并执行评论,收藏的接口功能测试.怎么搞/(ㄒoㄒ)/~~ 按照老思路试一试,第一步还是要用fiddler来帮忙获取接口信息! 一.基本的抓取http请求设置: 1.cm ...
- Nexus5/6刷 lineageos 过程
如题,好久没刷机,体验下lineageos 由于之前Xposed官方一直没支持7.x,就没更新 测试三方Xposed正常使用,记录下过程供参考 注意,刷机有风险,刷机前备份,可以使用钛备份 0x01: ...
- [js高手之路] 设计模式系列课程 - DOM迭代器(2)
如果你对jquery比较熟悉的话,应该用过 eq, first, last, get, prev, next, siblings等过滤器和方法.本文,我们就用迭代设计模式来封装实现,类似的功能 < ...
- 尝试在Linux上部署Asp.net Core应用程序
快两个月没接触.net,倒是天天在用Linux,所以想尝试一下在Linux运行喜欢的.net 应用. 安装CentOS 安装.Net core for Linux 创建Asp.net Core应用程序 ...
- Django(博客系统):按照时间分层筛选“/blog/article/?create_time__year=2017”,出现问题:Database returned an invalid datetime value. Are time zone definitions for your database installed?
问题背景 添加文章时间没问题,但为了设定博客文章按照时间分层筛选(创建时间的年份.年月&月份来搜索文章),我在blog这个django app的admin.py的ArticleAdmin类中做 ...
- include 和require的区别
相同点:include和require 都能把另外一个文件包含到当前文件中. 不同点:1.使用include时,当包含的文件不存在时,系统会报出警告级别的错误,程序会继续往下执行. 使用requi ...
- hdu 4468 spy 极其精彩的一道kmp灵活运用题
出的超级好的一道题.至于好在哪里,请思考题目: 题意抽象出来为给定一个字符串r,找出它的一个最短后缀s,使得这个r可以被 s的某前缀+s的某前缀+......+s的某前缀+s本身构造出来. 具体题目描 ...
- python apschedule安装使用与源码分析
我们的项目中用apschedule作为核心定时调度模块.所以对apschedule进行了一些调查和源码级的分析. 1.为什么选择apschedule? 听信了一句话,apschedule之于pytho ...