Python 程序设计语言 笔记(五)

原文地址:https://blog.csdn.net/longteng007/article/details/51018566
第四周 函数
4.1 函数的定义、调用与返回

(1)函数定义 — def语句,格式如下:

def <name>(<parameters>):

  
  

【说明】函数名<name>:任何有效的Python标识符
参数列表<parameters>:调用函数时传递给函数的值
(个数 >= 0,多个参数用”,”分隔)
形式参数(形参):定义函数时给函数传递的参数
形参只在函数内部有效
实际参数(实参):调用函数时给函数传递的参数
(可以是实数,变量,函数;必须要初始化)
函数体<body>:函数被调用时执行的代码,由一至多个语句组成

函数调用的一般形式:

<name>(<parameters>)
  
  
函数返回:① return语句 — 结束函数调用并返回结果
② return语句是可选的,可以出现在函数体的任意位置
③ 若无return语句,函数结束后将控制权返回给调用方
函数接口 — 返回值和参数
函数传递信息的主要途径:① 通过函数返回值的方式传递信息
② 通过参数传递信息
例】打印《生日快乐歌》歌词

  
  
  1. # 程序4.1.1
  2. def happy():
  3. print( "Happy birthday to you!")
  4. def sing(person):
  5. happy()
  6. happy()
  7. print( "Happy birthday to", person + "!")
  8. def main():
  9. sing( "Mike")
  10. print()
  11. main()
【运行结果】
Happy birthday to you!
Happy birthday to you!
Happy birthday to Mike!

(2)函数的调用和返回值
① 调用过程:
② 函数的返回值: 函数的返回值可以是变量或表达式
三种形式 — 无返回值,单值和多值(用逗号分隔)
无返回值 等价于 return None
(None是表示没有任何东西的特殊类型)
【例】设计两点距离函数,求三角形周长

  
  
  1. # 程序4.1.2
  2. import math
  3. def square(x):
  4. return x*x
  5. def distance(x1,y1,x2,y2):
  6. dist = math.sqrt(square(x1 - x2) + square(y1 - y2))
  7. return dist
  8. def isTriangle(x1,y1,x2,y2,x3,y3):
  9. flag = ((x1 - x2) * (y3 - y2) - (x3 - x2) * (y1 - y2)) != 0
  10. return flag
  11. def main():
  12. print( "Please enter (x,y) of three points in turn:")
  13. # 获取用户输入的三个坐标点
  14. x1, y1 = eval(input( "Point1: (x, y) = "))
  15. x2, y2 = eval(input( "Point2: (x, y) = "))
  16. x3, y3 = eval(input( "Point3: (x, y) = "))
  17. # 判断三个点是否构成三角形
  18. if (isTriangle(x1,y1,x2,y2,x3,y3)):
  19. # 算三角形周长
  20. perim = distance(x1,y1,x2,y2) + distance(x2,y2,x3,y3) + distance(x1,y1,x3,y3)
  21. print( "The perimeter of the triangle is : {0:0.2f}".format(perim))
  22. else:
  23. print( "Kidding me? This is not a triangle!")
  24. 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!

  
  
  1. # 程序4.2.1
  2. def fact(n):
  3. if n == 0:
  4. return 1
  5. else:
  6. return n * fact(n -1)</span></span>
【例2】字符串反转
Python列表有反转的内置方法
方法1:字符转换为字符列表,反转列表,列表转换回字符串
方法2:递归
【IPO】输入:字符串
 处理:用递归的方法反转字符串
 输出:反转后的字符串
【注意】① 构造递归函数,需要基例
② 基例不进行递归,否则递归就会无限循环执行

  
  
  1. # 程序4.2.2
  2. def reverse(s):
  3. if s == "":
  4. return s
  5. else:
  6. return reverse(s[ 1:]) + s[ 0]</span>
4.3 函数实例分析
【例】绘制如下图的“二叉树”

【思路】(1)首先学习简单图形绘制的指令
(2)其次为树的绘制设计算法
(1)Turtle库:

  
  
  1. turtle.forward( 15) # 乌龟沿直线前行15个单位长度
  2. (默认绘制方向为x轴正半轴)
  3. turtle.left( 90) # 乌龟角度逆时针旋转90度(顺时针为right)
  4. turtle.penup() # 乌龟提笔(落笔为pendown)
  5. turtle.goto(x,y) # 乌龟到达指定坐标位置
  6. turtle.home() # 乌龟返回初始坐标
  7. turtle.circle(r) # 乌龟以r为半径画圆
  8. turtle.speed(x) # 设置乌龟速度
  9. turtle.pensize(x) # 设置画笔粗细
  10. turtle.pencolor(str1,str2) # 设置画笔线条颜色和填充色
  11. turtle.begin_fill() # 开始填充颜色(完成填充用end_fill)
【例】绘制并填充五角星

  
  
  1. # 程序4.3.1
  2. from turtle import Turtle
  3. p = Turtle()
  4. p.speed( 3)
  5. p.pensize( 5)
  6. p.color( "black", "yellow")
  7. p.begin_fill()
  8. for i in range( 5):
  9. p.forward( 200)
  10. p.right( 144)
  11. p.end_fill()
(2)代码如下:

  
  
  1. # 程序4.3.2
  2. # drawtree.py
  3. from turtle import Turtle, mainloop
  4. def tree(plist, l, a, f):
  5. if l > 5:
  6. lst = []
  7. for p in plist:
  8. p.forward(l) # 沿着当前的方向画画
  9. q = p.clone()
  10. p.left(a)
  11. q.right(a)
  12. lst.append(p) # 将元素增加到列表的最后
  13. lst.append(q)
  14. tree(lst, l*f, a, f)
  15. def main():
  16. p = Turtle()
  17. p.color( "green")
  18. p.pensize( 5)
  19. p.hideturtle()
  20. p.speed( 100)
  21. p.left( 90) # 调整画笔
  22. p.penup()
  23. p.goto( 0, -200)
  24. p.pendown() # 这三条语句是一个组合相当于先把笔收起来
  25. # 再移动到指定位置,再把笔放下开始画
  26. # 否则turtle一移动就会自动的把线画出来
  27. t = tree([p], 200, 65, 0.6375)
  28. main()

【运行结果】


猜你喜欢

转载自blog.csdn.net/qq_36369267/article/details/82831624