最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實現(xiàn)詩歌游戲(類繼承)

 更新時間:2019年02月26日 11:04:26   作者:我是李玉峰  
這篇文章主要為大家詳細介紹了python實現(xiàn)詩歌游戲,根據(jù)上句猜下句、猜作者、猜朝代、猜詩名,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了python實現(xiàn)詩歌游戲的具體代碼,供大家參考,具體內(nèi)容如下

具體游戲有:根據(jù)上句猜下句、猜作者、猜朝代、猜詩名等

如果有更好玩兒的游戲,不妨自己寫一下

1.首先,先把搜集到的詩歌全部放到一個txt文件下,命名為poems.txt

2.其次,再定義一個poem類,執(zhí)行的時候輸出詩歌的名字,作者,朝代等,代碼如下:

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 Enum
from 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 = '根據(jù)詩歌猜作者所處的朝代,猜對加10分,猜錯不扣分。'
 
  def design_question(self):
    """設(shè)計問題及答案"""
    self.answer = self.poem.dynasty
 
    # 打印題目
    print(self.poem.title)
    print(self.poem.author)
    print()
    # enumerate() 會將列表中的索引和數(shù)據(jù)一一對應(yīng)取出
    # i 數(shù)據(jù)的索引  s數(shù)據(jù)
    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.判斷是否輸入了內(nèi)容
      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)根據(jù)上句猜出下一句的具體代碼如下:

# -*- coding: utf-8 -*-
__author__ = 'wj'
__date__ = '2018/7/20 10:45'
 
from game import Game
import random
 
 
class FillGame(Game):
  def __init__(self, poems):
 
    super(FillGame, self).__init__(poems)
    self.name = '對下句'
    self.rules = '根據(jù)上一句,對出下一句,答對得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文件,自己在里邊聲明類,最后只需要調(diào)用一下就行),整合后的代碼如下所示:

from load_poems import Poems
from game import Game
from dynasty_game import DynastyGame
from fill_game import FillGame
from author_game import AuthorGame
from 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):
    """根據(jù)用戶選擇的玩法執(zhí)行游戲"""
    while True:
      self.list()
      idx = input('請輸入游戲編號,輸入q退出:')
      if idx == 'q':
        print('Bye Bye~')
        break
      Game.print_line()
 
      # 根據(jù)索引取出圖形對象
      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()

以上就是整個項目的所有代碼了,在這個小項目中,我使用了類繼承的方法,在不斷修改代碼的同時,也讓我更加熟悉了類繼承的特點和用法。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python實現(xiàn)簡單的語音識別系統(tǒng)

    Python實現(xiàn)簡單的語音識別系統(tǒng)

    這篇文章主要介紹了Python實現(xiàn)簡單的語音識別系統(tǒng),具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Python多進程multiprocessing用法實例分析

    Python多進程multiprocessing用法實例分析

    這篇文章主要介紹了Python多進程multiprocessing用法,結(jié)合實例形式分析了Python多線程的概念以及進程的創(chuàng)建、守護進程、終止、退出進程、進程間消息傳遞等相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • 啥是佩奇?使用Python自動繪畫小豬佩奇的代碼實例

    啥是佩奇?使用Python自動繪畫小豬佩奇的代碼實例

    今天小編就為大家分享一篇關(guān)于啥是佩奇?使用Python自動繪畫小豬佩奇的代碼實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • python中的eval函數(shù)使用實例

    python中的eval函數(shù)使用實例

    eval() 函數(shù)用來執(zhí)行一個字符串表達式,并返回表達式的值,這篇文章主要介紹了python中的eval函數(shù),需要的朋友可以參考下
    2022-11-11
  • 超級好用的4個Python命令行可視化庫

    超級好用的4個Python命令行可視化庫

    通常大家都是在自己的電腦上跑程序,直接是可以可視化相應(yīng)的結(jié)果.如果是在服務(wù)器上的話,使用終端,是不太方便查看結(jié)果. 今天,小F就給大家介紹4個可以在命令行中使用的Python庫. 分別是Bashplotlib、tqdm、PrettyTable、Colorama,需要的朋友可以參考下
    2021-06-06
  • Python bisect模塊原理及常見實例

    Python bisect模塊原理及常見實例

    這篇文章主要介紹了Python bisect模塊原理及常見實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • pytorch中的優(yōu)化器optimizer.param_groups用法

    pytorch中的優(yōu)化器optimizer.param_groups用法

    這篇文章主要介紹了pytorch中的優(yōu)化器optimizer.param_groups用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python項目運行導(dǎo)致內(nèi)存越來越大的原因詳析

    python項目運行導(dǎo)致內(nèi)存越來越大的原因詳析

    最近在跑python程序時,出現(xiàn)占用的內(nèi)存不斷增加的情況,下面這篇文章主要給大家介紹了關(guān)于python項目運行導(dǎo)致內(nèi)存越來越大的原因詳析,本文通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • TensorFlow保存TensorBoard圖像操作

    TensorFlow保存TensorBoard圖像操作

    這篇文章主要介紹了TensorFlow保存TensorBoard圖像操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 分享PyCharm最新激活碼(真永久激活方法)不用每月找安裝參數(shù)或最新激活碼了

    分享PyCharm最新激活碼(真永久激活方法)不用每月找安裝參數(shù)或最新激活碼了

    這篇文章主要介紹了分享PyCharm最新激活碼(真永久激活方法)不用每月找安裝參數(shù)或最新激活碼了一勞永逸,需要的朋友可以參考下
    2020-12-12

最新評論

江阴市| 乾安县| 灵山县| 大连市| 吴旗县| 荃湾区| 鄂托克前旗| 濮阳市| 中阳县| 瑞丽市| 图木舒克市| 横山县| 若尔盖县| 罗城| 黎平县| 章丘市| 屯留县| 通渭县| 中超| 汾西县| 湖南省| 象山县| 鄂温| 红原县| 呈贡县| 双柏县| 中卫市| 蕲春县| 和平区| 新泰市| 乌兰县| 图们市| 临澧县| 阳西县| 新源县| 湘潭市| 山东省| 托克逊县| 巨鹿县| 石河子市| 罗江县|