我们在上上篇博客中准备好了输入,在上一篇中准备好了输出,于是我们来到了最关键和最核心的部分——选出诗句和共同字,同时确定输出位置。
程序的思路很清晰:
a. 从输入中读入诗句内容,保存在一个list中,以便反复使用
b. 为了增加趣味性,使用随机数,确定第一句诗以及第一个共同字(这样可以确保每一次的输出都不一样,但也产生了不能成功输出的风险)
c. 根据确定的共同字,找到下一句包含该共同字的诗文,同时在此句中随机选定下一个共同字
d. 找到包含第二个共同字的诗句
同时,在每次确定输出诗句的时候,要对应给出输出坐标。第一、三句应水平输出,第二句竖直输出。这里多做一点说明,PosPro将屏幕左上角作为原点,向右为x正方向,向下为y正方向,初始坐标为(0,0),每个中文字符占一个坐标位,所以最后输出的字符x,y坐标都应该大于等于0。
程序分析:
1)首先是一些全局变量
NUMofPOEM=1500 #可以自定义的值,即“诗库”中总共有多少诗(也即多少行)
MAXLINES=3 #最多出现的诗句数
allPoems=[] #记录所有读入的诗句
usedPoems=[] #int构成的list,保存的是已用过的诗句编号
keyCharList=[] #记录每个关键字(被略去的字)的值及坐标:(char,x,y)
outputLines=[] #记录每一个输出的诗句,每个元素都是[x,y,char]的形式
coordinateFirstChar=[] #对于每个待输出的句子,记录其首字坐标(x,y)
coverLetter=('?','#','¥','%') #用以替换掉关键字的字符,PosPro says:注意都是中文符号!!
2)程序主体部分:调用函数完成:找第一句,第二句,第三句的任务,整理坐标后,输出。(嗯?听起来像废话?)
#把所有诗句保存在allPoems中,以方便后续多次查找
#singleLine.txt中每一行都是一首诗:包括编号、标题、作者、诗句内容
#txt中每一部分以Tab隔开
with open('singleLine.txt',encoding='gbk',errors="ignore") as f:
for line in f:
line=line.rstrip()
newList=list(line.split('\t'))
allPoems.append(newList)
randomNum=random.randint(1,NUMofPOEM)
for l in allPoems:
if randomNum==int(l[0]): #根据随机数,随机选出一首诗
usedPoems.append(randomNum)
#usedPoem中
版权声明:本文为PosPro原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。