视频教程_蓝桥杯青少年创意编程 Python 组 赛前集训教程包(蓝桥杯Python中级集训包_v2)

如本文章标有价格,需议价或其它事情商议请加微信scratch8

这是风火轮编程录制的<蓝桥杯Python中级集训包_v2>讲解视频,包括以下内容:

李兴球Python蓝桥杯Python集训中级视频教程目录文档
本视频教程共有三个视频,时长为2个小时多一点,还有一个PDF文档。后面的面向对象视频讲解,采用的是更加形象些的海龟画图案例来讲解的。如有需要请扫码付款:
VIP免费查看

已有0人支付

 

下面是PDF文档的内容:

目 录

一、Python 的安装………………………………………………………………………………………….. 2

二、 交互式解释器………………………………………………………………………………………… 4

三、输出 print()与数据类型………………………………………………………………………….. 5

四、变量与四则运算………………………………………………………………………………………. 7

五、输入 input()……………………………………………………………………………………………. 9

六、 字符串格式化………………………………………………………………………………………. 10

七、 数据类型之布尔类型……………………………………………………………………………. 11

八、 选择结构……………………………………………………………………………………………… 13

九、 数据结构之序列…………………………………………………………………………………… 16

十、 循环语句……………………………………………………………………………………………… 19

十一、 函数…………………………………………………………………………………………………. 21

十二、random 模块之 randint()函数……………………………………………………………… 24

十三、文件操作……………………………………………………………………………………………. 25

十四、异常处理……………………………………………………………………………………………. 27

十五、turtle 模块………………………………………………………………………………………… 29

十六、面向对象(一)…………………………………………………………………………………….. 31

十七、面向对象(二)…………………………………………………………………………………….. 32

十八、面向对象(三)…………………………………………………………………………………….. 34

十九、面向对象(四)…………………………………………………………………………………….. 36

 

一、Python 的安装

     电脑系统选择:

  1. Windows 系统
    1. XP 系统
    2. Win7 及以上系统
  2. Mac 系统
  3. Linux 系统
  4. Python 版本选择:
    1. Python2
    2. Python3

Python 当前有 2 个版本,并不能兼容,所以如果代码是使用 Python2 编 写的话,那么在 Python3 这个环境中是不能运行的。2020 年 1 月 1 日, Python2 会停止更新,以后如果使用 Python2 作为商业用途的话需要向 国外一家公司购买商业服务。

Python3 现如今在市场上的占比相对于 Python2 要多的多。这次培训, 我们使用 Python3 进行教学。

  1. 官网 python.org,选择 DOWNLOADS,windows 和 Mac 系统所有 Python 版本都有。XP 系统只能使用 python3.5 之前的版本。在下载 windows 版 本的时候最好看一下本机的操作系统,操作系统分为 32 位和 64 位。右 键点击我的电脑或者是计算机,查看属性,在属性中就可以看到计算机 操作系统版本。
  2. 安装:
  3. a) 安装的时候无论是自定义位置安装还是直接安装在 C 盘,都需要把 下面有个选项要勾上,□add python to path
  4. b) 如果没有按照 a 步骤操作,我们需要自己添加环境变量。右键单击 我的电脑,依次点击”属性”->”高级”->”环境变量”,在“系统变量” 表单中点击叫做 Path 的变量,然后编辑这个变量,把“;C:\Python\”, 也就是 Python 的安装路径,加到它的结尾。注意!要用英文分号和 前面已有的内容隔开。然后点确定,点确定,再点确定。完成。

 

  1. 测试:

怎么知道你已经成功安装了 Python 呢?这时候你需要打开命令行,或者 叫命令提示符、控制台。方法是:点击开始菜单->程序->附件->命令提 示符;或者直接在桌面按快捷键“Win+r”,Win 键就是 Ctrl 和 Alt 旁边 那个有 windows 图标的键,输入 cmd,回车。这时候你就看到 dos 命令界 面。

在命令行里输入 python,回车。如果看到诸如:

Python XXX (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32

的提示文字,恭喜你! 接下来,你就可以输入那句程序员最爱的 print(“Hello World”)

向 Python 的世界里发出第一声。

 

二、交互式解释器

  1. 交互式解释器:启动 Python 后,可看到类似于下面的提示符: Python 3.5.0 (default, Dec 5 2015, 15:03:35)

[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.1.76)] on darwin Type “help”, “copyright”, “credits” or “license” for more information.

>>> 解释器的外观及其显示的错误消息因版本而异。

>>> 是提示符,可在后面输入一些内容。最常见的是可以作为计算器使用,比如, 输入 1+2 之后按回车键,交互界面就会给出结果 3;或者 99999999999999999999999999999999*999999999999 这种计算略微复杂的多位

数相乘,也可以很快的得到答案。尝试进行一些四则运算吧!

  1. 文件(File):交互解释器基于每写一行就会运行的特性,一般用于代码的 测试,而且交互界面的代码无法保存。所以,绝大多数时间代码都是在新建 文件中编写。在文件中编写代码,一行只能写一个指令。当代码写完之后需 要将其保存为一个“.py”文件,然后点击文件菜单栏上的”Run”选项,选 择第三个”Run module”或者直接按 F5 运行。注意,文件每次更改以后需要 重新保存。
  2. 设置界面:Python IDLE 界面可以通过菜单栏中的”Options”->”Configure IDLE”选项进行字体、背景等等一些设置,包括一些关键字的颜色。

 

三、输出 print()与数据类型

 

  1. 输出指令:print()方法用于打印输出。

 

以下是 print()方法的语法:

 

print(*objects, sep=’ ‘, end=’\n’) 参数

objects — 复数,表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。

sep — 用来间隔多个对象,默认值是一个空格。

end — 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符 串。

 

  1. 数据类型:
  2. a) 数字,数字是几乎所有编程语言里最基本的数据类型,它是我们通过代 码连接现实世界的基础。在 Python 里有三种数值类型:整型(int)、 浮点型(float)和复数(complex)。绝大多数情况下,我们只需要和 前两种打交道。
  3. 整型(int):通常被称为整型或整数,可以是正整数或负整数,不 带小数点。Python3 虽然没有限制大小,但是因为计算机内存限制, 我们使用的整数是不可能无限大的。
  4. 浮点型(float):浮点型有整数部分和小数部分组成,浮点型也可 以使用科学计数法表示。
  5. b) 字符串(str),字符串从字面理解,我是这样理解的。字,字母、文字、 数字;符,各种符号;用单引号’ ‘或者是双引号” ”将字与符串起来, 就组成了字符串。
    1. 字符串拼接:例如’Hello’+’Python’,组成’HelloPython’
    2. 字符串重复输出:字符串可以与整型相乘,如果与正整数相乘,将 会得到相应整数的字符串。

 

iii.    join() 方法用于将序列中的元素以指定的字符连接生成一个新的 字符串。括号中填写要连接的序列,例如’-‘.join(‘sight’),则会 形成一个新的字符串’s-i-g-h-t’。

 

四、变量与四则运算

 

  1. 变量:
  2. a) 变量是表示(或指向)特定值的名称。例如,你可能想使用名称 x 来表 示 3,为此执行这样一行代码:x = 3。这称为赋值,我们将值赋给了变 量 x。换而言之,就是将变量 x 与值(或对象)3 关联起来。给变量赋值 后,就可在表达式中使用它。例如,print(x*2)就会得出结果 6。使用 Python 变量前必须要给它赋值,Python 变量没有默认值。
  3. b) 变量的命名:在 Python 中,名称(变量名)只能由字母、数字和下划线

(_)构成,且不能以数字开头。因此 Sight01 是合法的变量名,而 0sight 则不是。为变量起名很重要,好的变量名可以极大的提高代码的整体可 读性。从开发的角度给点建议,变量名要有描述性,不能太宽泛。比如 使用 day 来作为一个变量,个人认为没有 day_of_week 作为变量好。

  1. c) 字符串与数字之间的转换,当我们将一种数据类型赋值给变量时,如果 要改变这个变量的数据类型,那就必须把这个数据类型先进行转换,然 后再重新赋值给变量。例如,a = ‘123’,使用 int(a)进行转换,但是 转换的结果并没有重新赋值给 a,所以必须这么写,a = int(a)。反之, a = 123,使用 a = str(a)将 a 的值从整数转换为字符串。
  1. Python 算术运算符:
  2. a) 加,两个对象相加。
  3. b) 减,得到负数或者是一个数减去另一个数。
  4. c) 乘,两个数相乘或者是返回一个重复若干次的字符串。 d) 除,x 除以 y。
  5. e) 取模,返回除法的余数,使用%表示。例如,3%2 的结果是 1。
  6. f) 幂,返回 x 的 y 次幂,使用**表示。例如,10**2 表示 10 的平方。
  7. g) 整除,取整除,向下取接近除数的整数,使用//表示。例如,9//2 的结 果是 4。
  8. Python 赋值运算符:
  9. a) = ,简单的赋值运算符。
  10. b) +=,加法赋值运算符。 c+=a 等效于 c = c+a

 

  1. c) -=,减法赋值运算符。 c-=a 等效于 c = c-a d) *=,乘法赋值运算符。 c*=a 等效于 c = c*a e) /=,除法赋值运算符。 c/=a 等效于 c = c/a f) %=,取模赋值运算符。 c%=a 等效于 c = c%a g) **=,幂赋值运算符。 c**=a 等效于 c = c**a
  2. h) //=,取整除赋值运算符。 c//=a 等效于 c = c//a

 

五、输入 input()

 

  1. 输入指令:input(),括号中填写的是提示信息。可以接收任意输入,将所有 输入默认为字符串处理,并返回字符串类型。(所有的输入视为一个字符串, 如果有多个数据的输入如何处理?)
  2. 程序设计基本模式,IPO。I,input 输入,程序的输入;P,process 处理, 程序的主要逻辑;O,output 输出,程序的输出。
  3. 解决问题的方法:程序本身是为了满足我们的需求而存在的,而这些提出的 需求将会由程序转换为数据进行处理分析,最后呈现在我们眼前。比如说, 我们需要买一台电脑,通常行为都是打开某个 App,进行搜索,或者有的时 候你可能打开 App 的时候,各个电脑品牌已经呈现在首页。说到底,程序其 实就是数据处理。所以,我们在面对 Python 试题的时候,首先应该想方设法 的将题目所要求的精准数据获取到,然后进行处理。
  4. a) 获取输入数据,input(),并将数据储存于一个变量中。(当前数据为字 符串类型)
  5. b) 根据要求改变数据类型,并储存于变量中 c) 对数据进行处理分析
  6. d) 输出问题答案

 

六、字符串格式化

 字符串拼接:

  1. a) 使用+符号拼接
  2. b) 使用 format()方法拼接 举例:

a = ‘apples’ b = ‘pears’

c = ‘bananas’

  1. 使用+符号拼接:abc = ‘There are’+a+’,’+b+’,’+c+’on the table.’(该方法效率比较低,不建议使用)
    1. 使用 format()方法拼接:abc = ‘There are {x},{y},{z} on the table.’.format(x=a,y=b,z=c)

 

七、数据类型之布尔类型 

布尔类型:

  1. a) 布尔类型只有两个值:True 和 False(注意首字母大写)
  2. b) True/False 是数值 1 和 0 的另一种表示方式,可以直接参与数值运 算。
  3. 逻辑运算符(不支持符号类型):
    1. and:x and y,x 和 y 都为 True,返回 True。 or:x 或 y 有一个为真即是真。
    2. not:not x,x 真假取反。 ii. 比较运算符:
    3. 大于, >。
    4. 小于, <。
    5. 大于等于, >=。
    6. 小于等于, <=。
    7. 等于, ==。
    8. 不等于, !=。
  • is: 例如,’a’ is ‘b’,结果为 False。5 is 5,结果为 True。
  1. is not:与 is 相反。
  2. in:判断某个元素是否在字符串内。
  3. not in:与 in 相反。
  4. c) 一般布尔值是用于流程控制的 d) 常见问题:

我们在命令行中输入 bool(‘False’)print 一下结果,会发现是 True。 这是什么原因?

因为在 python 中,以下数值会被认为是 False: 为 0 的数字,包括 0,0.0

空字符串,包括”,”” 表示空值的 None 空集合,包括(),[],{}

其他的值都认为是 True。

其中,None 是 python 中的一个特殊值,表示什么都没有,它和 0、空 字符、False、空集合都不一样。 所以,’False’是一个不为空的字符串,当被转换成 bool 类型之后,就 得到 True。

同样 bool(‘ ‘)的结果是 True,一个空格也不能算作空字符串。 bool(”)才是 False。

 

八、选择结构

 流程控制之选择结构:

  1. a) 缩进:在 Python 的很多语法中都需要使用缩进,一般情况下,缩进四个 字符(空格)。例如以下所讲的 if 语句,执行语句块都需要缩进。
  2. b) 单分支选择结构:

if 条件表达式:

当条件表达式的值为 True 时,执行语句…… c) 双分支选择结构:

  1. 基本语法:

if 条件表达式: 语句块 1

else:

语句块 2

当条件表达式的值为 True 时,执行语句块 1,否则执行语句块 2。

  1. 流程图:

 

李兴球Python如果判断语句流程图
李兴球Python如果判断语句流程图

 

  1. d) 多分支选择结构: if 条件:

条件满足时,执行语句……

 

elif 条件:

条件满足时,执行语句…… else:

以上条件都不满足时,执行语句……

(elif 可以写多个)

  1. e) 举例说明:期末考试结束,学校要对每个分数段的学生进行评级。分数 60 分以下为不及格,大于等于 60 分为及格,其中如果分数大于等于 80

分并且小于 90 分为良好,大于等于 90 分为优秀。

i.   第一种方法:多分支选择结构

score = int(input('请输入分数:'))

if 60 <= score < 80:
    print('及格') 
elif 80<=score<90: print('良好') elif score>=90:
    print('优秀') 
else:
    print('不及格')

 

ii. 第二种方法:if 嵌套

score = int(input('请输入分数:'))

if score>=60:

   if 80<=score<90: print('良好') elif score>=90: 
      print('优秀')
   else:
     print('及格')
else:
   print('不及格')

 

从程序运行效率来讲,嵌套 if 的运行效率没有多分支选择运行效率高,所 以,在开发的过程中,应该尽量避免嵌套的使用。当然,如果是解题的话只要没 有特别要求,把题目要求程序实现就行。

 

九、数据结构之序列

 

数据结构:数据结构是以某种方式(如通过编号)组合起来的数据元素(如 数、字符乃至其他数据结构)集合。在 Python 中,最基本的数据结构为序列。

(一)常见序列类型包括字符串(普通字符串和 unicode 字符串),列表和元组. 所谓序列,即成员有序排列,可通过下标访问。

(二)Python 序列通用操作: 1、索引:

序列中的元素都是有序的、拥有自己编号(从 0 开始),我们可以通过索引得 到序列中对应的元素。

索引也可以为负值,负数索引表示从右往左开始计数,最后一个元素索引为

-1,倒数第二为-2,以此类推。 2、切片(分片):

使用索引可以获取单个元素,使用分片可以获取序列中指定范围内的元素。 切片操作符[:],切片中冒号左边索引对应的元素晚于右边索引对应元素出现时, 返回结果是[]。

3、+:连接序列(两种相同的序列)

 

4、*:重复序列元素

 

5、成员资格:in

 

6、最大值:max()

 

7、最小值:min() 8、长度:len()

(三)列表(list),Python 中最基本的数据结构,也是最常使用的数据结构。 它是可变的,包括长度和元素都可以变换,也就是初始化后还可以对里面的元素 进行更改,里面元素可以放任意类型数据,列表使用方括号。

1、初始化列表:

(1) lq_lst = list() 初始化空列表

 

(2) lq_lst = [] 初始化空列表

(3) lq_lst = [1,2,3] 初始化非空列表 (4) 使用 range 函数初始化非空列表:

  1. range(start,stop,step):

start:计数从 start 开始。默认是 0,例如 range(5)等价于 range(0,5) stop:计数到 stop 结束,但不包括 stop。例如 range(0,5)是[0,1,2,3,4]没有 5 step:步长,默认为 1。

  1. 例如 lq_lst = list(range(1,10,1)),列表中元素为[1,2,3,4,5,6,7,8,9] C. 倒序 lq_lst = list(range(10,1,-2)),列表中元素为[10,8,6,4,2]

 

2、更新列表中的元素

将对应列表中的索引重新赋值即可。例如 lq_lst[0] = ‘123’,现在 lq_lst 中的元素为[‘123′,1,2019,’sight’]。

3、删除列表元素:del。

输入指令 del lq_lst[1],lq_lst 中索引位置为 1 的元素将会被删除。 4、列表函数操作:

(1) list.append():在列表末尾添加新的对象

(2) list.count():统计某个元素在列表中出现的次数

(3) list.index():从列表中找出某个元素第一个匹配值的索引位置,索引从 0 开始。

(4) list.remove():移除列表中某个值的第一个匹配项

(5) list.reverse():反向列表中的元素,倒转

(6) list.sort([func]):对原列表按照设定的排序方法进行排序,默认从小到大 排序

(7) list.insert(index,obj):将对象插入指定索引位置的列表

(四)元组(tuple) 元组是不可变数据类型,元组使用小括号。

1、初始化:

t = (5)这样定义的不是元组,而是一个数值

 

t = (5,)这样才是定义的元组 元组只能创建和读取,无法修改和删除

2、元组内置函数: tuple(seq):将列表转换为元组

(五)字符串: 1、处理输入字符串,单行输入一个数据容易处理,如果需要单行输入多个数

据并用符号或者空格隔开,应该如何处理呢? 2、字符串操作函数:

split()函数通过指定分隔符对字符串进行切片。

a = ‘this is,string,example’ a.splitis is’,’string’,’example’]

a.split(‘,’,1) #以逗号为分隔符,分割次数为 1 次

>>>[‘thi(‘,’)   #以逗号为分隔符

>>>[‘ths is’,’string,example’]

a.split(‘s’,2) #以’s’为分隔符,分割次数为 2 次

>>>[‘thi’,’i’,’,string,example’]

 

十、循环语句

 

(一)for 循环

  1. for 循环又称之为计数循环,Python 中的 for 语句与其他高级程序语言有很 大的不同,其他高级语言 for 语句要用循环控制变量来控制循环。Python 中 for 语句是通过循环遍历某一序列对象来构建循环,循环结束的条件就是对 象被遍历完成。
  2. for 语句的形式如下:

for <循环变量> in <遍历对象>:

<循环体>

for 语句的语义是遍历 for 语句中的遍历对象,每次循环,循环变量会得到 遍历对象中的一个值,你可以在循环体中对它进行处理;一般情况下,当遍历对 象中的值全部用完时,就会自动退出循环。

  1. for 语句与 range()函数:

for 语句中的对象可以是列表、字典以及元组等,也可以通过 range()函数产 生一个整数列表,以完成计数循环。

 

(二)while 循环

  1. while 循环也称之为条件循环,其基本语法为:

while 条件表达式: 循环体

循环体即需要重复执行的代码,循环体之前需要四个空格缩进。

2. 流程图:

李兴球Python的while流程图
李兴球Python的while流程图

 

当条件表达式结果为 True 时,循环体执行,执行完之后继续进行条件判断, 如果条件为假,则执行 F 路线语句,否则继续按照 T 路线运行程序,如此反复, 直到条件为假。在 while 语句的循环体中一定要包含改变测试条件的语句,以保 证循环能够结束,以避免死循环的出现。

(三)break 与 continue

for 循环与 while 循环均包含 break、continue 这两个命令: 1.  break 语句作用是中断循环的执行。

  1. continue 语句作用是提前停止循环体的执行,开始下一轮循环。

 

十一、函数

 

  1. 为何使用函数? 函数是一个通用的程序结构组件。
  2. 函数主要扮演两个角色:
  3. a) 最大化代码重用和最小化代码冗余
  4. Python 的函数是一种简单的打包逻辑算法的方式。可以一处编写多 处运行,是 Python 语言最基本的组成工具。
  5. b) 过程的分解
  6. 函数提供一种将一个任务分割为定义完好的不同部分的工具。比如 制作一份披萨,开始需要混合面粉,将面粉搅拌均匀,添加顶部原 料和烘焙等。如果是设定给机器人来完成这件事,函数会将整个’做 披萨’这个任务分割成为独立的方法来完成整个过程中的子任务。独 立实现较小的任务要比一次完成整个过程容易。
  7. 一般来说,函数关注过程:关于如何做某事,而不是对哪些对象做 这件事。
  8. 编写函数
  9. a) 在之前所学的知识当中,其实我们已经用到了很多 Python 内置函数,比 如 len(),split()等等。
  10. b) 语法格式:

def 函数名(参数 1,参数 2,参数 3,…): 函数体

  1. 函数注意事项:
  2. a) def 是可执行代码,在 Python 运行 def 之前,这个函数并不存在。 b) def 创建了一个对象并将其赋值给某一变量名
  3. c) return 语句将一个结果对象返回给调用者。当函数被调用时,其调用者 将暂停运行,直到这个函数完成了它的工作,之后函数才将控制权还给 调用者。
  4. d) 参数是通过赋值传递给函数的。除非显示指明形参与实参的对应,否则 实参按照位置赋值给形参。

 

  1. 函数的参数: 我们知道了怎样定义一个函数,但我们没有给它提供输入参数的功能。所以,

如果我们希望自己定义的函数里允许调用者提供一些参数,就把这些参数写在括 号里,如果有多个参数,用逗号隔开,如:

def sayHello(someone):

print (someone + ‘ says Hello!’) 参数在函数中相当于一个变量,而这个变量的值是在调用函数的时候被赋予

的。在函数内部,你可以像过去使用变量一样使用它。 调用带参数的函数时,同样把需要传入的参数值放在括号中,用逗号隔开。要注 意提供的参数值的数量和类型需要跟函数定义中的一致。如果这个函数不是你自 己写的,你需要先了解它的参数类型,才能顺利调用它。

  1. 变量作用域

Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于 这个变量是在哪里赋值的。

变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。 Python 的作用域一共有 4 种,分别是:

(1)L (Local) 局部作用域

 

(2)E (Enclosing) 闭包函数外的函数中 (3)G (Global) 全局作用域

(4)B (Built-in) 内置作用域(内置函数所在模块的范围) 7. 匿名函数

python 使用 lambda 来创建匿名函数。

所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。 (1)lambda 只是一个表达式,函数体比 def 简单很多。

 

(2)lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式 中封装有限的逻辑进去。

 

(3)lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命 名空间里的参数。

 

(4)虽然 lambda 函数看起来只能写一行,却不等同于 C 或 C++的内联函数,后 者的目的是调用小函数时不占用栈内存从而增加运行效率。

 

十二、random 模块之 randint()函数

 

  1. 如果想要产生一个随机的整数,可以使用 randint()函数 import random

random.randint(1,10)

注意:randint()是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。

  1. 导入 random 模块中具体的一个函数的方法: from random import randint
  2. 需要在 randint()的括号中提供两个数字,先后分别是产生随机整数范围的下 限和上限。

例如:randint(5, 10)

这样将会产生一个 5 到 10 之间(包括 5 和 10)的随机整数。

 

十三、文件操作

读写文件是最常见的输入输出操作。Python 内置了读写文件的函数。 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系

统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是 请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统 提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对 象(写文件)。

 

  1. 读文件:

 

(1)要以读文件的模式打开一个文件对象,使用 Python 内置的 open()函数, 传入文件名和标示符:

 

>>>f = open(‘/user/test.txt’,’r’) 标示符’r’表示读,这样,我们就成功地打开了一个文件。

a).  如果文件不存在,open()函数就会抛出一个 FileNotFoundError 的错 误,并且给出错误码和详细的信息告诉你文件不存在。

 

b).  如果文件打开成功,接下来,调用 read()方法可以一次读取文件的 全部内容,Python 把内容读到内存,用一个 str 对象表示:

 

>>>f.read() ‘Hello,World!’

最后一步是调用 close()方法关闭文件。文件使用完毕后必须关闭,因 为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数 量也是有限的:

 

>>>f.close()

 

考虑到每次都这么写实在太繁琐,所以,Python 引入 with 语句自动帮我们 调用 close()方法:

 

With open(‘/user/test.txt’,’r’) as f: print(f.read())

不必调用 f.close()方法。

 

(2)调用 read()会一次性读取文件的全部内容,如果文件有 10G,内存肯定不 够,所以,要保险起见,可以反复调用 read(size)方法,每次最多读取 size 个 字节的内容。另外,调用 readline()可以每次读取一行内容,调用 readlines() 一次读取所有内容并按行返回列表。因此,根据需要决定怎么调用。

如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调 用 read(size)比较保险,视文件类型而定,如果是配置文件,调用 readlines() 最方便:

 

for line in f.readlines(): print(line.strip())   #把末尾的’\n’删掉

  1. 写文件:写文件和读文件是一样的,唯一区别是调用 open()函数时,传入标 识符’w’表示写文本文件或写二进制文件:

 

with open(‘/user/test.txt’,’w) as f: f.write(‘Hello,World’)

以’w’模式写入文件时,如果文件已存在,会直接覆盖(相当于删掉后 新写入一个文件)。如果希望在文件末尾追加一些内容,可以传入标识符’a’ 以追加(append)模式写入:

 

with open(‘/user/test.txt’,’a’) as f: f.write(‘Hello,World’)

 

十四、异常处理

 

  1. 语法错误:
  2. a) 拼写错误:即 Python 语言中的关键字写错,变量名、函数名拼写错误等。 关键字拼写错误时会提示 SyntaxError(语法错误),而变量名、函数 名拼写错误会在运行时给出 NameError 的错误提示。
  3. b) 脚本程序不符合 Python 的语法规范:例如少了括号,冒号等符号,以及 表达式书写错误等。
  4. c) 缩进错误:因为 Python 语法规定,以缩进作为程序的语法之一,这属于 Python 语言独特的一面。一般来说 Python 标准的缩进是以 4 个空格作 为一个缩进。
  5. 异常的处理:

异常是 Python 程序在运行过程中引发的错误。如果程序中引发了未进行处 理的异常,脚本就会由于异常而终止运行。只有在程序中捕获这些异常,并进行 相关的处理,才能使程序不会中断运行。

  1. a) 异常处理的基本语法:

Python 中使用 try 语句来处理异常,和 Python 中其他语句一样,try 语句也要使用缩进结构,try 语句也有一个可选的 else 语句块。一般的 try 语句基本形式如下。

try:

    <语句块>                       # 可能产生异常的语句 except <异常名 1>:                                   #要处理的异常

    <语句块>                       # 异常处理语句

except <异常 2>:                   # 要处理的异常

   <语句块>                        # 异常处理语句

else:

   <语句块>                        # 未触发异常,则执行该语句

finally:

  <语句块>                           # 始终执行该语句。

 

b)except 语句主要有以下几种用法:

except: #捕获所有异常;

except <异常名>:#捕获指定异常;

except (异常名 1,异常名 2):#捕获异常名 1 或者异常名 2;

 

十五、turtle 模块

 

  1. 画布:画布就是 turtle 为我们展开的用于绘图的区域,可以设置它的大小和 初始位置。

(1) 设置画布大小 turtle.screensize(canvwidth,canvheight,bg) canvwidth:设定画布的宽

canvheight:设定画布的高 bg:设定背景颜色

例如:turtle.screensize(800,600,”green”)

(2) 设置背景图片:turtle.bgpic(),括号中填写图片路径。

  1. 画笔:画笔的默认位置是在画布的正中心,用一只小乌龟来表示,方向朝右。 使用坐标轴来描述乌龟的位置,起始位置为原点(0,0)。

(1) 画笔的属性:

颜色:turtle.color(),例如:turtle.color(‘green’) 宽度:turtle.pensize(),设置画笔的宽度 绘画速度:turtle.speed(),设置画笔的速度

(2) 画笔的绘图指令:

画笔运动命令 画笔控制命令

 

 

 

 

 

十六、面向对象(一)

 

我们之前接触过按照功能需求的顺序来设计程序,这种被称为“面向过程” 的编程。

还有一种程序设计的方法,把数据和对数据的操作用一种叫做“对象”的东 西包裹起来。这种被成为“面向对象”的编程。这种方法更适合较大型的程序开 发。

面向对象编程最主要的两个概念就是:类(class)和对象(object) 类是一种抽象的类型,而对象是这种类型的实例。 举个现实的例子:“笔”作为一个抽象的概念,可以被看成是一个类。而一

支实实在在的笔,则是“笔”这种类型的对象。 一个类可以有属于它的函数,这种函数被称为类的“方法”。一个类/对象

可以有属于它的变量,这种变量被称作“域”。域根据所属不同,又分别被称作 “类变量”和“实例变量”。

继续笔的例子。一个笔有书写的功能,所以“书写”就是笔这个类的一种方 法。每支笔有自己的颜色,“颜色”就是某支笔的域,也是这支笔的实例变量。 而关于“类变量”,我们假设有一种限量版钢笔,我们为这种笔创建一种类。而 这种笔的“产量”就可以看做这种笔的类变量。因为这个域不属于某一支笔,而 是这种类型的笔的共有属性。

域和方法被合称为类的属性。

python 是一种高度面向对象的语言,它其中的所有东西其实都是对象。所 以我们之前也一直在使用着对象。看如下的例子:

s = ‘how are you’

#s 被赋值后就是一个字符串类型的对象 l = s.split()

#split 是字符串的方法,这个方法返回一个 list 类型的对象

#l 是一个 list 类型的对象

通过 dir()方法可以查看一个类/变量的所有属性: dir(s)

dir(list)

 

十七、面向对象(二)

 

在介绍过面向对象的概念之后,现在我们来创建一个类。

class MyClass:
   pass

mc = MyClass() 
print (mc)

关键字 class 加上类名用来创建一个类。之后缩进的代码块是这个类的内部。在 这里,我们用 pass 语句,表示一个空的代码块。

类名加圆括号()的形式可以创建一个类的实例,也就是被称作对象的东西。 我们把这个对象赋值给变量 mc。于是,mc 现在就是一个 MyClass 类的对象。

看一下输出结果:

<  main  .MyClass instance at 0x7fd1c8d01200>

这个意思就是说,mc 是 main 模块中 MyClass 来的一个实例(instance), 后面的一串十六进制的数字是这个对象的内存地址。

我们给这个类加上一些域:

class MyClass:
    name = 'Sam'
    def sayHi(self):
       print ('Hello %s' % self.name) 

mc = MyClass()
print (mc.name) 
mc.name = 'Lily' 
mc.sayHi()

我们给 MyClass 类增加了一个类变量 name,并把它的值设为’Sam’。然后又 增加了一个类方法 sayHi。

调用类变量的方法是“对象.变量名”。你可以得到它的值,也可以改变它 的值。

注意到,类方法和我们之前定义的函数区别在于,第一个参数必须为 self。 而在调用类方法的时候,通过“对象.方法名()”格式进行调用,而不需要额外

 

提供 self 这个参数的值。self 在类方法中的值,就是你调用的这个对象本身。 输出结果:

Sam

Hello Lily

之后,在你需要用到 MyClass 这种类型对象的地方,就可以创建并使用它。

 

十八、面向对象(三)

 

面向对象是比较复杂的概念,初学很难理解。在刚开始编程的时候,从上到 下一行行执行的简单程序容易被理解,即使加上 if、while、for 之类的语句以 及函数调用,也还是不算困难。有了面向对象之后,程序的执行路径就变得复杂, 很容易让人混乱。不过当你熟悉之后会发现,面向对象是比面向过程更合理的程 序设计方式。

今天我用一个例子来展示两种程序设计方式的不同。 假设我们有一辆汽车,我们知道它的速度(60km/h),以及 A、B 两地的距离

(100km)。要算出开着这辆车从 A 地到 B 地花费的时间。

面向过程的方法:

speed = 60.0
distance = 100.0
time = distance / speed print (time)

面向对象的方法:

class Car:
speed = 0
def drive(self, distance):
time = distance / self.speed print (time)
car = Car() car.speed = 60.0 car.drive(100.0)

看上去似乎面向对象没有比面向过程更简单,反而写了更多行代码。但是, 如果我们让题目再稍稍复杂一点。假设我们又有了一辆更好的跑车,它的速度是 150km/h,然后我们除了想从 A 到 B,还要从 B 到 C(距离 200km)。要求分别知 道这两种车在这两段路上需要多少时间。

面向过程的方法:

speed1 = 60.0

 
distance1 = 100.0
time1 = distance1 / speed1 print (time1)
distance2 = 200.0
time2 = distance2 / speed1 print (time2)
speed2 = 150.0
time3 = distance1 / speed2 print (time3)
time4 = distance2 / speed2 print (time4) 

面向对象的方法:

class Car:
  speed = 0
  def drive(self, distance): 
      time = distance / self.speed print (time)

car1 = Car() 
car1.speed = 60.0
car1.drive(100.0)
car1.drive(200.0)
car2 = Car()
car2.speed = 150.0
car2.drive(100.0)
car2.drive(200.0)

对比两种方法,面向过程把数据和处理数据的计算全部放在一起,当功能复 杂之后,就会显得很混乱,且容易产生很多重复的代码。而面向对象,把一类数 据和处理这类数据的方法封装在一个类中,让程序的结构更清晰,不同的功能之 间相互独立。这样更有利于进行模块化的开发方式。

 

十九、面向对象(四)

 

现在我们就来举一个稍稍再复杂一点的例子。仍然是从 A 地到 B 地,这次除 了有汽车,我们还有了一辆自行车!

自行车和汽车有着相同的属性:速度(speed)。还有一个相同的方法(drive), 来输出行驶/骑行一段距离所花的时间。但这次我们要给汽车增加一个属性:每 公里油耗(fuel)。而在汽车行驶一段距离的方法中,除了要输出所花的时间外, 还要输出所需的油量。

面向过程的方法,你可能需要写两个函数,然后把数据作为参数传递进去, 在调用的时候要搞清应该使用哪个函数和哪些数据。有了面向对象,你可以把相 关的数据和方法封装在一起,并且可以把不同类中的相同功能整合起来。这就需 要用到面向对象中的另一个重要概念:继承。

我们要使用的方法是,创建一个叫做 Vehicle 的类,表示某种车,它包含了 汽车和自行车所共有的东西:速度,行驶的方法。然后让 Car 类和 Bike 类都继 承这个 Vehicle 类,即作为它的子类。在每个子类中,可以分别添加各自独有的 属性。

Vehicle 类被称为基本类或超类,Car 类和 Bike 类被成为导出类或子类。

 

class Vehicle:

       def init (self, speed): 
           self.speed = speed

       def drive(self, distance):
           print ('need %f hour(s)' % (distance / self.speed)) 

class Bike(Vehicle):
      pass

class Car(Vehicle):
      def init (self, speed, fuel):
          Vehicle. init (self, speed)
          self.fuel = fuel

      def drive(self, distance):
           Vehicle.drive(self, distance)
           print ('need %f fuels' % (distance * self.fuel))

b = Bike(15.0)
c = Car(80.0, 0.012)
b.drive(100.0) c.drive(100.0)

 

解释一下代码:

    init 函数会在类被创建的时候自动调用,用来初始化类。它的参数,要 在创建类的时候提供。于是我们通过提供一个数值来初始化 speed 的值。

class 定义后面的括号里表示这个类继承于哪个类。Bike(Vehicle)就是说 Bike 是继承自 Vehicle 中的子类。Vehicle 中的属性和方法,Bike 都会有。因 为 Bike 不需要有额外的功能,所以用 pass 在类中保留空块,什么都不用写。

Car 类中,我们又重新定义了 init 和 drive 函数,这样会覆盖掉它继承 自 Vehicle 的同名函数。但我们依然可以通过“Vehicle.函数名”来调用它的超 类方法。以此来获得它作为 Vehicle 所具有的功能。注意,因为是通过类名调用 方法,而不是像之前一样通过对象来调用,所以这里必须提供 self 的参数值。 在调用超类的方法之后,我们又给 Car 增加了一个 fuel 属性,并且在 drive 中 多输出一行信息。

最后,我们分别创建一个速度为 15 的自行车对象,和一个速度为 80、耗油 量为 0.012 的汽车,然后让它们去行驶 100 的距离。

本站所有作品,教程等皆为原创,版权所有。只供个人及单位内部研究使用,对外展示或传播必需经本站同意,且注明来自本站。培训机构等用本站资源培训学生,需经本站授权。一旦付款,表示同意本站知识付费原则:数字商品,不支持退款。亦可直接向微信号scratch8付款购买。入住QQ群:225792826 和爱好者共同交流,并且能下载免费提供的Python资源(需提供真实姓名才可入群)
李兴球的博客_Python创意编程技术前沿_pygame » 视频教程_蓝桥杯青少年创意编程 Python 组 赛前集训教程包(蓝桥杯Python中级集训包_v2)
scratch

学本领,探索更大的世界!

李兴球博客 风火轮编程主页