Python 程序设计语言 笔记(五)
来源:互联网 发布:软件开发技术员招聘 编辑:程序博客网 时间:2024/06/05 18:15
第四周 函数
4.1 函数的定义、调用与返回
参数列表<parameters>:调用函数时传递给函数的值
(个数 >= 0,多个参数用”,”分隔)
形式参数(形参):定义函数时给函数传递的参数
形参只在函数内部有效
实际参数(实参):调用函数时给函数传递的参数
(可以是实数,变量,函数;必须要初始化)
函数体<body>:函数被调用时执行的代码,由一至多个语句组成
② return语句是可选的,可以出现在函数体的任意位置
③ 若无return语句,函数结束后将控制权返回给调用方
函数接口 — 返回值和参数
函数传递信息的主要途径:① 通过函数返回值的方式传递信息
② 通过参数传递信息
【例】打印《生日快乐歌》歌词
Happy birthday to you!
Happy birthday to you!
Happy birthday to Mike!
(2)函数的调用和返回值
① 调用过程:
② 函数的返回值:函数的返回值可以是变量或表达式
三种形式 — 无返回值,单值和多值(用逗号分隔)
无返回值 等价于 return None
(None是表示没有任何东西的特殊类型)
【例】设计两点距离函数,求三角形周长
Please enter (x,y) of three points in turn:
Point1: (x, y) = 1,3
Point2: (x, y) = 2,2
Point3: (x, y) = 3,4
The perimeter of the triangle is : 5.89
(3)改变参数值的函数:
① 函数的形参只接受了实参的值,给形参赋值并不影响实参
② Python的参数是通过值来传递的(赋值)
③ 如果变量时可变对象(如列表)返回到调用程序后,该对象会呈现被修改后的状态
4.2 函数与程序结构/递归
(1)函数和程序结构:① 函数可以简化程序,使程序模块化
② 函数可将较长程序分割成短小程序段,提高可读性
(2)递归函数:① 递归 — 函数定义中使用函数自身的方法。例:阶乘
② 递归的定义特征:1. 有一或多个基例是不需要再次递归的
2. 所有的递归链都要以一个基例结尾
③ 注意:1. 递归每次调用都会引起新函数的开始
2. 递归有本地值的副本,包括该值的参数
3. 阶乘递归函数中:每次函数调用中的相关n值
在中途的递归链暂时存储,并在函数返回时使用
【例1】计算5!
Python列表有反转的内置方法
方法1:字符转换为字符列表,反转列表,列表转换回字符串
方法2:递归
【IPO】输入:字符串
处理:用递归的方法反转字符串
输出:反转后的字符串
【注意】① 构造递归函数,需要基例
② 基例不进行递归,否则递归就会无限循环执行
【例】绘制如下图的“二叉树”
【思路】(1)首先学习简单图形绘制的指令
(2)其次为树的绘制设计算法
(1)Turtle库:
4.1 函数的定义、调用与返回
(1)函数定义 — def语句,格式如下:
def <name>(<parameters>):【说明】函数名<name>:任何有效的Python标识符
参数列表<parameters>:调用函数时传递给函数的值
(个数 >= 0,多个参数用”,”分隔)
形式参数(形参):定义函数时给函数传递的参数
形参只在函数内部有效
实际参数(实参):调用函数时给函数传递的参数
(可以是实数,变量,函数;必须要初始化)
函数体<body>:函数被调用时执行的代码,由一至多个语句组成
函数调用的一般形式:
<name>(<parameters>)函数返回:① return语句 — 结束函数调用并返回结果
② return语句是可选的,可以出现在函数体的任意位置
③ 若无return语句,函数结束后将控制权返回给调用方
函数接口 — 返回值和参数
函数传递信息的主要途径:① 通过函数返回值的方式传递信息
② 通过参数传递信息
【例】打印《生日快乐歌》歌词
# 程序4.1.1def happy(): print("Happy birthday to you!")def sing(person): happy() happy() print("Happy birthday to", person + "!")def main(): sing("Mike") print()main()【运行结果】
Happy birthday to you!
Happy birthday to you!
Happy birthday to Mike!
(2)函数的调用和返回值
① 调用过程:
② 函数的返回值:函数的返回值可以是变量或表达式
三种形式 — 无返回值,单值和多值(用逗号分隔)
无返回值 等价于 return None
(None是表示没有任何东西的特殊类型)
【例】设计两点距离函数,求三角形周长
# 程序4.1.2import mathdef square(x): return x*xdef distance(x1,y1,x2,y2): dist = math.sqrt(square(x1 - x2) + square(y1 - y2)) return distdef isTriangle(x1,y1,x2,y2,x3,y3): flag = ((x1 - x2) * (y3 - y2) - (x3 - x2) * (y1 - y2)) != 0 return flagdef main(): print("Please enter (x,y) of three points in turn:") # 获取用户输入的三个坐标点 x1, y1 = eval(input("Point1: (x, y) = ")) x2, y2 = eval(input("Point2: (x, y) = ")) x3, y3 = eval(input("Point3: (x, y) = ")) # 判断三个点是否构成三角形 if (isTriangle(x1,y1,x2,y2,x3,y3)): # 算三角形周长 perim = distance(x1,y1,x2,y2) + distance(x2,y2,x3,y3) + distance(x1,y1,x3,y3) print("The perimeter of the triangle is : {0:0.2f}".format(perim)) else: print("Kidding me? This is not a triangle!")main()【运行结果】
Please enter (x,y) of three points in turn:
Point1: (x, y) = 1,3
Point2: (x, y) = 2,2
Point3: (x, y) = 3,4
The perimeter of the triangle is : 5.89
(3)改变参数值的函数:
① 函数的形参只接受了实参的值,给形参赋值并不影响实参
② Python的参数是通过值来传递的(赋值)
③ 如果变量时可变对象(如列表)返回到调用程序后,该对象会呈现被修改后的状态
4.2 函数与程序结构/递归
(1)函数和程序结构:① 函数可以简化程序,使程序模块化
② 函数可将较长程序分割成短小程序段,提高可读性
(2)递归函数:① 递归 — 函数定义中使用函数自身的方法。例:阶乘
② 递归的定义特征:1. 有一或多个基例是不需要再次递归的
2. 所有的递归链都要以一个基例结尾
③ 注意:1. 递归每次调用都会引起新函数的开始
2. 递归有本地值的副本,包括该值的参数
3. 阶乘递归函数中:每次函数调用中的相关n值
在中途的递归链暂时存储,并在函数返回时使用
【例1】计算5!
# 程序4.2.1def fact(n):if n == 0: return 1else:return n * fact(n-1)</span></span>【例2】字符串反转
Python列表有反转的内置方法
方法1:字符转换为字符列表,反转列表,列表转换回字符串
方法2:递归
【IPO】输入:字符串
处理:用递归的方法反转字符串
输出:反转后的字符串
【注意】① 构造递归函数,需要基例
② 基例不进行递归,否则递归就会无限循环执行
# 程序4.2.2def reverse(s):if s == "":return selse:return reverse(s[1:]) + s[0]</span>4.3 函数实例分析
【例】绘制如下图的“二叉树”
【思路】(1)首先学习简单图形绘制的指令
(2)其次为树的绘制设计算法
(1)Turtle库:
turtle.forward(15) # 乌龟沿直线前行15个单位长度(默认绘制方向为x轴正半轴)turtle.left(90)# 乌龟角度逆时针旋转90度(顺时针为right)turtle.penup()# 乌龟提笔(落笔为pendown)turtle.goto(x,y)# 乌龟到达指定坐标位置turtle.home()# 乌龟返回初始坐标turtle.circle(r)# 乌龟以r为半径画圆turtle.speed(x)# 设置乌龟速度turtle.pensize(x)# 设置画笔粗细turtle.pencolor(str1,str2)# 设置画笔线条颜色和填充色turtle.begin_fill()# 开始填充颜色(完成填充用end_fill)【例】绘制并填充五角星
# 程序4.3.1from turtle import Turtlep = Turtle()p.speed(3)p.pensize(5)p.color("black", "yellow")p.begin_fill()for i in range(5): p.forward(200) p.right(144)p.end_fill()(2)代码如下:
# 程序4.3.2# drawtree.pyfrom turtle import Turtle, mainloop def tree(plist, l, a, f): if l > 5: lst = [] for p in plist: p.forward(l) # 沿着当前的方向画画 q = p.clone() p.left(a) q.right(a) lst.append(p) # 将元素增加到列表的最后 lst.append(q) tree(lst, l*f, a, f)def main(): p = Turtle() p.color("green") p.pensize(5) p.hideturtle() p.speed(100) p.left(90) # 调整画笔 p.penup() p.goto(0,-200) p.pendown()# 这三条语句是一个组合相当于先把笔收起来 # 再移动到指定位置,再把笔放下开始画 # 否则turtle一移动就会自动的把线画出来 t = tree([p], 200, 65, 0.6375)main()
【运行结果】
1 0
- Python 程序设计语言 笔记(五)
- Python 程序设计语言 笔记(一)
- Python 程序设计语言 笔记(二)
- python 程序设计语言 笔记(三)
- Python 程序设计语言 笔记(四)
- Python 程序设计语言 笔记(六)
- Python 程序设计语言 笔记(七)
- Python 程序设计语言 笔记(八)
- 《C++程序设计语言》笔记之五
- C程序设计语言整理笔记(五)指针与数组
- python笔记(五)
- python笔记(五)
- 《C程序设计语言》笔记(一)
- 《C程序设计语言》笔记(二)
- 《C程序设计语言》笔记(三)
- C++程序设计语言笔记(4)
- 阅读笔记 > 程序设计语言( PDL )
- C程序设计语言(五)输入与输出
- BZOJ 1483: [HNOI2009]梦幻布丁
- ionic云开发系列二之调用webservice
- HDOJ 2048 神、上帝以及老天爷
- IOS学习之——触摸事件处理
- 关于x264码率控制概念介绍
- Python 程序设计语言 笔记(五)
- HDU1251统计难题
- 杂文_20160330
- Java--LinkedList源码解读
- 如何提高英文的科研写作能力--施一公教授
- 结构体相关概念
- 从2月14号开始,上传AppStore会经常碰到:Failed to locate or generate matchin
- leetcode之valid anagram
- CSS基础