python实现诗歌游戏(类继承)
本文实例为大家分享了python实现诗歌游戏的具体代码,供大家参考,具体内容如下
具体游戏有:根据上句猜下句、猜作者、猜朝代、猜诗名等
如果有更好玩儿的游戏,不妨自己写一下
1.首先,先把搜集到的诗歌全部放到一个txt文件下,命名为poems.txt
2.其次,再定义一个poem类,执行的时候输出诗歌的名字,作者,朝代等,代码如下:
classPoem: def__init__(self): self.title='' self.dynasty='' self.author='' self.sentences=[] def__str__(self): return'{}\n{}\n{}\n{}'.format( self.title,self.dynasty,self.author,'\n'.join(self.sentences))
3.加载出来诗歌的所有部分,代码如下:
fromenumimportEnum frompoemimportPoem Poems=[] defload(): classReadState(Enum): Nothing=0 Title=1 DynastyAndAuthor=2 Sentences=3 print('开始加载诗歌') f=open('poems.txt',encoding='utf-8') lines=f.readlines() state=ReadState.Title poem=None forlninlines: line=ln.strip() iflen(line)>0: try: ifline.startswith('-'): ifpoemisnotNone: Poems.append(poem) print('.',end='') poem=Poem() poem.title=line.lstrip('-') state=ReadState.DynastyAndAuthor continue ifstate==ReadState.DynastyAndAuthor: dynasty_author=line.split('') poem.dynasty=dynasty_author[0] poem.author=dynasty_author[-1] state=ReadState.Sentences continue ifstate==ReadState.Sentences: poem.sentences.append(line) exceptIndexErrorase: print(line) print('\n共加载{}首诗歌'.format(len(Poems))) print() load()
4.下面开始写具体的功能代码,以猜朝代和猜下句为例。
(1)猜朝代代码如下
#-*-coding:utf-8-*- __author__='wj' __date__='2018/7/209:54' fromgameimportGame classDynastyGame(Game): def__init__(self,poems): super(DynastyGame,self).__init__(poems) self.name='猜朝代' self.rules='根据诗歌猜作者所处的朝代,猜对加10分,猜错不扣分。' defdesign_question(self): """设计问题及答案""" self.answer=self.poem.dynasty #打印题目 print(self.poem.title) print(self.poem.author) print() #enumerate()会将列表中的索引和数据一一对应取出 #i数据的索引s数据 fori,sinenumerate(self.poem.sentences): print(s) ifi>5: print('...') break print() defget_answer(self): """获取答案""" #1.输出问题 print('这首诗的作者是:{}'.format(self.poem.author)) whileTrue: self.user_answer=input('请输入他/她所在的朝代:') #2.判断是否输入了内容 ifself.user_answer: break defjudge(self): """判断答案""" is_ok=super(DynastyGame,self).judge() ifis_ok: self.score+=10 print('回答正确!') else: print('回答错误!') print('{}所在的朝代是:{}'.format(self.poem.author,self.poem.dynasty)) print('您目前的得分为:{}'.format(self.score)) if__name__=='__main__': fromload_poemsimportPoems dynasty=DynastyGame(Poems) dynasty.run()
(2)根据上句猜出下一句的具体代码如下:
#-*-coding:utf-8-*- __author__='wj' __date__='2018/7/2010:45' fromgameimportGame importrandom classFillGame(Game): def__init__(self,poems): super(FillGame,self).__init__(poems) self.name='对下句' self.rules='根据上一句,对出下一句,答对得10分,答错不扣分' defdesign_question(self): #随机取出索引 index=random.randint(0,len(self.poem.sentences)-2) #取出问题答案 answer=self.poem.sentences[index+1] #切片切出不带标点的诗句 self.answer=answer[:-1] #题目 print('{}_____________'.format(self.poem.sentences[index])) print() defget_answer(self): whileTrue: self.user_answer=input('请写出这句诗的下一句:') ifself.user_answer: break defjudge(self): ifsuper(FillGame,self).judge(): self.score+=10 print('回答正确!') else: print('回答错误!') print('正确答案是:{}'.format(self.answer)) Game.print_line() print('您目前的得分为:{}'.format(self.score)) if__name__=='__main__': fromload_poemsimportPoems fill=FillGame(Poems) fill.run()
注:猜作者游戏和猜诗名游戏的代码和猜朝代类似
5.最后把所有游戏整合到一个py文件里(注意:一个游戏是一个py文件,自己在里边声明类,最后只需要调用一下就行),整合后的代码如下所示:
fromload_poemsimportPoems fromgameimportGame fromdynasty_gameimportDynastyGame fromfill_gameimportFillGame fromauthor_gameimportAuthorGame fromtitle_gameimportTitleGame classPoemGame(object): """诗词游戏""" def__init__(self): self.version='1.0' self.games=[DynastyGame(Poems),FillGame(Poems),AuthorGame(Poems),TitleGame(Poems)] deflist(self): """列出所有游戏玩法""" print('请选择玩法:') Game.print_double_line() fori,ginenumerate(self.games): print('{:<10}{}'.format(i+1,g.name)) Game.print_line() defplay(self): """根据用户选择的玩法执行游戏""" whileTrue: self.list() idx=input('请输入游戏编号,输入q退出:') ifidx=='q': print('ByeBye~') break Game.print_line() #根据索引取出图形对象 idx=int(idx) g=self.games[idx-1] g.run() defrun(self): """运行游戏""" print('欢迎来到诗词诗词大会') print('v{}'.format(self.version)) self.play() if__name__=='__main__': g=PoemGame() g.run()
以上就是整个项目的所有代码了,在这个小项目中,我使用了类继承的方法,在不断修改代码的同时,也让我更加熟悉了类继承的特点和用法。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。