本文实例为大家分享了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 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 = '根据诗歌猜作者所处的朝代,猜对加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 Game

import 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 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):

"""根据用户选择的玩法执行游戏"""

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()

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

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

python写诗代码_python实现诗歌游戏(类继承)相关推荐

  1. python写了代码_Python写代码的用法建议

    1.Mutable and immutable types Python有两种内置或用户定义的类型 可变类型是允许就地修改内容的类型.典型的可变列表是列表和词典:所有列表都有变异方法,如 list.a ...

  2. python写前端代码_python学习之路前端-JavaScript

    JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果.通常JavaScript脚本是通过嵌入在HTML中来实现 ...

  3. python编程小代码_Python趣味小游戏编写代码

    这篇文章教大家用Python编写一些有趣的小程序,用到的都是一些简单的基础的python语句,适合刚入门的小白,可以尝试跟着一起敲一下,感受一下编程中的乐趣. 数字炸弹 相信大家在聚餐时都玩过猜数字游 ...

  4. python写前端代码_python前端学习之移动端和bootstrap

    我们为什么要写自适应的页面(响应式页面) 众所周知,电脑.平板.手机的屏幕是差距很大的,假如在电脑上写好了一个页面,在电脑上看起来不错,但是如果放到手机上的话,那可能就会乱的一塌糊涂,这时候怎么解决呢 ...

  5. python写接口测试代码_python写运单接口测试(增改查)完整代码

    importrequestsimportjsonfrom urllib importparseclassHttpWayBillRquest:'''运单的增改查''' defaccess_token(s ...

  6. python人机石头剪刀布代码_Python实现石头剪刀布游戏的代码

    利用随机函数制作石头剪刀布小游戏 程序只运行一次 import random a = input("请出拳(石头/剪刀/布):") b = ["剪刀", &qu ...

  7. python写推箱子_python写的推箱子小游戏

    原标题:python写的推箱子小游戏 导语 Python 功能强大,可以写爬虫.服务器.数据分析.AI--当然,也可以写游戏. 用python写了个推箱子小游戏,在这里分享给大家,让我们愉快地开始吧~ ...

  8. python抽奖游戏_利用Python写一个抽奖程序,解密游戏内抽奖的秘密

    原标题:利用Python写一个抽奖程序,解密游戏内抽奖的秘密 前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 极客 ...

  9. Python写的代码打包成.exe可执行文件

    Python写的代码打包成.exe可执行文件 1. 安装pyinstaller 2. [在线生成icon](http://www.ico51.cn/) 3. 打包命令 pyinstaller -i x ...

  10. python写表情代码

    python写表情代码 #coding=utf-8 for i in range(0x1f600,0x1f650):print(chr(i),end=" ")if i%16==15 ...

最新文章

  1. 从零开始写一个武侠冒险游戏-3-地图生成
  2. 关于jetty的那些奇葩问题
  3. Dubbo快速启动示例
  4. mysql高可用集群——MHA架构
  5. android8 通知呼吸灯_android学习笔记----解决兼容8.0以上和8.0之前版本通知栏显示、振动、LED呼吸灯闪烁问题(真机验证)...
  6. matlab飞行数据仿真,基于MATLAB的飞行仿真
  7. (11)css常用样式—display显示模式
  8. 【华为云实战开发】6.Cocos游戏项目如何在云端开发
  9. 达到什么算法水平可以面试百度AI岗
  10. 用shell查找某目录下的最大文件
  11. [ERROR CRI]: unable to check if the container runtime at “/var/run/dockershim.sock“
  12. 【尚硅谷】JavaWeb
  13. 汪文君高并发编程总结-第一阶段
  14. Java程序员的职业规划
  15. VSCode使用Vim插件心得
  16. 微信小程序开发与公众号运营有什么区别
  17. 怎么制作有趣的表情包
  18. python ui框架哪个最好用_Python UI开发最常用到的库
  19. 高速数据线缆自动化测试系统软件NSAT-1000
  20. 升级到OPENWRT 19.07后LUCI报错

热门文章

  1. HTML+CSS网页设计期末课程大作业:个人网站设计——个人介绍(7页) web前端开发技术 web课程设计 网页规划与设计
  2. linux蜂鸣器驱动
  3. 内网穿透之HTTP穿透
  4. 计算机中的睡眠和休眠
  5. OWASP zap 代理设置
  6. windows开代理服务器
  7. 4位先行进位加法器_第4章 C语言基础以及流水灯的实现
  8. OK6410A 开发板 (二) 环境熟悉
  9. Python简答题编程题
  10. java中创建一个类