一个有意思的Python小程序(全国省会名称随机出题)

最近比较迷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的文件夹,运行程序后会在该目录生成测试卷。

时间: 2024-10-13 17:35:48

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

小猪佩奇社会人专用服务器,有意思的python小程序,附python代码

最近社会人小猪佩奇挺热门的,大家都在说社会人,那么我们作为IT人,怎么让我们的服务器也蹭一下社会人的热点的?下面来给大家说说. 先来个效果图: 小猪佩奇社会人专用服务器 哈哈,这样是不是挺有意思的?工作已经很无聊了,如果再不找点乐趣,那还怎么干活? 说说怎么实现的吧,其实这个是通过python代码实现的,而且代码仅仅只有30行. 需要说明的是,这个python代码不仅仅能转换小猪佩奇社会人,而且还能转换各种图片,比如佛祖啊什么的,只要你有色彩对比度差不多的图片,都可以进行转换. 如下图,我换了个

第一个python小程序,2进制转10进制

#Bin to Dec #my first python programe n = c = itm = 0 a = raw_input('please input Binary number:\n') for n in range(0,len(a)):    b = a[n:n+1] #   print 'n is', n #   print 'b is',b #   print 'len',len(a[n:])       if b == '1':    c = 2**(len(a[n:])-

Python 小程序,对文件操作及其他

下面是自己写的几个对文件操作的小程序,里面涉及到文件操作,列表(集合,字典)的运用等.比如说,从文件中读取一行数据,分别存放于列表中,再对列表进行操作,如去掉里面的重复项,排序等操作. 常见对文件中行进行操作: #这里列出两个常用的方法 方法01: 一次性读取所有行 >>> f = file('1.txt') >>> while 1: lines = f.readlines() if not lines: break for line in lines: print l

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

以下是自己写的几个对文件操作的小程序,里面涉及到文件操作,列表(集合,字典)的运用等.比方说,从文件里读取一行数据.分别存放于列表中,再对列表进行操作.如去掉里面的反复项.排序等操作. 常见对文件里行进行操作: #这里列出两个经常使用的方法 方法01: 一次性读取全部行 >>> f = file('1.txt') >>> while 1: lines = f.readlines() if not lines: break for line in lines: print

Python小程序,读取ACCESS数据库,然后list数据

曾经做过的一个Python小程序,读取ACCESS数据库,然后list数据 # -*- coding: cp936 -*-import wximport wx.libimport sys,glob,randomimport win32com.clientreload(sys)sys.setdefaultencoding('utf-8')class DemoFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self,None,-1,u"安

Python小程序练习二之装饰器小例子

Python小程序练习二之装饰器小例子 装饰器: 装饰器实际上就是为了给某程序增添功能,但该程序已经上线或已经被使用,那么就不能大批量的修改源代码,这样是不科学的也是不现实的,因为就产生了装饰器,使得其满足: 1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 那么根据需求,同时满足了这两点原则,这才是我们的目的. 装饰器的原则组成: < 函数+实参高阶函数+返回值高阶函数+嵌套函数+语法糖 = 装饰器 > 错误例子: 1.1Decorators.py 1 # The aut

【转】两天快速开发一个自己的微信小程序 悬笔e绝 www.xuanbiyijue.com

文章出处:https://www.cnblogs.com/xuanbiyijue/p/7980010.html 作者: 悬笔e绝 www.xuanbiyijue.com 两天快速开发一个自己的微信小程序 一.写在前面 1.为什么要学小程序开发? 对于前端开发而言,微信小程序因为其简单快速.开发成本低.用户流量巨大等特点,也就成了前端开发工程师必会的一个技能. 2.先放上我做的小程序 可以在微信小程序搜索“悬笔e绝”,或者用微信扫描下面的二维码哦 (1)欢迎页:这个logo是当年念大学给社团做的l

python小程序之一

来个Python小程序 #输入年月日确定这个日期是一年中的第多少天# -*- coding: UTF-8 -*-y=int(raw_input("请输入年:"))m=int(raw_input("请输入月份:"))d=int(raw_input("请输入日期:"))a=(0,31,28,31,30,31,30,31,31,30,31,30,31)if m>12: raise ValueError("输入月份错误")if

一个字符编码处理小程序(一)

一个字符编码处理小程序(一)以前与他人合作申请了一个汉字输入法编码专利(YXY),现在决定继续在此基础上进行一些开发工作,要将它的编码拆分成前.中.后三个子串,以便作进一步的处理.用户故事可以表达为:作为一个代码的开发人员,需要将YXY编码拆分成前.中.后三个子字符串,以便作进一步的汉字分析处理.下面对照个人开发流程,进行开发工作:一. 计划估计这个任务需要多少开发时间.由于利用业余时间开发,开发时间呈现碎片化的状况:故这里只是估计纯的开发时间,大约需要两周.二. 开发1. 分析需求出入内容:Y