黑马程序员python基础班教程笔记使
黑马程序员_PHP_课程同步笔记day24:数据库操作-事务
【黑马程序员】PHP课程同步笔记day24:数据库操作-事务事务(transaction)控制什么叫做事务?设想这样一个情形:小明,小花是一对,他们分处不同的城市,他们的银行账号都是一个银行的。
某天,小花要买一个iphone,但肾已用完,需要向小明借钱。
借5000.....不管他们在什么操作界面(柜台,atm,手机,网银,。
),最终系统内部都会有这样两条语句的执行:update 存款表set 存款= 存款-5000 where 账户= ‘小明’;update 存款表set 存款= 存款+5000 where 账户= ‘小花’;但,这两条语句执行的过程中,可能就会有意外:断电,地震,网线被老鼠咬断。
如果第一条语句执行完了,发生上述情况,则结果是:他们分手了——他们的账户信息不对应(不一致);事务,就是在mysql系统内部,用于保证类似这种“多步进行的事情”,能够“按一次进行”来执行的机制:该多步的事情,要么都做了,要么都不做!事务的特点∙原子性:一个事务中的所有语句,应该做到:要么全做,要么一个都不做;∙一致性:让数据保持逻辑上的“合理性”,比如:一个商品出库时,既要让商品库中的该商品数量减1,又要让对应用户的购物车中的该商品加1;∙隔离性:如果多个事务同时并发执行,但每个事务就像各自独立执行一样。
∙持久性:一个事务执行成功,则对数据来说应该是一个明确的硬盘数据更改(而不仅仅是内存中的变化)。
怎么实现事务?事务模式:其实是一个设置项:set autocommit = on,表示开启自动提交模式;——为系统的默认设置set autocommit = off 关闭自动提交模式;——此时,执行语句后,必须使用commit才生效应用中,更常见的是,在php中,以一个明确而典型的“开启事务”的代码模式来实现,如下所示:mysql_query(“start transaction”); //开启一个事务,也可以“begin”$result1 = mysql_query(“insert .....”);$result2 = mysql_query(“update .....”);$result3 = mysql_query(“delete .... “)....事务中的语句,只有增删改才受事务影响if ( $result1 === false || $result2 === false || $result === false || ......){ mysql_query(“rollback “); //回滚事务,不管任何其中一个失败,其他的语句全都“撤销”echo “失败了”}else{mysql_query( “commit “); //提交事务,此时,这一行语句执行成,前面那些行才算成功!echo “执行成功”}说明:1,事务机制,只对增删改这种会改变数据库的语句有效(产生控制能力);2,使用这种开启一个新事务(start transaction)的模式,则自动提交模式是on或者off都无所谓3,这种情况,都必须是commit执行了才算生效。
黑马程序员 python讲义
黑马程序员 python讲义
本《黑马程序员python讲义》是一本针对初学者的Python教程,全书共分为十章,从Python基础语法入门、函数、模块、文件操作、面向对象编程等各个方面详细讲解Python的知识点。
第一章主要介绍Python的基本概念和Python的安装。
第二章介绍Python的数据类型和运算符,包括数字、字符串、列表、元组、字典等。
第三章详细讲解了Python的流程控制语句,包括条件语句、循环语句等。
第四章讲解Python的函数,包括定义函数、调用函数、参数传递等。
第五章详细讲解Python的模块,包括导入模块、自定义模块、标准库等。
第六章介绍Python的文件操作,包括打开文件、读取文件、写入文件等。
第七章详细讲解Python的异常处理,包括try...except语句、finally语句等。
第八章讲解Python的面向对象编程,包括类、对象、继承、多态等。
第九章介绍Python的正则表达式,包括正则表达式的基本语法、常用元字符、正则表达式的应用等。
第十章详细讲解Python的常用模块,包括os模块、sys模
块、time模块、random模块等。
本讲义内容深入浅出,易于理解,适合初学者入门学习Python。
黑马程序员 python 笔记
文章标题:解锁Python编程技能:成为黑马程序员的必备笔记第一部分:引言1.1 什么是Python编程Python编程语言是一种高级、通用、解释型编程语言。
它在机器学习、人工智能、数据分析等领域有着广泛的应用,被誉为是学习编程的最佳入门语言之一。
对于想要成为优秀程序员或者黑马程序员的人来说,掌握Python编程技能至关重要。
第二部分:入门篇2.1 Python基础语法在学习Python编程之前,了解Python的基础语法是必不可少的。
Python的变量、数据类型、条件语句、循环等。
只有掌握了这些基础知识,才能够更好地理解和应用Python编程。
2.2 Python函数和模块函数和模块是Python编程中非常重要的概念。
函数可以让代码更加模块化和可复用,而模块则可以让代码更加清晰和可维护。
通过学习函数和模块的知识,可以使我们的Python代码更加高效和灵活。
2.3 Python面向对象编程面向对象编程是一种重要的编程范式,而Python是一种面向对象的编程语言。
掌握面向对象编程的知识,可以让我们更好地组织和管理代码,提高代码复用性和可维护性。
第三部分:进阶篇3.1 Python文件操作在实际开发中,文件操作是无法回避的部分。
学习如何使用Python 进行文件读写操作,可以让我们更好地处理数据和文件,实现更丰富的应用场景。
3.2 Python异常处理异常是编程中一种常见的情况,学习如何处理异常可以让我们的代码更加健壮和可靠。
Python提供了丰富的异常处理机制,学习这些知识可以让我们更好地处理各种异常情况。
3.3 Python常用库和框架Python拥有丰富的第三方库和框架,如NumPy、Pandas、Django等。
学习这些常用库和框架,可以让我们更好地开发各种应用,提高开发效率和质量。
第四部分:个人观点和总结4.1 个人观点作为一名编程人员,我深刻理解Python编程技能在今天的重要性。
Python的简洁易读的语法、丰富强大的库和框架、广泛的应用场景,使其成为成为黑马程序员不可或缺的技能之一。
python程序设计基础笔记
python程序设计基础笔记摘要:一、Python 程序设计概述- Python 简介- Python 程序设计基础二、Python 语法基础- 变量与数据类型- 运算符与表达式- 流程控制语句三、函数与模块- 函数定义与调用- 模块导入与使用- 标准库模块介绍四、数据结构- 列表- 元组- 集合- 字典五、文件操作与异常处理- 文件打开与关闭- 文件读写操作- 异常处理六、Python 编程实践- 实例分析- 项目实战正文:Python 程序设计基础笔记Python 是一种高级、易于学习的编程语言,以其简洁的语法和强大的功能而著称。
Python 被广泛应用于各种领域,如Web 开发、数据分析、人工智能等。
本篇笔记将概述Python 程序设计基础,并介绍Python 语法基础、函数与模块、数据结构、文件操作与异常处理等知识点。
一、Python 程序设计概述Python 由Guido van Rossum 于1989 年创立,1991 年首次发布。
Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。
Python 具有丰富的标准库,使得开发者能够轻松地完成各种任务。
Python 程序设计基础包括变量与数据类型、运算符与表达式、流程控制语句等方面。
二、Python 语法基础1.变量与数据类型变量是存储数据的容器,数据类型决定了变量可以存储的数据种类。
Python 支持多种数据类型,如整数(int)、浮点数(float)、布尔值(bool)、字符串(str)等。
2.运算符与表达式运算符用于表示运算关系,如加法(+)、减法(-)、乘法(*)、除法(/)等。
表达式是由运算符和操作数组成的,用于计算结果。
3.流程控制语句流程控制语句用于控制程序的执行流程,包括条件语句(如if-elif-else)、循环语句(如for 循环和while 循环)等。
三、函数与模块1.函数定义与调用函数是一段组织好的、可重复使用的代码,用于执行特定任务。
【黑马程序员】Python入门教程、python基础教程
【黑马程序员】Python入门教程、python基础教程黑马程序员视频库网址:(海量热门编程视频、资料免费学习)学习路线图、学习大纲、各阶段知识点、资料网盘免费领取+QQ 3285264708 / 3549664195适合人群:零基础小白学习周期:15天课程章节:2章(每章包含1-100小节课程)学习后目标:1.掌握基本的Linux系统操作。
2.掌握Python基础编程语法。
3.建立起编程思维和面向对象思想。
0基础小白也能学会的人工智能完整视频:/course/534.html?1911sxkqq课程资料:https:///s/1EDaAE9eG0fhW7V5haowbig 提取码:9kml 内容简介:本套课程从零开始,讲解人工智能的全部核心基础,4天课让你掌握机器学习、线性代数、微积分和概率论,学完课程你可以自己推导损失函数,实现梯度下降,手写神经网络,把控无人驾驶,完成手写字识别...2019年python入门到精通(19天全)完整视频:/course/542.html?1910sxkqq课程资料:https:///s/1UzxLIXhkRppccqf2vGyOhA 提取码:ueva 内容简介:python基础学习课程,从搭建环境到判断语句,再到基础的数据类型,之后对函数进行学习掌握,熟悉文件操作,初步构建面向对象的编程思想,最后以一个案例带领同学进入python的编程殿堂Python入门教程完整版(懂中文就能学会)完整视频:/course/273.html?1910sxkqq课程资料:https:///s/12-dymJ8FjWzh6b5NKJuP3Q 提取码:gqly 内容简介:1-3 天内容为Linux基础命令;4-13 天内容为Python基础教程;14-15 天内容为飞机大战项目演练。
python进阶深入浅出完整版完整视频:/course/541.html?1910sxkqq课程资料:https:///s/1Y83bFUKz1Z-gM5x_5b_r7g 提取码:ix8q 内容简介:python高级学习课程,从linux操作系统到网络编程,再到多任务编程以及http同学协议,熟练掌握mysql数据库的使用,构建完整python编程技能,进入python殿堂,一窥python 编程之美。
黑马程序员python基础班笔记之文件和目录常用命令
黑马程序员:python基础班笔记之文件和目录常用命令目标查看目录内容o ls切换目录o cd创建和删除操作o toucho rmo mkdir拷贝和移动文件o cpo mv查看文件内容o cato moreo grep其他o echoo重定向> 和>>o管道|01. 查看目录内容1.1 终端实用技巧1> 自动补全•在敲出文件/目录/命令的前几个字母之后,按下tab 键o如果输入的没有歧义,系统会自动补全o如果还存在其他文件/目录/命令,再按一下tab 键,系统会提示可能存在的命令2> 曾经使用过的命令•按上/下光标键可以在曾经使用过的命令之间来回切换•如果想要退出选择,并且不想执行当前选中的命令,可以按ctrl + c 1.2 ls 命令说明•ls 是英文单词list的简写,其功能为列出目录的内容,是用户最常用的命令之一,类似于DOS下的dir 命令Linux 下文件和目录的特点•Linux 文件或者目录名称最长可以有256 个字符•以 . 开头的文件为隐藏文件,需要用-a 参数才能显示•.代表当前目录•..代表上一级目录1.3 ls 常用选项参数含义-a 显示指定目录下所有子目录与文件,包括隐藏文件-l 以列表方式显示文件的详细信息-h 配合-l 以人性化的方式显示文件大小计算机中文件大小的表示方式(科普)单位英文含义字节 B(Byte)在计算机中作为一个数字单元,一般为8 位二进制数千K(Kibibyte) 1 KB = 1024 B,千字节(1024 = 2 ** 10)兆M(Mebibyte) 1 MB = 1024 KB,百万字节千兆 G(Gigabyte) 1 GB = 1024 MB,十亿字节,千兆字节太T(Terabyte)1 TB = 1024 GB,万亿字节,太字节拍P(Petabyte)1 PB = 1024 TB,千万亿字节,拍字节艾E(Exabyte) 1 EB = 1024 PB,百亿亿字节,艾字节泽Z(Zettabyte) 1 ZB = 1024 EB,十万亿亿字节,泽字节尧Y(Yottabyte) 1 YB = 1024 ZB,一亿亿亿字节,尧字节1.4 ls 通配符的使用通配符含义* 代表任意个数个字符? 代表任意一个字符,至少1 个[] 表示可以匹配字符组中的任一一个[abc] 匹配a、b、c 中的任意一个[a-f] 匹配从a 到f 范围内的的任意一个字符02. 切换目录2.1 cd•cd 是英文单词change directory的简写,其功能为更改当前的工作目录,也是用户最常用的命令之一注意:Linux 所有的目录和文件名都是大小写敏感的命令含义cd 切换到当前用户的主目录(/home/用户目录)cd ~ 切换到当前用户的主目录(/home/用户目录)cd . 保持在当前目录不变命令含义cd .. 切换到上级目录cd - 可以在最近两次工作目录之间来回切换2.2 相对路径和绝对路径•相对路径在输入路径时,最前面不是/或者~,表示相对当前目录所在的目录位置•绝对路径在输入路径时,最前面是/或者~,表示从根目录/家目录开始的具体目录位置03. 创建和删除操作3.1 touch•创建文件或修改文件时间o如果文件不存在,可以创建一个空白文件o如果文件已经存在,可以修改文件的末次修改日期3.2 mkdir•创建一个新的目录选项含义-p 可以递归创建目录新建目录的名称不能与当前目录中已有的目录或文件同名3.3 rm•删除文件或目录使用rm 命令要小心,因为文件删除后不能恢复选项含义-f 强制删除,忽略不存在的文件,无需提示-r 递归地删除目录下的内容,删除文件夹时必须加此参数04. 拷贝和移动文件序号命令对应英文作用01 tree [目录名] tree 以树状图列出文件目录结构02 cp 源文件目标文件copy 复制文件或者目录03 mv 源文件目标文件move 移动文件或者目录/文件或者目录重命名4.1 tree•tree 命令可以以树状图列出文件目录结构选项含义选项含义-d 只显示目录4.2 cp•cp 命令的功能是将给出的文件或目录复制到另一个文件或目录中,相当于DOS下的copy 命令选项含义-i 覆盖文件前提示-r 若给出的源文件是目录文件,则cp 将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名4.3 mv•mv 命令可以用来移动文件或目录,也可以给文件或目录重命名选项含义-i 覆盖文件前提示05. 查看文件内容序号命令对应英文作用序号命令对应英文作用01 cat 文件名concatenate查看文件内容、创建文件、文件合并、追加文件内容等功能02 more 文件名more 分屏显示文件内容03 grep 搜索文本文件名grep 搜索文本文件内容5.1 cat•cat 命令可以用来查看文件内容、创建文件、文件合并、追加文件内容等功能•cat 会一次显示所有的内容,适合查看内容较少的文本文件选项含义-b 对非空输出行编号-n 对输出的所有行编号Linux 中还有一个nl 的命令和cat -b 的效果等价5.2 more•more 命令可以用于分屏显示文件内容,每次只显示一页内容•适合于查看内容较多的文本文件使用more 的操作键:操作键功能空格键显示手册页的下一屏Enter 键一次滚动手册页的一行b 回滚一屏f 前滚一屏q 退出/word 搜索word字符串5.3 grep•Linux 系统中grep 命令是一种强大的文本搜索工具•grep允许对文本文件进行模式查找,所谓模式查找,又被称为正则表达式,在就业班会详细讲解选项含义-n 显示匹配行及行号-v 显示不包含匹配文本的所有行(相当于求反)-i 忽略大小写•常用的两种模式查找参数含义参数含义^a 行首,搜寻以a开头的行ke$ 行尾,搜寻以ke结束的行06. 其他6.1 echo 文字内容•echo 会在终端中显示参数指定的文字,通常会和重定向联合使用6.2 重定向> 和>>•Linux 允许将命令执行结果重定向到一个文件•将本应显示在终端上的内容输出/追加到指定文件中其中•> 表示输出,会覆盖文件原有的内容•>> 表示追加,会将内容追加到已有文件的末尾6.3 管道|•Linux 允许将一个命令的输出可以通过管道做为另一个命令的输入•可以理解现实生活中的管子,管子的一头塞东西进去,另一头取出来,这里| 的左右分为两端,左端塞东西(写),右端取东西(读)常用的管道命令有:•more:分屏显示内容•grep:在命令执行结果的基础上查询指定的文本。
黑马程序员_PHP_课程同步笔记day21:表定义语句
【黑马程序员】PHP课程同步笔记day21:表定义语句表定义语句创建表:基本形式:Create table [if not exists] 表名(列定义列表,[索引或约束列表])[表选项列表];说明:1.上述列表都是指”多项并列项”,每一项之间用(,)分开2.其中中括号部分是可以省略的列定义:每一个列定义的基本形式:列名列类型[列属性列表]说明:1.列类型,就是数据类型,其中还可能会需要跟类型有关的相应设定。
2.列属性有6个,相互之间用空格隔开就可以:a)Auto_increment:表示自增长,用于整数类型。
一旦设定了此属性,则也同时要求设定一个”key”属性,就是后面那2个:primary key或unique keyb)Primary key:表示主键,用于唯一确定一行的数据c)Unique key :表示唯一键,用于设定某个字段的值在所有行中是唯一的(不可重复的)d)Not null :表示不能为空(非空属性)e)Default XX值:设定默认值,当该字段没有赋值或赋值为NULL时,自动获得该值f)Comment ‘字段说明文字’:表示一种可以解释该字段含义,但又不属于”注释”的内容。
索引:索引是一种数据库内部为了加快数据查找(搜索)速度的内部机制,其设定某个字段”有索引”,则该字段作为条件(比如where age=22)进行查找就会极大提高其速度。
索引设定形式:通用形式:索引类别(字段名1,[字段名2],[字段名3]....);//至少一个字段索引类别有:普通索引:key [索引名](字段列表) 就只有索引的作用唯一索引:unique key [索引名] (字段列表) 具有索引作用,而且具有唯一性主键索引:primary key(字段列表) 具有索引作用,而且具有主键特性外键索引:foreign key[索引名](字段列表) reference 其他表(对应字段列表)具有索引作用,而且具有对应其他表的字段值的作用(外键作用) 全文索引:fulltext key [索引名](字段列表) 具有索引作用,但mysql对中文无法正常发挥作用索引的弊端:降低(减慢)增删改数据的效率(速度)约束:约束是指数据库中预先设定的对数据的”规定”,”要求”,”条件”等等约束,是指在”建表”的时候,预先设定好的,以期对”后续写入数据”进行”检查”来决定是否满足设定的约束条件,结果有两种可能:满足写入成功,不满足写入失败。
(完整版)Python基础学习笔记
Python 基础学习笔记基于《Python语言程序设计基础(第2版)》第一部分初识Python语言第1章程序设计基本方法1.1 计算机的概念•计算机是根据指令操作数据的设备,具备功能性和可编程性两个基本特性。
•计算机技术发展阶段:1. 第一阶段:1946-1981年,“计算机系统结构阶段”。
2. 第二阶段:1982-2007年,“计算机网络和视窗阶段”。
3. 第三阶段:2008年至今,“复杂信息系统阶段”。
4. 第四阶段:月20年后某个时期开始,“人工智能阶段”。
1.2程序设计语言1.2.1程序设计语言概述•机器语言:直接使用二进制代码表达指令,可被计算机硬件直接识别和执行。
不同计算机结构的机器指令不同。
•汇编语言:使用助记符对应机器语言中的指令,可直接操作计算机硬件。
不同计算机结构的汇编指令不同。
机器语言和汇编语言都直接操作计算机硬件并基于此设计,统称“低级语言”。
•高级语言:用更接近自然语言的方式描述计算问题。
代码只与编程语言有关,与计算机结构无关。
1.2.2编译和解释高级语言按执行方式可分为采用编译执行的静态语言和采用解释执行的脚本语言。
•编译是将源代码转换成目标代码的过程。
•解释是将源代码逐条转换成目标代码同时逐条运行目标代码的过程。
1.2.3计算机编程•我学习Python的原因:1. 通过编程实现自动化,提高效率。
2. 通过编程了解一个新的广阔世界。
•学习一门编程语言(重点在于练习)1. 掌握该语言的语法2. 结合问题设计程序结构3. 掌握解决问题的能力1.3Python语言概述1.3.1 Python语言的发展Python语言是一个语法简洁、跨平台、可扩展的开源通用脚本语言。
•Python语言诞生于1990年,创世人为Guido。
•2000年10月,Python 2.0正式发布,2010年,Python 2.x系列发布最后一版(2.7)。
•2008年12月,Python 3.0正式发布,解释器内部采用完全面向对象的方式实现,代价是3.x系列版本无法向下兼容2.x系列的既有语法。
python基础学习笔记(持续更新)
python基础学习笔记(持续更新)1、Python基础知识1.1 计算机组成原理1.2 认识pythonPython的作者,Guido von Rossum(吉多·范·罗苏姆,中国Python程序员都叫他龟叔),荷兰⼈。
1991年,第⼀个Python编译器诞⽣。
它是⽤C语⾔实现的,并能够调⽤C语⾔的库⽂件。
Python⽬前有两个版本,Python2和Python3。
优缺点:1)优点:容易上⼿、免费开源可移植性、解释性语⾔、⾯向对象2)运⾏时需要源码,执⾏效率慢1.3 第⼀个python程序print("hello world")1.4 注释单⾏:#多⾏:’’’第⼀⾏第⼆⾏‘’’1.5 变量以及类型程序是⽤来处理数据的,⽽变量就是⽤来存储数据的变量不需要定义,⽤type()查看变量的类型1.6 标识符和关键字1)标识符由数字、字母或下划线组成且不能以数字开头,并且区分⼤⼩写关键字是特殊的标识符命名规则:驼峰命名法:⼤驼峰--⾸字母都采⽤⼤写。
例如StuName⼩驼峰:第⼀个单词⾸字母⼩写,第⼆个以及后⾯单词⾸字母⼤写,例如stuName2)关键字:查看关键字命令: import keywordprint(keyword.kwlist)1.7 输出:print()格式化输出换⾏输出: \n ,默认换⾏不换⾏:end= ‘’1.8 输⼊:input()Input输⼊的类型为str1.9 运算符1.10 数据类型转换举例:int(a,16)--16进制 int(a,2)--2进制,默认10进制a = int(print(“请输⼊))res = a+10print(res)0309学习:4节课,4⼩时eval():eval⽅法中的表达式必须是字符串且返回的是字符串原本的数据类型,如下图2、判断语句和循环语句2.1 判断语句If语句判断:格式如下1)if 要判断的条件:条件成⽴时,要做的事情例如:if True:print("LL love ll")2)If-else的使⽤格式:if 条件:满⾜条件时要做的事情1满⾜条件时要做的事情2...(省略)...else:不满⾜条件时要做的事情1不满⾜条件时要做的事情2...(省略)...举例:chePiao = 1 # ⽤1代表有车票,0代表没有车票if chePiao == 1:print("有车票,可以上⽕车")print("终于可以见到Ta了,美滋滋~~~")else:print("没有车票,不能上车")print("亲爱的,那就下次见了")输出:3)if-elif:elif必须和if⼀起使⽤,否则出错else ⼀般⽤在最后,即所有条件都不满⾜时使⽤score = 77if score >= 90 and score <= 100:print('本次考试,等级为A')elif score >= 80 and score < 90:print('本次考试,等级为B')elif score >= 70 and score < 80:print('本次考试,等级为C')elif score >= 60 and score < 70:print('本次考试,等级为D')elif score >= 0 and score < 60:print('本次考试,等级为E')4)if嵌套if 条件1:满⾜条件1 做的事情1满⾜条件1 做的事情2if 条件2:满⾜条件2 做的事情1满⾜条件2 做的事情2说明外层的if判断,也可以是if-else内层的if判断,也可以是if-else2.2 ⽐较运算符2.3 逻辑运算符运算符逻辑表达式描述实例and x and y布尔"与":如果 x 为 False,xand y 返回 False,否则它返回 y的值。
python入门知识背记手册
python入门知识背记手册【实用版】目录一、Python 入门知识背记手册概述二、Python 语言基础三、运算符与表达式四、流程控制语句五、数据结构六、函数与模块七、文件与输入输出八、Python 进阶知识与实践正文一、Python 入门知识背记手册概述Python 作为一门热门的编程语言,近年来受到了广泛关注。
为了让初学者更好地入门 Python,许多编程大佬花费大量时间整理出了一份详尽的 Python 入门知识背记手册。
这份手册涵盖了 Python 语言基础、数据结构、函数与模块、文件与输入输出等方面的知识点,适合编程初学者和有一定基础的学者深入学习。
二、Python 语言基础Python 语言基础包括变量、数据类型、运算符与表达式、流程控制语句等。
熟练掌握这些基础知识,是深入学习 Python 编程的关键。
1.变量:在 Python 中,变量是用于存储数据的标识符。
变量名可以包含字母、数字和下划线,但不能以数字开头。
2.数据类型:Python 中有多种数据类型,如整数、浮点数、字符串、布尔值、列表、元组、字典等。
3.运算符与表达式:Python 中的运算符包括算术运算符、比较运算符、逻辑运算符等。
了解各种运算符的优先级和结合性,有助于编写简洁、高效的代码。
4.流程控制语句:Python 中的流程控制语句包括条件判断(if-elif-else)、循环(for 和 while)等。
掌握这些语句的使用方法,可以更好地控制程序的执行流程。
三、运算符与表达式Python 中的运算符与表达式是编程中经常用到的,包括:1.算术运算符:加法(+)、减法(-)、乘法(*)、除法(/)、取模(%)等。
2.比较运算符:大于(>)、小于(<)、等于(=)、不等于(<>)等。
3.逻辑运算符:and、or、not 等。
4.位运算符:按位与(&)、按位或(|)、按位异或(^)、按位非(~)等。
黑马程序员在线笔记
黑马程序员在线笔记
黑马程序员在线笔记是一种在线学习资源,可以帮助学习者记录学习过程中的重点、难点和心得体会。
以下是黑马程序员在线笔记的一些常见内容:
1. 学习目标:明确学习目标,例如掌握某个编程语言、熟悉某个框架或库等。
2. 学习内容:记录所学的知识点,包括概念、语法、用法等。
3. 笔记总结:对所学内容进行总结,加深理解和记忆。
4. 代码示例:提供相关代码示例,以便学习者更好地理解所学内容。
5. 练习题:提供相关练习题,帮助学习者巩固所学知识。
6. 学习心得:记录学习过程中的感悟和体会,例如对某个概念的理解、对某个问题的解决思路等。
7. 学习计划:制定下一步的学习计划,包括要学习的知识点、练习的题目数量和难度等。
黑马程序员在线笔记的优点包括:
1. 方便快捷:可以在任何时间、任何地点进行学习,不受时间和地点的限制。
2. 记录深刻:可以随时记录自己的学习心得和感悟,加深对所学知识的理解。
3. 回顾方便:方便学习者随时回顾所学内容,加深记忆和理解。
4. 激发兴趣:可以与同学或老师互动交流,激发学习的兴趣和动力。
如果您想要学习一门新的编程语言或技术,建议您可以尝试使用黑马程序员在线笔记来记录自己的学习过程,以便更好地掌握所学知识。
黑马程序员python基础班教程笔记:使
使⽤ Beautiful Soup 解析数据有的⼩伙伴们对写正则表达式的写法⽤得不熟练,没关系,我们还有⼀个更强⼤的⼯具,叫Beautiful Soup,有了它我们可以很⽅便地提取出HTML或XML标签中的内容,实在是⽅便,这⼀节就让我们⼀起来感受⼀下Beautiful Soup的魅⼒1. Beautiful Soup的简介简单来说,Beautiful Soup是python的⼀个库,最主要的功能是从⽹⻚抓取数据。
官⽅解释如下:Beautiful Soup提供⼀些简单的、python式的函数⽤来处理导航、搜索、修改分析树等功能。
它是⼀个⼯具箱,通过解析⽂档为⽤户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出⼀个完整的应⽤程序。
Beautiful Soup⾃动将输⼊⽂档转换为Unicode编码,输出⽂档转换为utf-8编码。
你不需要考虑编码⽅式,除⾮⽂档没有指定⼀个编码⽅式,这时,Beautiful Soup就不能⾃动识别编码⽅式了。
然后,你仅仅需要说明⼀下原始编码⽅式就可以了。
Beautiful Soup已成为和lxml、html6lib⼀样出⾊的python解释器,为⽤户灵活地提供不同的解析策略或强劲的速度。
2. 安装下载地址: https:///pypi/beautifulsoup4/4.3.2官⽅⽂档: /zh_CN/latest3. 使⽤from bs4 import BeautifulSoup我们创建⼀个字符串,后⾯的例⼦我们便会⽤它来演示创建 beautifulsoup 对象soup = BeautifulSoup(html)下⾯我们来打印⼀下 soup 对象的内容,格式化输出print soup.prettify()3.1 找标签我们可以利⽤ soup加标签名轻松地获取这些标签的内容,是不是感觉⽐正则表达式⽅便多了?不过有⼀点是,它查找的是在所有内容中的第⼀个符合要求的标签对于标签,它有两个重要的属性,是 name 和 attrs,下⾯我们分别来感受⼀下soup 对象本身⽐较特殊,它的 name 即为 [document],对于其他内部标签,输出的值便为标签本身的名称在这⾥,我们把 p 标签的所有属性打印输出了出来,得到的类型是⼀个字典。
黑马程序员python基础班教程笔记:(47)self理解
self1. 理解self2. 看如下示例:总结所谓的self,可以理解为⾃⼰以把self当做C++中类⾥⾯的this指针⼀样理解,就是对象⾃身的意思某个对象调⽤其⽅法时,python 解释器会把这个对象作为第⼀个参数传 递给self ,所以开发者只需要传递后⾯的参数即可应⽤:烤地⽠为了更好的理解⾯向对象编程,下⾯以“烤地⽠”为案例,进⾏分析1. 分析“烤地⽠”的属性和⽅法 示例属性如下:cookedLevel : 这是数字;0~3表示还是⽣的,超过3表示半⽣不熟,超过 5表示已经烤好了,超过8表示已经烤成⽊炭了!我们的地⽠开始时时⽣ 的 cookedString : 这是字符串;描述地⽠的⽣熟程度condiments : 这是地⽠的配料列表,⽐如番茄酱、芥末酱等示例⽅法如下:cook() :把地⽠烤⼀段时间addCondiments() : 给地⽠添加配料 : 设置默认的属性: 让print 的结果看起来更好⼀些定义类,并且定义_init_()⽅法3. 添加"烤地⽠"⽅法4. 基本的功能已经有了⼀部分,赶紧测试⼀下把上⾯2块代码合并为⼀个程序后,在代码的下⾯添加以下代码进⾏测试完成的代码为:5. 测试cook⽅法是否好⽤在上⾯的代码最后⾯添加如下代码:print("------接下来要进⾏烤地⽠了-----")mySweetPotato.cook(4) #烤4分钟print(mySweetPotato.cookedLevel)print(mySweetPotato.cookedString)定义addCondiments()⽅法和_str_()方法def str(self):msg = self.cookedString + "地⽠"iflen(self.condiments) >0:msg = msg + "("for temp in self.condiments: msg= msg + temp + ", "msg = msg.strip(", ")msg = msg +")"return msgdef addCondiments(self, condiments):self.condiments.append(condiments) 7. 再次测试完整的代码如下:class SweetPotato:'这是烤地⽠的类'#定义初始化⽅法def init(self):self.cookedLevel = 0self.cookedString = "⽣的"self.condiments =[]#定制print时的显示内容def str(self):msg = self.cookedString + "地⽠"if len(self.condiments) > 0:msg = msg + "("for temp in self.condiments:msg = msg + temp + ", "msg = msg.strip(", ")msg = msg + ")"return msg#烤地⽠⽅法def cook(self, time):self.cookedLevel += timeif self.cookedLevel > 8:self.cookedString = "烤成灰了"elif self.cookedLevel > 5:self.cookedString = "烤好了"elif self.cookedLevel > 3:self.cookedString = "半⽣不熟"else:self.cookedString = "⽣的"#添加配料def addCondiments(self, condiments): self.condiments.append(condiments)# ⽤来进⾏测试mySweetPotato = SweetPotato()print("------有了⼀个地⽠,还没有烤-----") print(mySweetPotato.cookedLevel)print(mySweetPotato.cookedString)print(mySweetPotato.condiments)print("------接下来要进⾏烤地⽠了-----")print("------地⽠经烤了4分钟-----")mySweetPotato.cook(4) #烤4分钟print(mySweetPotato)print("------地⽠⼜经烤了3分钟-----")mySweetPotato.cook(3) #⼜烤了3分钟print(mySweetPotato)print("------接下来要添加配料-番茄酱------") mySweetPotato.addCondiments("番茄酱")print(mySweetPotato)print("------地⽠⼜经烤了5分钟-----")mySweetPotato.cook(5) #⼜烤了5分钟print(mySweetPotato)print("------接下来要添加配料-芥末酱------") mySweetPotato.addCondiments("芥末酱")print(mySweetPotato)隐藏数据可能你已经意识到,查看过着修改对象的属性(数据),有2种⽅法1. 直接通过对象名修改SweetPotato.cookedLevel = 52. 通过⽅法间接修改SweetPotato.cook(5)分析明明可以使⽤第1种⽅法直接修改,为什么还要定义⽅法来间接修改呢?⾄少有2个原因:如果直接修改属性,烤地⽠⾄少需要修改2部分,即修改cookedLevel和cookedString。
黑马程序员python基础班教程之linux笔记:(7)常
黑马程序员python基础班教程之linux笔记:(7)常⽤基本命令很多⼈可能在电视或电影中看到过类似的场景,⿊客⾯对⼀个⿊⾊的屏幕,上⾯飘着密密麻麻的字符,梆梆⼀顿敲,就完成了窃取资料的任务。
Linux 刚出世时没有什么图形界⾯,所有的操作全靠命令完成,就如同电视⾥的⿊客那样,充满了神秘与晦涩。
近⼏年来,尽管Linux 发展得⾮常迅速,图形界⾯越来越友好,但是在真正的开发过程中,Linux 命令⾏的应⽤还是占有⾮常重要的席位,⽽且许多Linux功能在命令⾏界⾯要⽐图形化界⾯下运⾏的快。
可以说不会命令⾏,就不算会Linux。
Linux 提供了⼤量的命令,利⽤它可以有效地完成⼤量的⼯作,如磁盘操作、⽂件存取、⽬录操作、进程管理、⽂件权限设定等。
Linux 发⾏版本最少的命令也有200 多个,这⾥只介绍⽐较重要和使⽤频率最多的命令。
1.命令使⽤⽅法Linux命令格式:说明:command: 命令名,相应功能的英⽂单词或单词的缩写[-options]:选项,可⽤来对命令进⾏控制,也可以省略,[]代表可选parameter1 …:传给命令的参数:可以是零个一个或多个2.查看帮助⽂档<1>--help⼀般是linux命令⾃带的帮助信息如:ls --help<2>man(有问题找男⼈,manual)man是linux提供的⼀个⼿册,包含了绝⼤部分的命令、函数使⽤说明该⼿册分成很多章节(section),使⽤man时可以指定不同的章节来浏览。
例:man ls ; man 2 printfman中各个section意义如下:1. Standardcommands(标准命令)2. Systemcalls(系统调⽤,如open,write)3. Libraryfunctions(库函数,如printf,fopen)4. Specialdevices(设备⽂件的说明,/dev下各种设备)5. Fileformats(⽂件格式,如passwd)6. Games andtoys(游戏和娱乐)7. Miscellaneous(杂项、惯例与协定等,例如Linux档案系统、⽹络协定、ASCII 码;environ全局变量)8. Administrative Commands(管理员命令,如ifconfig)man是按照⼿册的章节号的顺序进⾏搜索的。
黑马程序员python基础班教程笔记:(29)字典的操作1
字典的常⻅操作1<1>修改元素字典的每个元素中的数据是可以修改的,只要通过key 找到,即可修改demo:<2>添加元素demo:访问不存在的元素结果:info = {'name':'班⻓', 'id':100, 'sex':'f', 'address':'地球亚洲中国 newId = input('请输⼊新的学号')info['id'] = int(newId)print('修改之后的id 为%d:'%info['id'])info = {'name':'班⻓', 'sex':'f', 'address':'地球亚洲中国北京'}print('id 为:%d'%info['id'])如果在使⽤变量名['键'] = 数据时,这个“键”在字典中,不存在,那么就会新增这个元素demo:添加新的元素info = {'name':'班⻓', 'sex':'f', 'address':'地球亚洲中国北京'}# print('id为:%d'%info['id'])#程序会终端运⾏,因为访问了不存在的键newId = input('请输⼊新的学号')info['id'] = newIdprint('添加之后的id为:%d'%info['id'])结果:请输⼊新的学号188添加之后的id为: 188<3>删除元素对字典进⾏删除操作,有⼀下⼏种:delclear()demo:del删除指定的元素结果demo:del 删除整个字典info = {'name':'班⻓', 'sex':'f', 'address':'地球亚洲中国北京'} print('删除前,%s'%info['name'])del info['name']print('删除后,%s'%info['name'])info = {'name':'monitor', 'sex':'f', 'address':'China'} print('删除前,%s'%info)del info结果demo:clear 清空整个字典结果字典的常⻅操作2<1>len()测量字典中,键值对的个数info = {'name':'monitor', 'sex':'f','address':'China'} print('清空前,%s'%info)info.clear()<2>keys返回⼀个包含字典所有KEY的列表<3>values返回⼀个包含字典所有value的列表<4>items返回⼀个包含所有(键,值)元祖的列表<5>has_keydict.has_key(key)如果key在字典中,返回True,否则返回False。
黑马程序员python600集讲义
黑马程序员Python600集讲义一、简介1.1 Python的重要性Python作为一种高级编程语言,具有简洁易读、功能强大、可扩展性强等特点,在互联网、人工智能、数据分析等领域得到了广泛的应用。
学习Python编程对于IT从业者和计算机专业学生来说具有非常重要的意义。
1.2 黑马程序员Python600集讲义概述黑马程序员是国内知名的IT培训机构,其推出的Python600集讲义是一套系统全面的Python学习教材,内容涵盖了Python基础语法、面向对象编程、GUI编程、网络编程、数据库操作、数据分析等方面,适合初学者和有一定编程基础的学习者使用。
二、课程内容2.1 Python基础语法在Python600集讲义中,详细介绍了Python的基础语法,包括变量、数据类型、运算符、条件语句、循环语句等内容。
通过理论与实践结合的方式,学习者能够快速掌握Python编程的基本知识。
2.2 面向对象编程面向对象编程是Python编程中非常重要的一个方面,在Python600集讲义中,对面向对象编程的原理、概念、继承、多态等内容进行了详细讲解,并提供了大量的实例演练,帮助学习者深入理解面向对象编程的精髓。
2.3 GUI编程Python的GUI编程是学习者比较关注的一个方面,Python600集讲义中涵盖了Tkinter、PyQt等GUI编程工具的使用方法,通过实例演练,学习者能够掌握如何使用Python开发各种图形界面应用程序。
2.4 网络编程网络编程是Python应用十分广泛的一个领域,Python600集讲义中对socket编程、HTTP协议、网络爬虫等内容进行了系统讲解,帮助学习者掌握Python在网络编程方面的应用技巧。
2.5 数据库操作Python与数据库的结合也是学习者关注的重点之一,Python600集讲义中介绍了Python对MySQL、MongoDB等数据库的操作方法,包括连接、查询、插入、更新、删除等操作,帮助学习者掌握Python 与数据库交互的技能。
黑马程序员_PHP_课程同步笔记day25:类与对象
【黑马程序员】PHP课程同步笔记day25:类与对象类和对象类:是用于“称呼”某一类具有共同特征信息的事物的总称;比如:狗:就是一种“类”,鱼:也是一种类;对象:是用于称呼某一个“具体事物”的一个名字。
对象是“特指”,相应的,类是“泛指”。
在现实中,总是先有对象,后有类——因为,类是“人”的一种抽象和概括能力所“定义”出来的!在代码中,总是现有类,后有对象——因为,任何一个对象,都是通过类“new”(创建)出来的!可见:类是用于描述某一类事物(对象)的共同特征信息和行为能力(功能)的代码块!而对象是由该类所“new”出来的一个代表具体事物的“变量”;对象,因此,就自然具有了定义该类的时候的内部的那些特征信息(属性)和行为能力(方法);属性和方法//定义一个“狗”类class Dog{var $color ; //这就是属性,其实就是原来的变量var $name = ‘小狗’; //这是属性,属性可以赋值,也可以不赋值//但注意:赋值只能赋“直接值”,比如:18,“大学”, “小花”,//不能是表达式或变量;function kanmen(){ //这是方法,跟定义函数没有区别!!!echo "<br />{$this->name} 在汪汪汪";//$this表示“自己”,“我”,“本身”//$this->name 就表示“我的名字”;}}总结:1,属性,就是变量,其所有使用方式和形式,都跟变量一样:可以取值,赋值,isset()判断,unset()销毁。
属性的使用,必须是类似这样:$对象变量->属性名;2,方法,就是函数。
函数的使用,必须是这样:$对象变量->方法名(【实参1,实参2,.... 】);3,一个类的定义中,只能有如下3中“东西”:属性,方法,常量(类常量);——他们通称为类中成员;形式如下:class 类名{常量定义1;常量定义2;.....属性定义1;属性定义2;.....方法定义1;方法定义2;......}创建对象的形式:class C{//这是一个类}形式1:$obj1 = new C(); //创建一个对象形式2:$s = “C”; //这是一个字符串而已$obj2 = new $s(); //创建另一个对象,是一个C类的对象,这就是所谓的“可变类”;形式3:$obj3 = new $obj1(); //通过一个现有对象,创建一个新对象;其实就是创建了该对象所属的类的对象形式4:$obj4 = new self; //self是一个关键字,代表“本类”(当前类本身),该语句只能写在类的内部;对象的使用几乎只有这样的情形:1,要么使用其属性:$对象变量名->属性名;2,要么使用其方法:$对象变量名->方法名( .... );。
黑马python入门(7):Python基础(简单飞机大战实战)
⿊马python⼊门(7):Python基础(简单飞机⼤战实战)官⽅标准源码素材来源个⼈分析思路(和正统的有很⼤差距⾮常粗糙按照⾃⼰思路来写的⽐较初级仅供参考)⾸先分析整个项⽬可能需要的对象飞机⼤战有我机有敌机我机还要发射⼦弹再精细⼀点就是下⾯1.我机对象2.敌机对象3.⼦弹对象4.背景对象因为要做出飞机正在移动的错觉需要背景也需要移动所以也算是对象5.游戏窗⼝对象对象如何交互才能让整个游戏正常运转下去先要有⼀个游戏窗⼝还要有⼀个游戏窗⼝背景背景还要不断的向下滚动造成⼀种飞机在前进的假象我机需要不断射出⼦弹⼦弹打中敌机则敌机被摧毁打不着直到⼦弹飞到最上⾯消失即可敌机不断涌现向下飞撞上了我机的话我机敌机都被摧毁游戏结束没撞上则不管继续向下飞直到最下⾯消失即可这样交互才能维持整个游戏的运⾏由此我们进⼀步分析这⼏个对象可能需要具备的功能我机:⼀开始出⽣在窗⼝的最下⾯的中间位置可以通过键盘的上下左右来控制移动我机但是不能超出边界不断的发射⼦弹⼀旦被敌机撞上就判定游戏结束属性:image 我机的图像来源rect 坐标和宽⾼初始位于最下⾯中间位置还要限制飞机位置不能超出四⽅边界⽅法 :fire()发射⼦弹按理说⼦弹这个是属于我机的需要在该⽅法中⽣成⼦弹然后才能发射⼦弹move() 移动(配合按键事件上下左右使⽤)class HeroPlaneClass(pygame.sprite.Sprite):"""定义⼀个英雄飞机类继承⾃pygame的精灵类属性 image rect 定义飞机的图⽚来源和初始坐标和宽⾼⽅法 update __init__(需要调⽤⽗类的init) fire() 发射⼦弹的⽅法⽀持需要pygame和常量 WIN_SIZE"""def__init__(self, image, **kwargs):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load(image) # image获取图像surfaceself.rect = self.image.get_rect() # rect获取宽⾼# 英雄飞机初始位置位于最下⾯的中间self.rect.x = int((WIN_SIZE[0] - self.rect.w)/2)self.rect.y = WIN_SIZE[1] - self.rect.hdef update(self):# 英雄飞机的⾏为:是⽤键盘事件上下左右键盘控制的所以这⾥就不写具体⾏为了pass# 负责⽣成⼦弹实例然后⼦弹按照⾃⼰的⾏为模式运动即可# 第⼆个参数是⽤于暂时存放⼦弹实例的⼦弹精灵组# 经过测试发现类⽅法传递精灵组也是地址传递在类⽅法内修改⼀样会提现到精灵组本⾝def fire(self, tmp_bullet_group):# ⽣成⼀个⼦弹tmp_bullet = BulletClass(BULLET_PATH, self.rect)tmp_bullet_group.add(tmp_bullet) # 添加到⼦弹精灵组⾥⾯# 简单的移动我机和按键触发事件配合使⽤def move(self, offset_x=0, offset_y=0):self.rect.x += offset_xself.rect.y += offset_y# 避免越界if self.rect.x < 0:self.rect.x = 0elif self.rect.x > WIN_SIZE[0] - self.rect.w:self.rect.x = WIN_SIZE[0] - self.rect.wif self.rect.y < 0:self.rect.y = 0elif self.rect.y > WIN_SIZE[1] - self.rect.h:self.rect.y = WIN_SIZE[1] - self.rect.h敌机:游戏窗⼝最上⾯⼀⾏的随机位置⽣成⽣成后⽆脑的向下移动直到撞到我机或者到达游戏窗⼝最下⾯才消失注意要源源不断的⾃动⽣成⽽且移动速度是随机的属性:image 图像来源rect 坐标和宽⾼初始位于游戏窗⼝最上⾯⼀⾏的随机位置⽣成⽅法 :update() ⾏为轨迹直接写到update()⽅法⾥即可描绘其⾏为模式源源不断的⽣成敌机只需要定时器定时⽣成敌机就好class EnemyPlaneClass(pygame.sprite.Sprite):"""定义⼀个敌⼈飞机类继承⾃pygame的精灵类属性 image rect 定义飞机的图⽚来源和初始坐标和宽⾼⽅法 update __init__(需要调⽤⽗类的init)⽀持需要pygame random 和常量 WIN_SIZE"""def__init__(self, image, **kwargs):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load(image) # image获取图像surfaceself.rect = self.image.get_rect() # rect获取宽⾼# 敌机要求在最上⼀⾏随机位置刷新self.rect.x = random.randint(1, WIN_SIZE[0] - self.rect.x)self.rect.y = 0def update(self, *args):# 敌机的⾏为:是在间隔⼀定时间⾃动在最上⼀⾏随机位置产⽣然后⽆脑向下直⾛超出最下边界就⾃动销毁他# 后⾯也可以考虑远距离开始瞄准英雄飞机抛物线撞击后⾯再说self.rect.y += 10if self.rect.y > WIN_SIZE[1]:self.kill() # 敌机超出最下⾯边界了⾃然是⾃动销毁def__del__(self):print("<敌机销毁>")⼦弹:起始位置和当前的我机的⼀致在我机的上部中间位置起始⽆脑向上移动直到撞到敌机或者到达游戏窗⼝最上⾯才消失属性imagerect 初始位于我机的上⾯中间发射固定向上移动到了最上⾯就消失速度是固定的⽅法update() 固定向上移动到了最上⾯就消失速度是固定的源源不断的发射⼦弹只需要定时器定时触发我机的fire()就可以实现class BulletClass(pygame.sprite.Sprite):"""定义⼀个⼦弹类继承⾃pygame的精灵类属性 image rect 定义⼦弹的图⽚来源和初始坐标和宽⾼⽅法 update __init__(需要调⽤⽗类的init)⽀持需要pygame和常量 WIN_SIZE"""def__init__(self, image, hero_rect):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load(image) # image获取图像surfaceself.rect = self.image.get_rect() # rect获取宽⾼# ⼦弹的初始位置要求在英雄飞机的上部中间位置self.rect.x = hero_rect.x + int(hero_rect.w/2)self.rect.y = hero_rect.ydef update(self, *args):# ⼦弹的⾏为:是在间隔⼀定时间⾃动在英雄飞机最上⼀⾏中间位置产⽣然后⽆脑向上直⾛超出最上边界就⾃动销毁他self.rect.y -= 10if self.rect.y < 0 - self.rect.h:self.kill() # ⼦弹超出最上边界就⾃动销毁他def__del__(self):print("(⼦弹销毁)")背景:只需要背景慢慢向下移动⽆法遮住整个窗⼝的时候回归初始位置重新向下移动即可属性imagerect 初始背景左下和窗⼝左下对齐就⾏⽅法update() 背景慢慢向下移动⽆法遮住整个窗⼝的时候回归初始位置重新向下移动即可速度是固定的class BgClass(pygame.sprite.Sprite):"""定义⼀个背景类继承⾃pygame的精灵类属性 image rect 定义背景的图⽚来源和初始坐标和宽⾼初始位置是超出了游戏窗⼝开始是左下和左下对齐到头了是左上和左上对齐⽅法 update __init__(需要调⽤⽗类的init)⽀持需要pygame和常量 WIN_SIZE"""def__init__(self, image):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load(image) # image获取图像surfaceself.rect = self.image.get_rect() # rect获取宽⾼self.rect.y = WIN_SIZE[1] - self.rect.h # 设置背景的初始⾼度def update(self, *args):# 背景的⾏为:图左下和窗⼝左下对齐然后慢慢的向下移动当然了我这⾥背景图⽚是1400⾼度是2个背景图拼接在⼀起的# 背景图的左上对齐窗⼝左上或者超出就⾃动回到初始位置重新来过self.rect.y += 10if self.rect.y > 0:self.rect.y = WIN_SIZE[1] - self.rect.h # 让背景重新回到上⾯重新滚动游戏窗⼝:没什么可说的本质上其实就是⼀句代码的事情但是为了归类⽅便也把它作为⼀个对象来看待没有移动只有宽⾼属性:wh元组来规定窗⼝的宽⾼其他没了也没有什么动作class WinClass(object):"""经过测试⽤get_window返回⼀个窗⼝对象可以正常的使⽤这类其实就是⽣成⼀个游戏窗⼝对象并返回它需要pygame库的⽀持"""def__init__(self, pos):self.x = pos[0]self.y = pos[1]def get_window(self):return pygame.display.set_mode((self.x, self.y))整体代码:对象构建好了我们要构建我们的整体代码整体代码也可以是⼀个完整的类因为这些对象我们需要指定规则让他们互动需要⼀个神秘的god 很多东西需要god来负责光靠这⼏个对象⽆法实现整体代码写成⼀个类其实也不难理解平时我们常见的代码结构变量函数可以轻轻松松的转化成类实例属性类实例⽅法或者静态⽅法类属性类⽅法等等并且这些东西都在⼀个类内类内调⽤就⽐较的⽅便省事#!/usr/bin/env python3# -*- coding: utf-8 -*-# author:albert time:2020/9/23import randomimport pygame# 常量WIN_SIZE = (480, 700) # 游戏窗⼝宽⾼FPS = 60 # 游戏帧数HERO_PATH = "images/me1.png"# 我⽅飞机图的路径ENEMY_PATH = "images/enemy1.png"# 敌机图的路径BULLET_PATH = "images/bullet1.png"# ⼦弹图的路径BG_PATH = "images/background.png"# 背景图的路径CREATE_ENEMY_EVENT = EREVENT # 配合定时器定时⽣成敌机CREATE_BULLET_EVENT = EREVENT + 1 # 配合定时器定时⽣成⼦弹class HeroPlaneClass(pygame.sprite.Sprite):"""定义⼀个英雄飞机类继承⾃pygame的精灵类属性 image rect 定义飞机的图⽚来源和初始坐标和宽⾼⽅法 update __init__(需要调⽤⽗类的init) fire() 发射⼦弹的⽅法⽀持需要pygame和常量 WIN_SIZE"""def__init__(self, image, **kwargs):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load(image) # image获取图像surfaceself.rect = self.image.get_rect() # rect获取宽⾼# 英雄飞机初始位置位于最下⾯的中间self.rect.x = int((WIN_SIZE[0] - self.rect.w)/2)self.rect.y = WIN_SIZE[1] - self.rect.hdef update(self):# 英雄飞机的⾏为:是⽤键盘事件上下左右键盘控制的所以这⾥就不写具体⾏为了pass# 负责⽣成⼦弹实例然后⼦弹按照⾃⼰的⾏为模式运动即可# 第⼆个参数是⽤于暂时存放⼦弹实例的⼦弹精灵组# 经过测试发现类⽅法传递精灵组也是地址传递在类⽅法内修改⼀样会提现到精灵组本⾝def fire(self, tmp_bullet_group):# ⽣成⼀个⼦弹tmp_bullet = BulletClass(BULLET_PATH, self.rect)tmp_bullet_group.add(tmp_bullet) # 添加到⼦弹精灵组⾥⾯# 简单的移动我机和按键触发事件配合使⽤def move(self, offset_x=0, offset_y=0):self.rect.x += offset_xself.rect.y += offset_y# 避免越界if self.rect.x < 0:self.rect.x = 0elif self.rect.x > WIN_SIZE[0] - self.rect.w:self.rect.x = WIN_SIZE[0] - self.rect.wif self.rect.y < 0:self.rect.y = 0elif self.rect.y > WIN_SIZE[1] - self.rect.h:self.rect.y = WIN_SIZE[1] - self.rect.hclass EnemyPlaneClass(pygame.sprite.Sprite):"""定义⼀个敌⼈飞机类继承⾃pygame的精灵类属性 image rect 定义飞机的图⽚来源和初始坐标和宽⾼⽅法 update __init__(需要调⽤⽗类的init)⽀持需要pygame和常量 WIN_SIZE"""def__init__(self, image, **kwargs):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load(image) # image获取图像surfaceself.rect = self.image.get_rect() # rect获取宽⾼# 敌机要求在最上⼀⾏随机位置刷新self.rect.x = random.randint(1, WIN_SIZE[0] - self.rect.x)self.rect.y = 0def update(self, *args):# 敌机的⾏为:是在间隔⼀定时间⾃动在最上⼀⾏随机位置产⽣然后⽆脑向下直⾛超出最下边界就⾃动销毁他# 后⾯也可以考虑远距离开始瞄准英雄飞机抛物线撞击后⾯再说self.rect.y += 10if self.rect.y > WIN_SIZE[1]:self.kill() # 敌机超出最下⾯边界了⾃然是⾃动销毁def__del__(self):print("<敌机销毁>")class BulletClass(pygame.sprite.Sprite):"""定义⼀个⼦弹类继承⾃pygame的精灵类属性 image rect 定义⼦弹的图⽚来源和初始坐标和宽⾼⽅法 update __init__(需要调⽤⽗类的init)⽀持需要pygame和常量 WIN_SIZE"""def__init__(self, image, hero_rect):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load(image) # image获取图像surfaceself.rect = self.image.get_rect() # rect获取宽⾼# ⼦弹的初始位置要求在英雄飞机的上部中间位置self.rect.x = hero_rect.x + int(hero_rect.w/2)self.rect.y = hero_rect.ydef update(self, *args):# ⼦弹的⾏为:是在间隔⼀定时间⾃动在英雄飞机最上⼀⾏中间位置产⽣然后⽆脑向上直⾛超出最上边界就⾃动销毁他self.rect.y -= 10if self.rect.y < 0 - self.rect.h:self.kill() # ⼦弹超出最上边界就⾃动销毁他def__del__(self):print("(⼦弹销毁)")class BgClass(pygame.sprite.Sprite):"""定义⼀个背景类继承⾃pygame的精灵类属性 image rect 定义背景的图⽚来源和初始坐标和宽⾼初始位置是超出了游戏窗⼝开始是左下和左下对齐到头了是左上和左上对齐⽅法 update __init__(需要调⽤⽗类的init)⽀持需要pygame和常量 WIN_SIZE"""def__init__(self, image):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load(image) # image获取图像surfaceself.rect = self.image.get_rect() # rect获取宽⾼self.rect.y = WIN_SIZE[1] - self.rect.h # 设置背景的初始⾼度def update(self, *args):# 背景的⾏为:图左下和窗⼝左下对齐然后慢慢的向下移动当然了我这⾥背景图⽚是1400⾼度是2个背景图拼接在⼀起的# 背景图的左上对齐窗⼝左上或者超出就⾃动回到初始位置重新来过self.rect.y += 10if self.rect.y > 0:self.rect.y = WIN_SIZE[1] - self.rect.h # 让背景重新回到上⾯重新滚动class WinClass(object):"""经过测试⽤get_window返回⼀个窗⼝对象可以正常的使⽤这类其实就是⽣成⼀个游戏窗⼝对象并返回它需要pygame库的⽀持"""def__init__(self, pos):self.x = pos[0]self.y = pos[1]def get_window(self):return pygame.display.set_mode((self.x, self.y))class GameGod(object):def__init__(self):# 整体代码初始化常⽤属性的声明pygame.init()# 窗⼝建⽴tmp_win = WinClass(WIN_SIZE)self.win1 = tmp_win.get_window()# 我机敌机的精灵实例和精灵组的创建背景⼦弹精灵组self.bg1 = BgClass(BG_PATH)self.bg_group = pygame.sprite.Group(self.bg1)self.hero1 = HeroPlaneClass(HERO_PATH)self.hero_group = pygame.sprite.Group(self.hero1)self.enemy_group = pygame.sprite.Group()self.bullet_group = pygame.sprite.Group()# clock的建⽴和定时器定时⽣成敌机和⽣成⼦弹self.clock = pygame.time.Clock()pygame.time.set_timer(CREATE_ENEMY_EVENT, 1000)pygame.time.set_timer(CREATE_BULLET_EVENT, 100)def game_start(self):# 正式循环的开始# 循环fps 事件触发判断碰撞绘图刷新while True:# 1. 设置刷新帧率self.clock.tick(FPS)# 2. 事件监听# 开始遍历事件做针对处理同时避免卡顿for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()if event.type == CREATE_ENEMY_EVENT:# 定时创建敌机self.enemy_group.add(EnemyPlaneClass(ENEMY_PATH))if event.type == CREATE_BULLET_EVENT:# 定时开⽕其实本质是定时⽣成⼦弹⼦弹被⽣成后按照⼦弹类定义的⾏为移动 self.hero1.fire(self.bullet_group)# 配合按键事件来移动我机keys_pressed = pygame.key.get_pressed()if keys_pressed[pygame.K_UP]:print("向上")# hero1.rect.y -= 4self.hero1.move(0, -4)elif keys_pressed[pygame.K_DOWN]:print("向下")# hero1.rect.y += 4self.hero1.move(0, 4)elif keys_pressed[pygame.K_LEFT]:print("向左")# hero1.rect.x -= 4self.hero1.move(-4, 0)elif keys_pressed[pygame.K_RIGHT]:print("向右")# hero1.rect.x += 4self.hero1.move(4, 0)# 3. 碰撞检测# ⼦弹摧毁敌机(⼦弹组和敌机组的碰撞测试)pygame.sprite.groupcollide(self.bullet_group, self.enemy_group, True, True) # 敌机撞毁英雄(敌机组和英雄精英的碰撞测试)enemies = pygame.sprite.spritecollide(self.hero1, self.enemy_group, True) # 判断列表时候有内容就是说我机被撞上了if len(enemies) > 0:# 让英雄牺牲self.hero1.kill()# 结束游戏pygame.quit()exit()# 4. 更新/绘制精灵组self.bg_group.update() # 肯定是先更新背景self.bg_group.draw(self.win1)self.hero_group.update()self.hero_group.draw(self.win1)self.enemy_group.update()self.enemy_group.draw(self.win1)self.bullet_group.update()self.bullet_group.draw(self.win1)# 5. 更新显⽰pygame.display.update()def game_over(self):pygame.quit()exit()if__name__ == '__main__':# 没事可以外⾯加个异常处理懒得动弹了god1 = GameGod()god1.game_start()god1.game_over()素材:另存为到py⽂件下的images⽂件夹下images/background.pngimages/me1.pngimages/enemy1.pngimages/bullet1.png。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
爬?基本原理
爬?是模拟?户在浏览器或者App应?上的操作,把操作的过程、实现?动化的程序
当我们在浏览器中输??个url后回?,后台会发?什么?
简单来说这段过程发?了以下四个步骤:
查找域名对应的IP地址。
浏览器?先访问的是DNS(Domain Name System,域名系统),dns的主要
?作就是把域名转换成相应的IP地址
向IP对应的服务器发送请求。
服务器响应请求,发回??内容。
浏览器显示??内容。
浏览器是如何发送和接收这个数据呢?
HTTP协议(HyperText Transfer Protocol,超?本传输协议)?的是为了提供?种发布和接收HTML(HyperText Markup Language)??的?法。
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为?标的HTTP通道,简单讲是HTTP的安全版。
使?urllib爬取数据
1.urlopen( ) 打开?个url的?法,返回?个?件对象,然后可以进?类似?件对象的操作
2.urlretrieve( )
urlretrieve?法将url定位到的html?件下载到你本地的硬盘中。
如果不指定filename,则会存为临时?件。
urlretrieve()返回?个?元组(filename,mine_hdrs)
2.1 不指定路径
说明:清除由于urllib.urlretrieve()所产?的缓存
2.2 指定路径
2.3 urlencode( )
上?的程序演示了最基本的??抓取,不过,现在?多数?站都是动态? ?,需要你动态地传递参数给它,它做出对应的响应。
所以,在访问时,我们需要传递数据给它。
最常?的情况是什么?对了,就是登录注册的时候呀。
把数据?户名和密码传送到?个URL,然后你得到服务器处理之后的响应,这个该怎么办?下?让我来为?伙伴们揭晓吧!数据传送分为POST和 GET两种?式两种?式有什么区别呢?最重要的区别是GET?式是直接以链接形式访问,链接中包含了所有的参数,当然如果包含了密码的话是?种不安全的选择,不过你可以直观地看到 ??提交了什么内容。
POST则不会在?址上显示所有的参数,不过如果你想直接查看提交了什么就不太?便了,?家可以酌情选择。
这?可以与urlopen结合以实现post?法和get?法:
GET?法。