香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > python >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

python实现诗歌游戏(类继承)


时间:2022-04-02 10:20 作者:admin610456


本文实例为大家分享了python/' target='_blank'>python实现诗歌游戏的具体代码,供大家参考,具体内容如下

具体游戏有:根据上句猜下句、猜作者、猜朝代、猜诗名等

如果有更好玩儿的游戏,不妨自己写一下

1.首先,先把搜集到的诗歌全部放到一个txt文件下,命名为poems.txt

2.其次,再定义一个poem类,执行的时候输出诗歌的名字,作者,朝代等,代码如下:

class Poem:   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.加载出来诗歌的所有部分,代码如下:

from enum import Enumfrom poem import Poem  Poems = []  def load():  class ReadState(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   for ln in lines:    line = ln.strip()    if len(line) > 0:      try:        if line.startswith('-'):          if poem is not None:            Poems.append(poem)            print('.', end='')          poem = Poem()          poem.title = line.lstrip('-')          state = ReadState.DynastyAndAuthor          continue        if state == ReadState.DynastyAndAuthor:          dynasty_author = line.split(' ')          poem.dynasty = dynasty_author[0]          poem.author = dynasty_author[-1]          state = ReadState.Sentences          continue        if state == ReadState.Sentences:          poem.sentences.append(line)      except IndexError as e:        print(line)  print('\n共加载{}首诗歌'.format(len(Poems)))  print()  load()

4.下面开始写具体的功能代码,以猜朝代和猜下句为例。

(1)猜朝代代码如下

# -*- coding: utf-8 -*-__author__ = 'wj'__date__ = '2018/7/20 9:54' from game import Game  class DynastyGame(Game):   def __init__(self, poems):    super(DynastyGame, self).__init__(poems)    self.name = '猜朝代'    self.rules = '根据诗歌猜作者所处的朝代,猜对加10分,猜错不扣分。'   def design_question(self):    """设计问题及答案"""    self.answer = self.poem.dynasty     # 打印题目    print(self.poem.title)    print(self.poem.author)    print()    # enumerate() 会将列表中的索引和数据一一对应取出    # i 数据的索引  s数据    for i, s in enumerate(self.poem.sentences):      print(s)      if i > 5:        print('...')        break    print()   def get_answer(self):    """获取答案"""    # 1.输出问题    print('这首诗的作者是:{}'.format(self.poem.author))     while True:      self.user_answer = input('请输入他/她所在的朝代:')      # 2.判断是否输入了内容      if self.user_answer:        break   def judge(self):    """判断答案"""    is_ok = super(DynastyGame, self).judge()     if is_ok:      self.score += 10       print('回答正确!')    else:      print('回答错误!')      print('{}所在的朝代是:{}'.format(self.poem.author, self.poem.dynasty))     print('您目前的得分为:{}'.format(self.score))  if __name__ == '__main__':  from load_poems import Poems  dynasty = DynastyGame(Poems)  dynasty.run() 

(2)根据上句猜出下一句的具体代码如下:

# -*- coding: utf-8 -*-__author__ = 'wj'__date__ = '2018/7/20 10:45' from game import Gameimport random  class FillGame(Game):  def __init__(self, poems):     super(FillGame, self).__init__(poems)    self.name = '对下句'    self.rules = '根据上一句,对出下一句,答对得10分,答错不扣分'   def design_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()   def get_answer(self):     while True:       self.user_answer = input('请写出这句诗的下一句:')      if self.user_answer:        break   def judge(self):     if super(FillGame, self).judge():      self.score += 10      print('回答正确!')    else:      print('回答错误!')      print('正确答案是:{}'.format(self.answer))     Game.print_line()    print('您目前的得分为:{}'.format(self.score))  if __name__ == '__main__':  from load_poems import Poems  fill = FillGame(Poems)  fill.run()

注:猜作者游戏和猜诗名游戏的代码和猜朝代类似

5.最后把所有游戏整合到一个py文件里(注意:一个游戏是一个py文件,自己在里边声明类,最后只需要调用一下就行),整合后的代码如下所示:

from load_poems import Poemsfrom game import Gamefrom dynasty_game import DynastyGamefrom fill_game import FillGamefrom author_game import AuthorGamefrom title_game import TitleGame  class PoemGame(object):  """诗词游戏"""   def __init__(self):     self.version = '1.0'    self.games = [DynastyGame(Poems), FillGame(Poems),AuthorGame(Poems),TitleGame(Poems)]   def list(self):    """列出所有游戏玩法"""    print('请选择玩法:')    Game.print_double_line()    for i, g in enumerate(self.games):       print('{:<10}{}'.format(i+1, g.name))     Game.print_line()   def play(self):    """根据用户选择的玩法执行游戏"""    while True:      self.list()      idx = input('请输入游戏编号,输入q退出:')      if idx == 'q':        print('Bye Bye~')        break      Game.print_line()       # 根据索引取出图形对象      idx = int(idx)      g = self.games[idx - 1]      g.run()   def run(self):    """运行游戏"""    print('欢迎来到诗词诗词大会')    print('v{}'.format(self.version))     self.play()  if __name__ == '__main__':   g = PoemGame()  g.run()

以上就是整个项目的所有代码了,在这个小项目中,我使用了类继承的方法,在不断修改代码的同时,也让我更加熟悉了类继承的特点和用法。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)