一个有意思的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的文件夹,运行程序后会在该目录生成测试卷。

 

posted @ 2017-05-14 23:43  负赑屃  阅读(5441)  评论(0编辑  收藏  举报