资源简介 第三章 算法的程序实现 1、用计算机编程解决的一般过程 2、Python语言程序设计 3、简单的算法及其程序设计 人生苦短 我用python 学习目标: 函数与模块 动脑的时刻 abs()? len()? int ()? 同学们,你们知道它们是什么? 它们的功能我们自己可以实现吗? Python函数分类 一、内置函数 print() input() randint() 二、自定义函数 自定义函数 def 函数名(参数集合): <函数体> [return 函数值] 函数名就是标识符,命名要求与变量命名要求一样。 语句块必须缩进,预定4个空格。 定义中的参数列表称为形式参数,只是一种符号标识符 函数定义,只是声明了一个函数,它不能被执行,需要调用执行。 调用的方式,就是函数名后加上小括号。 调用时写的参数是实际参数,是实实在在传入的值,简称实参。 自定义函数 def add(x,y): #x,y 为形式参数,也是标识符。 return x+y #需要返回值就用return 如果需要使用这个函数,只需要使用这个函数名和参数即可。 实例 #定义一个求最大值的函数 def myMax(a,b): if(a>b): return a else: return b #调用这个函数 c=myMax(3,4) print(c) 思考: 函数形式参数、实参? 变量的作用域 当程序中有多个函数时,定义的每个变量只能在一定的范围内访问,称之为变量的作用域。 按作用域划分,将变量分为局部变量和全局变量。 1. 局部变量 在一个函数内或者语句块内定义的变量称为局部变量。局部变量的作用域仅限于定义它的函数体或语句块中。 def fun1(a): x=a+10 …… def fun2(a,b): x,y=a,b …… 变量的作用域 在所有函数之外定义的变量称为全局变量,它可以在多个函数中被引用。 x = 30 def func(): global x print('x的值是', x) x = 20 print('全局变量x改为', x) func() print('x的值是', x) 2. 全局变量 变量的作用域 模块是什么? 函数就像积木,那么模块可以认为是一桶积木。 一般开发者会把类似的或者将一个项目函数收集在一个模块中。Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。 python模块的导入——import 使用import 关键字,可以将一个程序中已出现的一个或多个函数或模块,引入到另一个python代码中,从而实现代码的复用。语法如下: import 模块名 例如:要引用模块 math,就可以在文件最开始的地方用 import math 来引入。在调用 math 模块中的函数时,必须这样引用: 模块名.函数名 from…import 语句 一个模块可能包含大量函数,但是一个程序又不会使用它的全部函数,Python 的 from 语句让你从模块中导入一个指定的部分到当前空间中。语法如下: from 模块名 import 函数名 如果需要把一个模块的所有内容全部导入,使用的语句只需将函数名写成*即可。 例如,要导入模块 fib 的 fibonacci 函数,使用如下语句: from fib import fibonacci 例如:需要引入scapy.all模块中的srp函数,就可以使用以下语句: 实例 定义一个比较大小的函数,并保存到文件中,使用导入模块的方式进行使用? #定义一个求最大值的函数 def myMax(a,b): if(a>b): return a else: return b 思考: 怎么导入? #调用这个函数 From myfunc import myMax c=myMax(3,4) print(c) math模块 math模块提供了众多功能强大的数学函数,可以有效提高编程效率,使用这些函数时,需要使用import math导入math模块。 random模块 在编写程序时,经常需要提供一些随机数据。大多数编程语言提供了生成伪随机数的函数,在Python中这类函数被封装在random模块中。 {5940675A-B579-460E-94D1-54222C63F5DA}函数名 说明 举例 random.random() 返回[0.0,1.0]区间内的一个随机小数 random.random()返回0.9523521796999529 random.uniform(a,b) 返回[a,b]区间内的一个随机小数 random.uniform(1,3)返回2.3403540401554146 random.randint(a,b) 返回[a,b]区间内的一个随机整数 random.randint(1,3)返回2 random.randrange([start],end,[step]) 返回[start,end)区间内的一个整数,start和step默认都是1 random.randrange(1,10)返回5 random.choice() 随机返回给定序列中的一个元素 random.choice(['a','b','c'])返回'c' random.shuffle(x,[random]) 将可变序列的所有元素随机排列 random.shuffle([1,2,3,4])返回[1, 4, 3, 2] random模块 Image模块 Image 模块提供了同名的类用来表示PIL的图像。Image模块还提供了许多工厂(factory)函数,包块从文件加载图像的函数,以及创建新图像的函数。比如说获取图像的尺寸和像素的颜色、旋转图像或改变图像格式等等。 # 获得图像的高和宽 h, w = img.size # 获得图像的格式 geshi = img.format # 获得图像的模式 mo = img.mode # 将文件重新保存为time.png img.save('time', 'png') # 创建缩略图 img.thumbnail((50,50),resample=Image.BICUBIC) img.show() # 保存与图像数据相关的字典 dic = img.info 两种方法导入模块的区别 from…import *语句与import区别在于: import 导入模块,每次使用模块中的函数都要是定是哪个模块。(哪个文件夹中的哪个文件,相当于导入的是一个文件夹,是个相对路径) from…import * 导入模块,每次使用模块中的函数,直接使用函数就可以了;注因为已经知道该函数是那个模块中的了。(已经绑定了文件夹,只需要知道要用哪个文件即可,相当于导入的是一个文件夹中所有文件,所有函数都是绝对路径) Python程序由模块构成,模块中包含若干条语句,语句包含表达式。 1. 物理行和逻辑行 Python程序由若干逻辑行组成。物理行是在编写程序时所看见的,而逻辑行是Python看见的单条语句,一个逻辑行可以包含多个物理行。 Python中语句不能跨逻辑行,在遇到较长的语句时,可以使用语句续行符号,将一条语句写在多行之中。 Python中的续行方式,可以使用“\”符号。 Python程序设计基础 2 . 语句分隔 通常建议每行只写一条语句,这样代码更加易读。如果想要在一个物理行中使用多于一条逻辑语句,那么需要使用分号“;”来特别地标明这种用法,分号表示一个逻辑语句的结束。 3. 缩进 在Python中行首的空白称为缩进,逻辑行首的空白(空格或制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。 要求同一层次的语句必须有相同的缩进,每一组这样的语句称为一个代码块,错误的缩进会引发错误。 Python程序设计基础 4. 注释 注释用于为程序添加说明性的文字。Python解释器在运行程序时,会忽略被注释的内容。Python的注释有单行注释和多行注释。 单行注释以“#”开始,表示本行#之后的内容为注释。单行注释可以单独占一行,也可以放在语句末尾。 多行注释可以跨行,包含在一对三引号'''...'''或"""..."""之间且不属于任何语句的内容将被解释器认为是注释。 Python程序设计基础 课堂练习 1.下面程序段定义的函数fact用于计算n! def fact(n): i = 1 f = 1 while i <= n: f = f * i i = i + 1 该程序段划线处应填入的代码为 。 return f 课堂练习 s= Int(x + 0.5) 2.下面程序段定义的函数my_round接受一个实数类型的参数,函数返回该实数四舍五入后的整数 def my_round(x): s = return s 该程序段划线处应填入的代码为 。 课堂练习 3.以下程序段定义的函数int_reverse能够得到整数n翻转后的数字(例:123翻转后是321) def int_reverse(n): rn = 0 while n > 0: c = n % 10 rn = ① n = ② return rn 划线处①的程序是 。 划线处②的程序是 。 rn * 10 + c n // 10 课堂练习 4.以下程序引入python的math模块,使用math模块下的floor函数对命令行输入的实数进行取整: n = input("请输入一个实数:") n2 = math.floor(float(n)) #n取整后的整数 print(n2) 该程序段划线处应填入的代码为 。 import math 5.将弧度值转化为角度值的公式为“角度值=弧度值/π*100”, 正切值x的反正切弧度值可以通过math模块下的atan函数进行计算,atan(x)返回正切值x的反正切弧度值,下面的程序求正切值x的角度: import math x = float(input("请输入x的值:")) y = / math.pi * 180 print(y) #输出角度 划线处的程序是 。 课堂练习 math.atan(x) 6.下面程序段生成10个[1,100]范围内的随机整数(允许重复)存放的列表numbers中: from random import randint numbers = [] for i in range(0, 10): n = numbers.append(n) 该程序段划线处应填入的代码为 。 课堂练习 randint(1, 100) Thanks 展开更多...... 收起↑ 资源预览