用Python实现古诗词填字游戏(二)
2016-01-07 10:11
1571 查看
在上一篇博客中,Mr. PosPro介绍了填字游戏相关程序的第一部分——建立符合我们要求的诗句库。通过对《全唐诗》TXT的分析,我们将诗文提炼成如下格式
索引1Tab标题Tab作者Tab第一句Tab第二句......\n
其实,上一篇博客只是提供了一个思路,如果你下载的是《毛主席诗词》,也可以分析其结构,通过对程序进行适当调整,使其输入符合上述格式要求的文件,这样你就可以有一个主席诗词填字游戏啦。
当然,只要不怕麻烦,你也可以通过手敲文字,建立一个满足要求的文本文件(作为诗文库)
有了诗文库,我们就可以考虑下面一个问题了,如何在选好诗句后按照如下格式输出?
其实,如果去找找,Python应该有一些GUI实现窗口化的输出,但为了保持程序的精炼,PosPro计划用DOS窗口输出结果。此时我们就需要明确一下我们的需求了:
(二)将选定的诗文(可能是横排也可能是竖排),输出到DOS界面的规定位置
我们再用程序语言来反向思考一下这个问题,其实我们的程序需要的输入是什么?——输入的参数应该是:文字,文字输出行,文字输出的列,在Python中,我们很自然的就可以把程序的输入定义为一个list,list的每个元素都是一个tuple,tuple的构成为(x,y,char)。
有了输入,我们如何把字符放到对应位置呢?
其实很简单:DOS界面的每一行可以输出40个中文字符,那么(2,2)所表示的第2行第2个字符,显然就是第42个字符。我们先把输出设置为一个40×10的空字符,然后把输入参数的每一个字符替换对应位置的空字符即可。还是那句话,Python自己会说话,看代码吧:
请关注一下最后两句被注释掉的内容,这部分是函数测试语句。这就是Python另一个让人舒服之处了——可以把函数放在单独的文件中,每写好一个函数,可以进行独立的测试,非常方便。
索引1Tab标题Tab作者Tab第一句Tab第二句......\n
其实,上一篇博客只是提供了一个思路,如果你下载的是《毛主席诗词》,也可以分析其结构,通过对程序进行适当调整,使其输入符合上述格式要求的文件,这样你就可以有一个主席诗词填字游戏啦。
当然,只要不怕麻烦,你也可以通过手敲文字,建立一个满足要求的文本文件(作为诗文库)
有了诗文库,我们就可以考虑下面一个问题了,如何在选好诗句后按照如下格式输出?
其实,如果去找找,Python应该有一些GUI实现窗口化的输出,但为了保持程序的精炼,PosPro计划用DOS窗口输出结果。此时我们就需要明确一下我们的需求了:
(二)将选定的诗文(可能是横排也可能是竖排),输出到DOS界面的规定位置
我们再用程序语言来反向思考一下这个问题,其实我们的程序需要的输入是什么?——输入的参数应该是:文字,文字输出行,文字输出的列,在Python中,我们很自然的就可以把程序的输入定义为一个list,list的每个元素都是一个tuple,tuple的构成为(x,y,char)。
有了输入,我们如何把字符放到对应位置呢?
其实很简单:DOS界面的每一行可以输出40个中文字符,那么(2,2)所表示的第2行第2个字符,显然就是第42个字符。我们先把输出设置为一个40×10的空字符,然后把输入参数的每一个字符替换对应位置的空字符即可。还是那句话,Python自己会说话,看代码吧:
## Created by PosPro ## http://blog.csdn.net/pospro def printOnScreen(info): newStr=' '*(40*10) #40列10行已经足够我们显示了,PosPro says:注意上面的空格是个中文空格!! newList=list(newStr) #把字符串编程list以方便下面的直接索引操作 #如果输入值对某个坐标位置有定义,则将该位置的空格换成对应字符 for pinfo in info: newList[40*pinfo[1]+pinfo[0]]=pinfo[2] #再把list变回字符串,以方便输出 finalStr=''.join(newList) print(finalStr) #info=[(0,0,'天'),(1,0,'地'),(3,0,'人'),(2,1,'日'),(2,2,'月'),(5,20,'风')] #printOnScreen(info)
请关注一下最后两句被注释掉的内容,这部分是函数测试语句。这就是Python另一个让人舒服之处了——可以把函数放在单独的文件中,每写好一个函数,可以进行独立的测试,非常方便。
相关文章推荐
- Python风格规范
- 4.3. The range() Function(range 函数)
- python高手之路python处理excel文件(方法汇总)
- python zip(), map()
- Python解析最简单的验证码
- 4.2. for Statements(for 语句)
- 4.1. if Statements(if 语句)
- Python数据科学安装Numby,pandas,scipy,matpotlib等(IPython安装pandas)
- Python数据科学安装Numby,pandas,scipy,matpotlib等(IPython安装pandas)
- 【LEETCODE】11-Container With Most Water [Python]
- python之路--线程和进程
- Python的垃圾回收机制
- Python web开源框架整理
- 持续集成学好jenkins之内置命令
- python基础知识——编码
- 持续集成学好jenkins之Git和Maven配置
- python 入门
- Python 学习过程一些小的知识点汇总 备忘
- Python-elementTree方法解析xml文件-01
- Python解析最简单的验证码