介绍新书:用12个流行应用程序学Python从入门到精通

这是本人编写的一本新书,已出版,可在“当当网”用查找书名或作者名买到该书,虽然书标价88元,从网上购买,50多元可买到。本书的最大特色是:用12个流行应用程序作为学习的实例,希望通过学习编写这些应用程序,使读者能掌握用python语言编写中等难度实际应用程序的步骤和方法。12个流行应用程序是:计算器、数字华容道游戏、2048游戏、扫雷游戏、时钟程序、记事本程序、黑白棋游戏、画图程序、画矢量图程序、截屏程序、录屏程序、投篮游戏。其中有11个是tkinter窗体应用程序,仅最后一个游戏用pygame实现,因此本书也是一本学习python tkinter编程的书。本书也可作为学习python的实验手册。为提高读者的学习兴趣,12个应用程序中,有5个应用程序是游戏,不像网上的python游戏,全部用pygame实现,4个游戏仅有投篮游戏用pygame实现,其余是棋类游戏,典型的事件驱动,用tkinter窗体的组件完成,是比较合理的。

本书可作为没有任何程序设计基础的成人读者学习程序设计语言的入门书。对于中小学生,内容可适当删减,例如可选择:第1章到第11章的基本语法,第12章的计算器、第13章的数字华容道游戏、第14章的2048游戏、第15章的扫雷游戏、第18章的黑白棋游戏。如果时间富裕,还可选第23章的投篮游戏,其它部分可作为选修。很多小学生喜欢玩游戏,也希望能编写游戏程序,兴趣是学习的最大动力,只有从编程中获得乐趣,才能长期学下去,遇到困难不退缩。通过编写本书这些游戏,也就学会用tkinter创建应用程序的图形界面,这就为编写其它类型实用的应用程序打好基础。

因篇幅限制,也为减轻读者负担,原稿中的第24章球球情侣游戏、第25章超人游戏、第26章小蝌蚪吃蚊虫游戏没有出版,这三章文档可在出版社网站下载。球球情侣游戏,使用圆形碰撞检测和精准碰撞检测检测碰撞,进一步学习两种碰撞的使用方法。同时介绍在Surface类对象上画各种图形的方法。超人游戏,实现颜色碰撞检测,实现游戏大背景以及进一步学习如何控制角色移动等方法。小蝌蚪吃蚊虫游戏,采用改进的大背景,用向量方法使小蝌蚪头部总是面向鼠标,并能跟随鼠标移到大背景的任何位置。定义以Sprite类为基类的小蝌蚪类和蚊虫类,将众多蚊虫类对象保存到用Group()生成的列表,使显示众多蚊虫,以及检测蚊虫和小蝌蚪的碰撞变得简单。

在继续介绍本书特色前,首先提出以下问题,请读者回答。在Python中,如果a=[1,[2,3]],b=a,c=a.copy或c=a[:]。那么,del a能删除列表[1,[2,3]]吗?b和c能作为a列表的备份吗?答案是不能,那么为什么不能?我们又该如何删除数据?如何备份数据呢?我们如何理解以下这些概念:变量引用数据、赋值语句是引用传递、变量无类型数据有类型、事件和事件驱动、可变和不可变数据、python语言函数参数的值传递和引用传递、浅拷贝和深拷贝等。这些概念很重要,如果学习了python后,还不清楚这些概念,还不清楚如何删除数据,如何备份数据,又怎能正确编写应用程序呢?大部分python书籍对于这些概念和问题或忽略不讲,或只讲结论,不讲为什么这样做。本书对于这些问题做了详细解读。对以上问题和概念还不清楚的读者,建议读一读本书。

除了用12个流行应用程序作为实例外,和其它类似的python书比较,还有一些特色。以下逐章节介绍该书的这些特色。

本书的3.1节 变量
所有计算机应用程序都必须将程序和数据导入到运行内存后运行,程序只能通过运行内存地址访问运行内存单元保存的数据。本节详细说明了在Python中,语句a=2所做的工作,首先在内存数据区申请若干单元,首地址为ID,用来保存数据类型和整数2,然后在内存变量区申请两个内存单元,保存变量名a和ID,程序要读写数据,必须先找到变量a,再通过其后ID读写数据2,这种模式被称为:变量a引用整数2。知道了python保存数据的方式,才能理解Python的这些概念:变量引用数据;赋值语句是引用传递;变量无类型,数据有类型。例如b=a,是将 变量a对应的ID传递给b,变量a和b将引用同一数据。在第10章将可以看到,这里所说的在内存保存的数据2,就是整数类(int类)的对象。

本书的3.3节 垃圾自动回收器
Python用垃圾自动回收器,能将不再使用的数据所占用内存空间回收,重新分配给新创建的数据,不必像C或C++语言那样,必须用语句删除不再使用的数据。本节利用3.1节的概念,说明垃圾自动回收器的原理,说明了del a不能删除列表[1,[2,3]],以及删除数据的方法。

本书的8.7节 Python的迭代器
介绍了迭代器,用迭代器解释在for语句如何遍历任何序列。在矩阵的转置中也用到迭代器。

本书的9.5节 可变和不可变数据类型
介绍可变和不可变数据类型概念。在函数参数传递,以及在备份数据时,判断何时使用浅拷贝和深拷贝,会用到可变和不可变数据类型概念。

本书的9.6 节函数参数的值传递和引用传递
介绍在Python中,函数如何实现参数的值传递和引用传递。

本书的9.7节 传递数量不定的实参
介绍在函数中实现数量不定的位置实参和关键字实参的方法。

本书的9.8节 lambda表达式(匿名函数)
在为组件的事件函数增加参数时,将用到lambda表达式。

本书的10.1节 类和对象基本概念
Python是一种面向对象的编程语言,面向对象的最重要概念就是类和对象。本节从多个处理字符串的函数封装到库的方法,导入类和对象的概念。说明在3.1节,赋值语句:a=2,将数据保存到数据区的方式,数据区的数据实际上就是整数类(int类)的对象,s='abcd’创建字符串类对象,c=[1,2]创建列表类对象。所有类对象都可以调用类中的方法去处理对象中的数据,并说明s=‘abcd’,语句s.upper(),是如何通过变量s调用类中的函数upper()。从而进一步说明“一切皆为对象,一切皆为对象的引用”的论断。

本书的第11章 用tkinter创建图形用户界面
大部分应用程序是图形界面,因此掌握一种创建图形界面的工具,是所有编程者必须掌握的技术。tkinter模块内置在 Python 安装包中,用来创建具有图形用户界面的Python应用程序。本书中除最后一章例子,所有例子的图形用户界面都用tkinter实现。因此,本书也是一本学习tkinter从入门到精通的教材。在第11章,介绍了事件、事件处理函数、组件和事件驱动等概念。组件本质上是类,采用属性、事件、方法来描述。应用程序工作方式是等待事件发生,一旦接到事件,立即调用事件处理函数处理事件,处理完成后,将再一次进入等待状态,这种工作方式被称作“事件驱动”,这种工作方式最大优点是能够充分利用CPU。

本书的第12章 计算器
介绍了事件绑定概念。用例子说明了为单击按钮调用的函数增加参数的3种方法。还介绍了正则表达式及其用途,并用正则表达式,用实例说明实现用多分割符分割字符串方法。

本书的第13章 数字华容道
很多编程者用Python编写游戏,首先想到用pygame。但是类似数字华容道这样的棋类游戏,都是单击棋子,棋子才运动,这是典型的事件驱动。而pygame运行方式是游戏循环,每秒刷新屏幕若干次,要占用CPU大量时间。GUI组件的运行方式,其大部分时间是在等待玩家用鼠标或键盘操作游戏,占用CPU时间很少,况且可用组件作为棋子,而pygame的棋子必须使用图片。因此棋类游戏使用GUI界面比较合理。本书除除最后一章游戏,用pygame实现,其余4个游戏都用tkinter实现。

本书的14.4节 列表的反序和转置:
2048游戏有一个4×4数字矩阵,用一个2维列表digits作为4×4数字矩阵的映像。在游戏中需将列表转置,即行变列,列变行,并提供转置语句:digits1=list(map(list,zip(*digits))),该语句包含了3个内置函数:zip、map、list,以及对列表“*”操作,本节对这些内置函数用实例做了详细说明。

本书的14.5节 切片赋值语句
将列表a=[1,2,3,4]的所有元素替换为列表b=[5,6,7,8]对应的元素,变量a引用的地址不能改变。用循环语句使[n]=b[n]可以完成该任务,但使用的语句较多。使用切片赋值语句:a[:]=b,也能完成该任务,但更简单。本节用实例详细介绍了切片赋值的使用方法。

本书的15.4节 多线程
首先简单介绍了多线程的工作原理和建立多线程的必要性。以在扫雷程序创建秒表为例,说明创建一个新线程的步骤。最后,简单说明了使用多线程使多段程序并发执行,当多个子线程同时修改共享数据可能发生错误。引入线程互斥、同步等概念。关闭主窗体前,如不关闭子线程,将导致报错,给出一种避免该问题的解决方案。

本书的15.5节 格式化字符串常量(f-string)
为使输出包含变量的字符串的操作更加简便,Python3.6新引入的一种字符串格式化方法:f-string。在扫雷程序中,需要根据游戏难度不同,改变方块矩阵的行数和列数,导致主窗体的宽和高的改变。可使用f-string简化改变主窗体的宽和高的代码,语句为:geometry(f"{矩阵列数*36+34}x{矩阵行数*36+60}+200+50")

本书的16.1节 创建和导入模块
较大程序设计一般由多人完成,必须合理地将程序分为多个模块,每人负责一个模块,确保模块分割及编写后,能使汇总为完整程序更加容易。第16章通过实例,说明具体的实现方法。

本书的16.2节 自定义事件
时钟程序,包括秒表、定时器、闹钟和时钟4个功能。这4个功能是由4个独立的完整程序实现,本节给出一种把多个独立的完整程序整合在同一窗体的方法,并用自定义事件,同步4个独立的完整程序。本节给出创建自定义事件的步骤。

本书的17.5节 组件Text
该组件主要目的是显示多行文本。第17章的纯文本记事本程序就是该组件的一个例子。还用实例介绍使用tag(标签)改变Text组件的文本中指定字符串的字体名称、字体大小和颜色、字符串是否有下划线、是否是黑体和是否斜体,以及字符的底色的方法,这些功能使Text组件可以创建代码编辑器,在Text组件中还可插入图片和组件,这些功能使Text组件可以创建类似window的写字板程序。

本书的17.10节 用bing搜索选定字符串
Text组件中可显示链接,单击链接打开指定网页,甚至插入带 CSS 格式的 HTML 等。加上17.5节功能,Text组件也可创建网页浏览器。

本书的18.6节 deepcopy()深拷贝函数的使用
程序设计中,常常要对数据备份。在这里引入浅拷贝和深拷贝概念,并指出那种数据需要使用深拷贝。同时介绍深拷贝的使用方法。

本书的19.6节 使图像白底色透明程序
编写了一个将底色为白色的图形文件,转换为底色透明的的png格式图形文件的程序。

本书的19.18节 Win 10风格工具栏
Win10和WinXP程序工具栏有很大不同,由很多平面图形作为按钮,称为图形按钮,鼠标移到图形按钮上方,其图形按钮底色改变,单击按钮,其底色变为另一种颜色。本节给出一种实现图形按钮的方法。

本书的20.4节 实现Win 10风格工具条第2种方法

本书的第20章 画矢量图程序
处理图形有两种常用模式,位图模式和矢量模式。第19章的画图程序,就是一种典型的位图模式。本章介绍图形的矢量模式。本章用Python的tkinter Canvas类和pillow库实现一个画矢量图程序,用来绘制计算机程序流程图。在设计过程中,理解矢量图原理及实现方法。类似的程序,在国内网站未查到。

本书的23.7节 使用pygame.math.Vector2
pygame.math.Vector2类用于处理二维向量。用向量是处理游戏角色运动、旋转这类问题,将能极大简化程序。本章通过多个实例,说明在游戏中如何使用向量,处理对象的移动和旋转。

本书的23.17节 颜色碰撞
本章除了介绍游戏角色的矩形碰撞、圆形碰撞、mask精准碰撞外,还介绍了游戏角色的颜色碰撞。
书的封面在这里插入图片描述书的目录
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值