用Python实现古诗词填字游戏(二)

       在上一篇博客中,Mr. PosPro介绍了填字游戏相关程序的第一部分——建立符合我们要求的诗句库。通过对《全唐诗》TXT的分析,我们将诗文提炼成如下格式

索引1Tab标题Tab作者Tab第一句Tab第二句......\n

用Python实现古诗词填字游戏(二)_第1张图片


        其实,上一篇博客只是提供了一个思路,如果你下载的是《毛主席诗词》,也可以分析其结构,通过对程序进行适当调整,使其输入符合上述格式要求的文件,这样你就可以有一个主席诗词填字游戏啦。
当然,只要不怕麻烦,你也可以通过手敲文字,建立一个满足要求的文本文件(作为诗文库)

        有了诗文库,我们就可以考虑下面一个问题了,如何在选好诗句后按照如下格式输出?
用Python实现古诗词填字游戏(二)_第2张图片

       其实,如果去找找,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,程序实例,填字游戏)