小试牛刀的简易成语接龙。
思路——
1、网上下载成语字典的txt版本
2、通过python进行处理得到格式化的成语,并整理成字典(python字典查找速度快)
3、python程序,查找 用户输入的最后一个字和字典里首字一致的,放入列表,并通过random进行随机选择,然后输出
字典整理部分:转换成字典
file = open(r'D:\Desktop\zidian.txt').readlines() f = open(r'D:\Desktop\zidian3.txt','w') x={} num = 0 for i in file: print i[2:10] x[num] = i[2:10] f.write("'%s':u'%s',\n"%(num,i[2:10])) num+=1 f.close()
转换成字典——类似格式
chengyu = {
'0':u'阿党比周',
'1':u'阿平绝倒',
'2':u'阿权膴仕',
'3':u'阿时趋俗',
'4':u'阿世媚俗',
'5':u'阿世取容'……}
判断部分:通过input获取成语,然后截取最后一个字,在字典中寻找该字开头的成语,并输出。加入try,except,防止找不到成语的错误。(字典不全,只有20000+数据)
while 1:
list = []
s =raw_input('请输入成语:')
ns = s.decode('gbk')[-1:]
try:
for i in chengyu.values():
ni = i[:1]
if ns == ni:
list.append(i)
print u'接龙:',len(list),random.choice(list)
except:
print u'接龙:是在下输了'
效果图:没有进行优化处理,没有判断用户输入是否输入正确成语。
程序比较简易,主要困难在于编码的转换,困惑了很久。
1、判断字是否相等的时候,如果编码格式不一致,是不能比较的,会发生错误。str是gbk编码,先解码成unicode,然后在进行比较。
2、如果不知道编码,可使用isinstance(s, unicode)判断,或者import chardet,然后用chardet.detect(TestData)查询格式(偶然看到关于编码,这里有比较好的说明http://www.cnblogs.com/drsnow/p/7017129.html)
3、先解码s.decode('gbk')[-1:],和s[-1:].decode('gbk')是不一样的效果,前者是对的,后者也会出错