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()
以上就是整个项目的所有代码了,在这个小项目中,我使用了类继承的方法,在不断修改代码的同时,也让我更加熟悉了类继承的特点和用法。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。