本书通常不提供练习题目(如果有的话)的解决方案。本书中提供一些外部链接(Uniform Resource Locator,URL)可供读者进行扩展阅读。随着时间推移,某些链接可能会失效。如果出现这种问题,请尝试使用恰当的关键字到网上去搜索。1.2 安装的先决条件要确保已经安装了必要的软件。表1-1总结了本章和后续需要的一些基本工具。下一节中会有更详尽的安装说明。表1-1 安装软件在接下来的章节中,我们需要安装一些其他的依赖软件。Python包管理器(pip)将会完成这项琐碎的工作。你已经安装了Python的必要环境或者你已经知道如何安装了吗?如果是,那么请你跳过接下来的安装说明,直接进入本书的主题章节,开始真正的实践内容。安装Python安装Python有两种方法。你可以使用官方发行版本的Python或者任何一种可免费获取的捆绑发行版本。1.方法1——官方发行版本对于Linux或Mac用户来说,你的系统中可能已经安装了Python。如果没有,你可以使用系统中的包管理器进行安装。Windows用户可以通过Python官方网站下载Install Python来安装Python 3.5,如图1-1所示。图1-1如上面的安装截屏所示,在安装过程中,请确保选中“Add Python 3.5 to PATH”的选项。你也可以访问Python的官方网站来下载特定平台的发行版本。2.方法2——捆绑发行版本有很多Python免费发行版本,这些版本捆绑了很多实用的包,包括pip和IPython。表1-2总结了一些最流行的Python发行版本,其中包括官方发行版本。表1-2 Python发行版本3.Python安装位置让我们简单说说Python的安装位置,以及如何确保在你的终端窗口中python是一个可用的命令。当然,事情可能会因情况不同而各异,这取决于你的安装位置和你选择的Python发行版本。Python的官方文档页面有丰富的关于在不同平台上安装Python的信息。一旦你有超出本书所涵盖内容的需求时,可以参考官方网站给你提供进一步的帮助。类UNIX操作系统在类UNIX操作系统如Linux中,典型的默认安装路径通常是/usr/bin/python 或者/usr/local/bin/python。如果你使用系统中自带的包管理器安装Python,那么在终端窗口中是可以使用命令Python或者Python 3的。如果命令不可用,你需要更新系统环境变量PATH,使其包含Python的可执行文件路径。例如,你的系统中有Bash shell,在用户目录下的.bashrc文件中增加如下配置:用你的Python实际安装路径来替换/usr/bin。Windows操作系统在Windows操作系统中,典型的Python默认安装路径如下: C:\Users\name\AppData\ Local\Programs\Python\Python35-32\ python.exe。用你的Windows用户名替换name。根据安装文件和操作系统的不同,Python的安装路径也可能是Python 35-64。正如前面提到的,在安装的时候,你需要选择“Add Python 3.5 to PATH”,以保证Python或python.exe自动被识别为命令。另外,你也可以重新运行安装文件并选中该选项。4.验证Python安装打开终端窗口(或者是Windows操作系统中的命令提示符)并输入下面的命令来验证Python的版本。只有安装了Python并且该命令在终端窗口中是可用命令时,那么该命令才会生效。否则,需要指定Python可执行文件的全路径。例如,在Linux上,如果Python安装在/usr/bin下,你可以这样指定/usr/bin/python:注意,上面的命令行中的$符号属于终端窗口,它并不是命令本身的一部分。也就是说,实际的命令只是python -V。在Linux的终端窗口中,对普通用户来说$或%是一个提示符。对root用户(管理员)来说,提示符是#。类似的,在Windows系统中,对应的符号是>。你要在这个符号的后面输入实际的命令。如果我们运行上述命令,下面是一个可能的输出示例:5.安装pippip是一个软件包管理器,它使得从官方的第三方软件库PyPI中安装Python包变得十分简单。pip在Python 2的2.7.9以上版本,以及Python 3的3.4以上版本中已经安装好了。如果你使用其他版本的Python,可以在https://pip.pypa.io/en/stable/installing中找到安装说明。在Linux操作系统下,pip和Python可执行文件的默认位置是相同的。例如,如果Python安装在/usr/bin/python,那么pip的路径应该是/usr/bin/pip。在Windows操作系统下,pip.exe通常默认安装在如下位置:C:\Users\name\AppData\Local\Programs\Python\Python35-32\ Scripts\pip.exe。正如前文提到,用你的Windows用户名替换路径中的name。根据安装文件和操作系统的不同,Python的安装路径也有可能是Python 35-64。6.安装IPython这是一个可选的安装。IPython是一个增强版的Python解释器。如果你使用的发行版本没有捆绑它,那么你可以使用以下命令进行安装:安装完成后,在终端中输入ipython就可以启动IPython的交互shell。Anaconda Python 3.5发行版的IPython shell截图如下。通常,使用Jupyter Notebook来书写和分享交互程序是非常方便的。它是一个Web应用程序,可以在交互环境下编写带有富文本、图片、函数等内容的Python代码。欲获取更多详情,请访问该项目的主页。Jupyter Notebook可以通过以下方式进行安装:7.选择集成开发环境选择IDE进行开发是个人的喜好问题。简单来说,IDE是一个旨在加快应用程序开发的工具。它通过对开发人员最常用的工具的集成,从而让他们能够来快速编写出高效的代码。Python安装时带有一个叫作IDLE的程序。这是一个基础的Python IDE,可供你入门时使用。对于高级的开发,你可以从众多免费的或商业的工具中选择一个。任何一款优秀的Python IDE至少都具有以下几个特点:具有代码自动完成和语法高亮功能的代码编辑器。具有可以浏览文件、项目、函数和类的代码浏览器。具有可以交互识别问题的调试器。集成版本控制系统,例如Git。你可以尝试从一款免费的IDE开始。下面列出部分流行的IDE。如果你只对简单的源代码编辑器感兴趣,可以浏览https://wiki.python.org/moin/PythonEditors,表1-3提供了一些可供选择的编辑器。表1-3 可选的IDE1.4 本书的主题你读过诸如《指环王》或托尔金的《霍比特人》等奇幻小说吗?或者说看过根据这些小说改编的电影吗?那么,好,这是一本高奇幻的、托尔金式的关于Python应用开发的书籍。更多关于J.R.R.托尔金的作品,请访问相关网站。高奇幻一词通常被用来代表交替虚幻世界中的一些列奇幻主题。这本书带你来到一个虚构的世界,在那里你将开发一个基于上述主题的文本游戏。是的,即使在这个想象的世界里,你仍然可以继续成为一个开发人员。
在阅读本书的过程中,将会有很多许多虚构的人物陪伴着你。当你学习Python开发的不同方面时,这些人物会跟你对话,问问题,提出新的功能,甚至与敌人打架。应该指出的是,本书不是关于游戏应用程序开发的。本书只是使用一个简单的基于文本的游戏作为一种媒介,来学习Python开发的各个方面。说一句题外话,如果你有兴趣玩一个高奇幻主题的游戏,那么你有相当多的选择。在诸多开源的项目中,《韦诺之战》是评价最高的、免费的、高奇幻主题的回合制策略游戏。请访问该游戏官网查看更多详情。了解本书人物让我们来认识一下本书各章节中那些会一直陪伴你的想象中的人物,参见表1-4。表1-4 人物说明Foo先生Foo先生是一个人类骑士,一个被描绘成守护着南部平原的大骑士。他是本书中的主要人物,并会在本书中一直与我们进行交谈兽人骑士兽人是一个类似人类的想象中的动物。在这里,他被描绘成一个敌方的士兵。兽人的坐骑是一种类似于野猪的动物。在本章中,你就将遇到这个生物精灵骑士精灵是一种超自然的神灵。精灵通常骑在一匹小马上。他被描绘成一个友好的伙伴。你会在第6章中遇到精灵先生仙子仙子是拥有与生俱来的魔力而且十分聪明的仙女。她的魔法只在第7章(详见O(log n))中使用过一次,用来寻找她的魔法盒。你会在第6章中第一次遇到仙子侏儒侏儒是一种矮小的、类似人类的神话中的存在。他被描绘成为Foo山的“大侏儒”。他问了很多问题。从本书第6章开始的后半部分里,你会看到侏儒的身影有了这个有趣的主题作为一个工具,让我们通过简单的命令行应用程序开始我们的Python之旅。这将是一个基于文本的游戏。在接下来几章中会增加一些复杂度,随之而来的一些有趣的问题会不断给你带来挑战。这本书将向你展示如何优雅地处理这种情况。1.4 简单的脚本——兽人之袭V0.0.1我们已经安装了必要的工具和开发环境,现在是时候来编写我们的第一个Python程序了。这是一个简单的靠碰运气取胜的游戏,同时也是一个命令行游戏。随着本书内容的不断推进,我们会给游戏增加更多的复杂度,通过学习到的新技术来开发更加高效的程序。所以,准备行动吧。
1.4.1 游戏简介——兽人之袭v0.0.1在人类和他们的敌人之间的战争中,兽人就是第一个到来的敌人。一支巨大的兽人军队正在向人类的聚集地进发。他们几乎摧毁了行进道路上的一切。人类不同种族的首领们联起手来击败他们最强大的敌人,来共同为他们的伟大时代而战斗。人们都被召集起来参加了军队。Foo先生,一个保卫南部平原的勇敢骑士,穿过一片未知的茂密森林,开始长途跋涉,向东部进发。两天两夜,他小心翼翼地穿过茂密的树林。在路上,他发现了一个小的孤立定居点。因为疲劳的原因,再加上要希望补充粮食储备,他决定绕道而行。当他走进村庄时,他看见了五个木屋,如图1-2所示。周围没有发现任何人。犹豫之后,他决定走进其中一间木屋……1.4.2 问题说明你正在设计一个简单的游戏,游戏中玩家需要为Foo先生选择一个木屋。这些木屋是随机被同伴或敌人占据的。同时,有些木屋仍有可能是空闲的。如果选择的是一个被敌人所占据的木屋,那么玩家就输掉比赛。如果是另外的两种场景,那么玩家就赢得比赛。1.4.3 伪代码——0.0.1版本现在游戏的目标已经明确了,请打开你最喜欢的编辑器,并记录下主要的步骤。通常这被称作伪代码。当用户希望一直玩这个游戏时:打印游戏的任务;创建一个木屋的列表;在5个木屋中随机分配敌人、同伴或空闲类型;提示用户选择一个木屋的编号;如果选中敌人占据的木屋,打印“你输了”;否则,打印“你赢了”。正如你所注意到的,代码的关键部分就是让同伴或者敌人随机占据木屋,并且保持剩下的木屋是未被占据的空闲状态。我们要如何实现呢?让我们用Python解释器来快速地解决这个问题。如果你安装了IPython,启动IPython解释器;否则,就通过在终端窗口中输入 python 命令来使用默认的Python解释器。首先,我们需要一个Python list来保存所有木屋占有者的类型。接下来,我们将使用内置 random模块并调用 random.choice 来从列表中随机取得一个元素。代码如下面的屏幕截图所示:现在,我们只需要编写其他的条件代码即可。接下来,让我们来查看一下代码。1.4.4 代码查看从为本章提供的补充代码包中下载源代码文件 ch01_ex01.py 。文件扩展名 .py 表明它是一个Python文件。在Python编辑器或你选择的一款IDE中打开它。建议在阅读以下讨论时,请保持随时能查看该文件。通常能够浏览完整的代码会让你更容易且更好地理解它。观察下面的代码片段,它只是上文提到的文件中的 if __name__ == '__main__' 条件代码块中的一小部分。如果你安装的是Python 2.7.9的话,支持代码包中有一个单独的Python 2.7.9兼容源代码文件。让我们来看一下上面截图的代码片段。前两行代码导入了两个内置模块,从而获得这些模块中提供的功能。 textwrap 模块为命令行中的消息提供了很好的格式打印功能。if条件块 if __name__ == '__main__' ,只有当该文件作为一个独立的脚本运行时才会被调用。换句话说,如果在其他文件中导入此文件,那么在条件块中的代码将不会被执行。现在,让我们看看这个条件块中的代码。首先,我们会初始化一些变量。如前面所示的那样, occupants 列表存储了木屋占有人的类型。最后几行代码只是对终端窗口中打印的文本进行格式化。变量 dotted_line 是一个字符串,它是由72个连字符组成的一条长线。代码中的ASCII转义序列是用来用粗体打印文本。序列\033[1m表示使用粗体文本,\033[0m表示返回到正常的打印样式。接下来的几行代码主要是在控制台中打印关于游戏的进一步信息:让我们看一看上面截图中的代码:变量msg是一个非常长的变量。这也是textwrap被时常用到的地方。使用textwrap.fill会让每行以72个字符长度的方式来对消息进行显示,长度是通过前面代码中定义的变量width来指定的。现在,让我们来看看下面的while循环吧。对于Python 2.7.9来说,在上面的第一个示例代码中唯一需要修改的是将调用内置函数input的地方替换成raw_input:最外层的循环让玩家可以选择重新开始游戏。通过使用 random.choice ,我们可以随机从 occupants 列表中挑选一个占有者,然后把它增加到小木屋的列表中。这个之前有过说明。内置的 input 函数用一个整数来接受用户选择的一个小木屋编号。变量 idx 用来存储一个数字。接下来,通过打印明细来表明占有者的信息。最后,根据与小木屋编号对应的列表项来确定赢家。需要注意的是,huts 列表的索引是从0开始的。因此,根据选定的小木屋编号 idx 来取得相应的列表项时,我们需要使用 idx-1 作为列表的索引。1.4.5 运行兽人之袭v0.0.1假设你的系统环境变量PATH中已经包含了Python(可能是Python或者Python 3)的话,那么可以通过以下方式在命令行运行该程序:仅此而已。
请玩玩这个游戏,并尝试选择正确的木屋来解救Foo先生吧。
下面的Linux终端窗口的快照显示了程序的运行情况:本文摘自《Python应用开发实战》《Python应用开发实战》[美] 尼纳德·萨斯叶(Ninad Sathaye) 著用Python 3.5构建健壮的、可重用的、高效的应用程序 ;轻松奇幻的学习主线,解决Python开发中遇到的实际问题本书使用一个生动有趣的、基于文本的游戏主题作为讲解内容来介绍Python应用开发过程的各个方面。全书共10章,涉及简单应用开发、模块化、打包和发布应用的代码、文档规范、单元测试、重构、设计模式、性能监测、性能优化、GUI应用、MVC框架等方方面面的软件开发知识和技能。
(图片来源网络,侵删)
0 评论