181007:把 Learn Python3 The Hard Way 一书的第43道练习题改成中文版。此外,刻意调低了难度。(话说中文书名翻成《用心学python》不可以么?)

这个游戏勉强算个“有限状态机”,核心在后面的Engine和Map两个类。后者把场景名字(字符串)转化为class名,前者在此基础上调用各class里的函数,从而实现“进入场景”的效果。

from sys import exit
from random import randint
from textwrap import dedentclass Scene(object):def enter(self):print("这是第一个class")print("Subclass it and implement enter().")exit(1)class Death(Scene):quips = ["你死啦","你妈会为你骄傲的","唉,菜鸡...","我的狗狗玩得更好","这让我想起你爸的笑话",]def enter(self):print(Death.quips[randint(0, len(self.quips)-1)])exit(1)class CentralCorridor(Scene):def enter(self):print(dedent("""你的宇宙飞船被外星人入侵了。聪明的你立马想出了对策——先取出炸弹,定好时,自己再乘救生船逃出去。\n正想着,你便从中央走廊出发,准备去武器库。可是,一个黑不溜秋的外星人,被门卡住了。\n你会怎么办呢?\n\t1. 把它推走;\n\t2. 把它拉出来;\n\t3. 把它射死;\n\t4. 讲一个笑话。"""))action = input("[请输入数字]> ")if action in ("1", "3"):print("当你处理好外星人,它背后的队友把你射死了。")return 'death'elif action == "2":print(dedent("""外星人把你压死了。"""))return 'death'elif action == "4":print(dedent("""你笑话讲到一半,自己却突然笑了起来,可外星人也跟着笑,笑着笑着就抱着肚子躺在了地上,你赶紧开枪射死了它。进门的时候,你发现了另外一个外星人,而它已经被压死了。"""))return("laser_weapon_armory")else:print("你很不乖哦,那就重来吧。")return("central_corridor")class LaserWeaponArmory(Scene):def enter(self):print(dedent("""爬过胖子和它队友的尸体,你进入了武器库。你的眼睛检查过了,这里没有活着的外星人了。你摸到装着中子弹的保险柜那边,你回忆着打开柜子的密码,嗯。。是你的生日?"""))code = f"{randint(1,9)}{randint(1,9)}{randint(1,9)}"print(code)guess = input("[密码倒着输?]> ")guesses = 1while guess != code and guesses < 3:print("错误!错误!")guesses += 1guess = input("[嘿,你没看到密码么?]> ")if guess == code:print(dedent("""咔地一声,柜门打开了,你小心翼翼地取出了中子弹"""))return 'the_bridge' else:print(dedent("""你用完了所有机会。你打算坐着等死,然后你死了。"""))return 'death'       class TheBridge(Scene):def enter(self):print(dedent("""你带着中子弹走进了中央控制室,你知道里面有五个外星人,准备好玉石俱焚的准备。\n\t因为作者没有设计战斗系统,所以就让外星人见到中子弹就跑了。你可以:\n\t1. 把炸弹扔过去\n\t2. 安静地放好炸弹\n\t3. 惊呆了"""))action = input("[你要做啥?]> ")if action == "1":print(dedent("""你感觉受到了惊吓,下意识地就把炸弹扔了出去。虽然你牺牲了,但你也击败了外星人。"""))return 'death'elif action == "2":print(dedent("""你很快反应了过来,安置好炸弹后,向救生舱处跑去。"""))return 'escape_pod'elif action == "3":print("呆着干嘛?")return "death"else:print("你很不乖哦,那就重来吧。")return("central_corridor")class EscapePod(Scene):def enter(self):print(dedent("""你发现有五艘船,但你知道只有一艘可以用,而你只有一次机会——没有时间了。"""))good_pod = randint(1,5)print(good_pod)guess = input("[pod #]> ")if int(guess) != good_pod:print(dedent(f"""你跳进{guess}号船,按下发射按钮。然后。。。然后。。。然后。。。最后你牺牲了,但你也击败了外星人。"""))return 'death'else:print(dedent(f"""你跳进{guess}号船,按下发射按钮。然后向着地球飞去。你不敢回头看,但你知道,这场战斗,你赢了!"""))return 'finished'class Finished(Scene):def enter(self):print("你自己一个人过上了幸福快乐的生活")return 'finished'class Engine(object):def __init__(self, scene_map):self.scene_map = scene_mapdef play(self):current_scene = self.scene_map.opening_scene()last_scene = self.scene_map.next_scene('finished')while current_scene != last_scene:# 调用<场景名>.enter(),进入场景next_scene_name = current_scene.enter()# 返回“下一个”场景的场景名,嗯……这里有点绕current_scene = self.scene_map.next_scene(next_scene_name)current_scene.enter()class Map(object):scenes = {'central_corridor':CentralCorridor(),'laser_weapon_armory':LaserWeaponArmory(),'the_bridge':TheBridge(),'escape_pod':EscapePod(),'death':Death(),'finished':Finished(),}def __init__(self, start_scene):self.start_scene = start_scene# 输入场景英文名,调用scenes字典,返回class名。def next_scene(self, scene_name):val = Map.scenes.get(scene_name)return val# 打开场景:输入?调用next_scene,返回class名。def opening_scene(self):return self.next_scene(self.start_scene)a_map = Map('central_corridor')
a_game = Engine(a_map)
a_game.play()

笨方法学python3: ex43中文魔改相关推荐

  1. 笨方法学python3怎么样_抖音笨李白是什么歌 抖音笨李白歌曲歌词介绍

    抖音上的神曲是越来越多,这不最近抖音上的一首笨李白被很多人模仿歌唱,在这之后也有很多的用户在网上搜索笨李白的完整歌词,下面小编就给大家详细介绍一下吧! 抖音笨李白歌曲介绍: 其实这首歌就叫做<B ...

  2. 笨方法学python3怎么样_有个很笨的女朋友,是怎么样的体验?

    我是妹子 ,但是我并不觉笨是可爱. 反而觉得自己是累赘. 为什么别人可以思考过来的东西, 我却需要很费劲? 为什么 ?我的逻辑思维能力很差? 我没有感觉到自己是可爱 ,甚至感到自卑. 一提到学习, 整 ...

  3. 笨方法学python3怎么样_在python3中如何实现《笨方法学Python》ex11中的效果

    书中python2.X的代码: print "How old are you?", age = raw_input() #输入38 实现的效果 How old are you? 3 ...

  4. 笨方法学 python3进阶篇_笨办法学Python 3 进阶篇

    部分准备知识1 如果不喜欢作者的个人流程怎么办2 如果发现自己太糟糕怎么办2 习题0准备工作3 程序员用的编辑器3 Python3.63 工作终端4 pip和virtualenv的配置4 实验笔记4 ...

  5. 笨方法学python3怎么样_男人说女人笨代表什么 这两种意思你都知道吗

    男人的一举一动都透露着他的品质,有些男生总是爱骂人,那么这样的男生一定是十分没有素质的呢.如果一个男生总是说你笨,代表什么呢?是真的觉得你很笨吗?小编为你解答吧! 男人说女人笨代表什么? 有两种意思, ...

  6. 笨方法学python3 mobi_[下载]Learn Python 3 the Hard Way(已更新完整版PDF\AZW3\EPUB\MOBI)...

    Learn Python 3 The Hard Way 出版日期:2017.07 内容简介: You Will Learn Python 3! Zed Shaw has perfected the w ...

  7. 笨方法学python3怎么样_笨办法学Python3

    $if greeting: I just wanted to say $greeting. $else: Hello, world!

  8. 笨方法学Python3复习

    1.在Windows Powershell中,mkdir命令的作用是:在指定位置创建文件夹. 2.若要打开pydoc,则应在Windows Powershell输入python -m pydoc in ...

  9. 笨方法学Python—ex43:基本的面向对象分析和设计

    可遵循的一个流程 Python面向对象编程(OOP)方式实现东西的流程(只是你可以遵守的一种方法): 1. 把要解决的问题写下来,或画出流程图. 2. 将第一条中的关键概念摘录出来并加以研究. 3. ...

最新文章

  1. JZOJ 5643. 【NOI2018模拟4.10】最小代价
  2. 国家开放大学2021春1050金融理论前沿课题题目
  3. 新版ubuntu中打开终端的方法和安装ssh 的方法
  4. 微表情如何用计算机分析计算,基于微表情识别的学生课堂专注度分析系统研究...
  5. linux无密码ssh,scp,rsync
  6. 接口测试工具--Apipost不同脚本的作用
  7. static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?...
  8. Ubuntu之更新CMake的版本
  9. python基础之模块初识
  10. c语言必背数据结构_c语言必背代码有哪些?
  11. ast java_一种基于AST的Java代码SSA单路径的生成方法技术
  12. 嵌入式开发:C程序员的5个C++ 技巧
  13. Android音频播放器
  14. 小布语音下载安装_oppo语音助手小布小冰安装包app
  15. 浅谈【CSS】渐变背景(background-image)以及基础用法
  16. oracle10g精简版配置,oracle 10g 精简版安装步骤分享
  17. Python %取模小故事
  18. 根据byte数组,生成文件
  19. 【免费】文件格式转换网站
  20. 24.shell中list详解,定义list,获取List的总个数,获取list的某个元素值,将list的每个元素转换成以空格分隔的字符串,空格分隔的字符串转换成list,for循环list

热门文章

  1. wuc-tab标签点击不了_标签随打随出,告别手写,小标D30标签机体验
  2. SqlServer查询重复数据
  3. sed搜索某行在行末追加_Linux的Shell--Sed操作(指定行增加删除内容)
  4. Mooc_AutoCAD绘制建筑施工图_立面图单元测验题
  5. 20190923,两个月后的打球
  6. ApacheCN 编程/大数据/数据科学/人工智能学习资源 2019.6
  7. 把天聊死是一种怎样的感觉
  8. elementUI日期控件el-date-picker显示的月份、日期变成英文了
  9. [转]MMS流媒体播放器让你实现边上网边听广播
  10. STM32基于库函数新建工程模板