本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃

  

  最近比较迷Python,仿照《Python编程快速上手》8.5写了一个随机出卷的小程序。程序本身并不难,关键是解决问题的思路,还有就是顺便复习了一下全国地名(缅怀一下周总理)。

  OK其实还是有一个难点的,就是关于Python的中文编码问题,如何把中文字典输入到txt然后再把它读出来,程序中借用了json方法,而且在输出时decode、encode,有一些参考的价值吧。废话不说了,上程序。

  1. # *encoding:utf-8 *
  2. from __future__ import print_function
  3. import os
  4. import json
  5. import random
  6. #总理的诗:两湖两广两河山,五江云贵福吉安,四西二宁青甘陕,还有内台北上天
  7. capitals = {'湖南':'长沙','湖北':'武汉','广东':'广州','广西':'南宁','河北':'石家庄','河南':'郑州','山东':'济南','山西':'太原',
  8. '江苏':'南京','浙江':'杭州','江西':'南昌','黑龙江':'哈尔滨','新疆':'乌鲁木齐','云南':'昆明','贵州':'贵阳','福建':'福州','吉林':'吉林','安徽':'合肥',
  9. '四川':'成都','西藏':'拉萨','宁夏':'银川','辽宁':'长春','青海':'西宁','甘肃':'兰州','陕西':'太原',
  10. '内蒙古':'呼和浩特','台湾':'台北','北京':'北京','上海':'上海','天津':'天津','重庆':'重庆',
  11. '香港':'香港','澳门':'澳门',}
  12. #将测试集合保存为txt,中文字典转字符串后很难处理,所以借用json处理,json.dumps转字符串
  13. capitalslContent = json.dumps(capitals, encoding = 'utf-8', ensure_ascii = False)
  14. capitalTxt = open('./lesson8/capitals.txt','w')
  15. capitalTxt.write(capitalslContent)
  16. capitalTxt.close()
  17.  
  18. #从txt中读取测试集合
  19. capitalTxt = open('./lesson8/capitals.txt')
  20. capitals = json.loads(capitalTxt.read()) #直接print为Unicode编码字典
  21. # capitals = json.dumps(capitals,ensure_ascii=False) #输出中文字符串编码
  22. # for key,value in capitals.items(): #遍历字典输出中文的key和value
  23. # print(key+':'+value)
  24. capitalTxt.close()
  25. #生成首府测试集合试卷(随机生成试卷2份)
  26. for qNum in range(2):
  27. qFile = open('./lesson8/capitalQuestions%s.txt'%(qNum+1),'w')
  28. aFile = open('./lesson8/capitalAnswers%s.txt'%(qNum+1),'w')
  29. qFile.write('姓名:\n\n日期:\n\n学号:\n\n')
  30. qFile.write((' '*20)+'全国省会名称测试 (地理卷%s)\n\n'%(qNum+1))
  31. states = list(capitals.keys())
  32. random.shuffle(states)
  33. for questionNum in range(len(capitals)):
  34. correctA = capitals[states[questionNum]]
  35. wrongA = list(capitals.values())
  36. del wrongA[wrongA.index(correctA)]
  37. wrongA = random.sample(wrongA,3)
  38. answerOption = wrongA+[correctA]
  39. random.shuffle(answerOption)
  40. qFile.write('%s. %s的省会是_____\n'%(questionNum+1,states[questionNum].encode('utf-8')))
  41. for i in range(4):
  42. qFile.write('%s. %s\n'%('ABCD'[i],answerOption[i].encode('utf-8')))
  43. qFile.write('\n')
  44. aFile.write('%s. %s\n'%(questionNum+1,'ABCD'[answerOption.index(correctA)]))
  45. qFile.close()
  46. aFile.close()

注意,没有检测文件路径,需要在当前文件夹下新建一个lesson8的文件夹,运行程序后会在该目录生成测试卷。

一个有意思的Python小程序(全国省会名称随机出题)的更多相关文章

  1. 微信小程序答题系统实现随机出题 答题小程序如何实现随机出题 微信小程序 答题系统

    最近头脑王者非常火爆,公司也在开发类似头脑王者的答题系统,这个重任交到我这边来了,我们在开发的这个微信小程序答题系统,需要实现随机出题.尤其是一些比如闯关的环节,需要随机从题库里抽取若干道题目,给到用 ...

  2. Day1:第一个python小程序

    Day1:第一个python小程序与开发工具Pycharm 一.Hello World C:\Users\wenxh>python Python 3.6.2 (v3.6.2:5fd33b5, J ...

  3. 怎么样通过编写Python小程序来统计测试脚本的关键字

    怎么样通过编写Python小程序来统计测试脚本的关键字 通常自动化测试项目到了一定的程序,编写的测试代码自然就会很多,如果很早已经编写的测试脚本现在某些基础函数.业务函数需要修改,那么势必要找出那些引 ...

  4. Python 小程序,对文件操作及其它

    以下是自己写的几个对文件操作的小程序,里面涉及到文件操作,列表(集合,字典)的运用等.比方说,从文件里读取一行数据.分别存放于列表中,再对列表进行操作.如去掉里面的反复项.排序等操作. 常见对文件里行 ...

  5. 实现一个servlet的helloworld小程序(不适用Eclipse)

    实现一个servlet的helloworld小程序(不适用Eclipse) 1. 在tomcat中的webapps下建一个应用程序FirstServlet(C:\tomcat\webapps\Firs ...

  6. 一个简单的python爬虫程序

    python|网络爬虫 概述 这是一个简单的python爬虫程序,仅用作技术学习与交流,主要是通过一个简单的实际案例来对网络爬虫有个基础的认识. 什么是网络爬虫 简单的讲,网络爬虫就是模拟人访问web ...

  7. 微信小程序-全国快递查询

    微信小程序-全国快递查询 摘要:WeChat.小程序.JS 开发过程 源码下载 1. GitHub 2. 百度云 链接:https://pan.baidu.com/s/1XVbtT2JsZslg4Y0 ...

  8. 【云开发】10分钟零基础学会做一个快递查询微信小程序,快速掌握微信小程序开发技能(轮播图、API请求)

    大家好,我叫小秃僧 这次分享的是10分钟零基础学会做一个快递查询微信小程序,快速掌握开发微信小程序技能. 这篇文章偏基础,特别适合还没有开发过微信小程序的童鞋,一些概念和逻辑我会讲细一点,尽可能用图说 ...

  9. 制作一个windows垃圾清理小程序

    制作一个windows垃圾清理小程序: 把下列代码保存为.bat文件(如垃圾清理.bat) 双击它就能很快地清理垃圾文件,大约一分钟不到. 就是下面的文字(这行不用复制)=============== ...

随机推荐

  1. bootStrap事例代码

    最近在学bootStrap,在慕课网中有这么一个例子-.感觉以后会用到这些代码.保存起来. <!DOCTYPE html> <html lang="zh-cn"& ...

  2. Hibernate第五篇【inverse、cascade属性详解】

    前言 上一篇博文已经讲解了一对多和多对一之间的关系了,一对多和多对一存在着关联关系(外键与主键的关系).本博文主要讲解Inverse属性.cascade属性.这两个属性对关联关系都有影响 Invers ...

  3. YYHS-鏖战字符串

    题目描述 Abwad在nbc即将完成她的程序的时候,急中生智拔掉了她电脑的电源线,争取到了宝贵的时间.作为著名论文<论Ctrl-C与Ctrl-V在信息学竞赛中的应用>的作者,他巧妙地使用了 ...

  4. angular之$watch方法详解

    在$apply方法中提到过脏检查,首先apply方法会触发evel方法,当evel方法解析成功后,会去触发digest方法,digest方法会触发watch方法. (1)$watch简介 在diges ...

  5. 翻译 | 玩转 React 表单 —— 受控组件详解

    原文地址:React.js Forms: Controlled Components 原文作者:Loren Stewart 译者:小 B0Y 校对者:珂珂君 本文涵盖以下受控组件: 文本输入框 数字输 ...

  6. Java 编程思想 Chapter_14 类型信息

    本章内容绕不开一个名词:RTTI(Run-time Type Identification) 运行时期的类型识别 知乎上有人推断作者是从C++中引入这个概念的,反正也无所谓,理解并能串联本章知识才是最 ...

  7. poj3468树状数组的区间更新,区间求和

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 47174   ...

  8. 实现径向变换用于样本增强《Training Neural Networks with Very Little Data-A Draft》

    背景: 做大规模机器学习算法,特别是神经网络最怕什么--没有数据!!没有数据意味着,机器学不会,人工不智能!通常使用样本增强来扩充数据一直都是解决这个问题的一个好方法. 最近的一篇论文<Trai ...

  9. 【转】Windows自动连接、断开无线网络

    前提是先连接到指定的WiFi网络上. 然后通过 netsh wlan export profile 将网络配置文件导出,然后使用如下命令添加配置文件到指定的网络接口上,再执行连接命令即可. netsh ...

  10. 大数据算法设计模式(1) - topN spark实现

    topN算法,spark实现 package com.kangaroo.studio.algorithms.topn; import org.apache.spark.api.java.JavaPai ...