您的位置:首页 > 编程语言 > Python开发

用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自己会说话,看代码吧:
## 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另一个让人舒服之处了——可以把函数放在单独的文件中,每写好一个函数,可以进行独立的测试,非常方便。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: