您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > AI人工智能 > Python 语言程序设计4
第四周函数4.1函数的定义、调用与返回(1)函数定义—def语句,格式如下:[python]viewplaincopy1.defname(parameters):【说明】函数名name:任何有效的Python标识符参数列表parameters:调用函数时传递给函数的值(个数=0,多个参数用”,”分隔)形式参数(形参):定义函数时给函数传递的参数形参只在函数内部有效实际参数(实参):调用函数时给函数传递的参数(可以是实数,变量,函数;必须要初始化)函数体body:函数被调用时执行的代码,由一至多个语句组成函数调用的一般形式:[python]viewplaincopy1.name(parameters)函数返回:①return语句—结束函数调用并返回结果②return语句是可选的,可以出现在函数体的任意位置③若无return语句,函数结束后将控制权返回给调用方函数接口—返回值和参数函数传递信息的主要途径:①通过函数返回值的方式传递信息②通过参数传递信息【例】打印《生日快乐歌》歌词[python]viewplaincopy1.#程序4.1.12.defhappy():3.print(Happybirthdaytoyou!)4.defsing(person):5.happy()6.happy()7.print(Happybirthdayto,person+!)8.defmain():9.sing(Mike)10.print()11.main()【运行结果】Happybirthdaytoyou!Happybirthdaytoyou!HappybirthdaytoMike!(2)函数的调用和返回值①调用过程:②函数的返回值:函数的返回值可以是变量或表达式三种形式—无返回值,单值和多值(用逗号分隔)无返回值等价于returnNone(None是表示没有任何东西的特殊类型)【例】设计两点距离函数,求三角形周长[python]viewplaincopy1.#程序4.1.22.importmath3.defsquare(x):4.returnx*x5.defdistance(x1,y1,x2,y2):6.dist=math.sqrt(square(x1-x2)+square(y1-y2))7.returndist8.defisTriangle(x1,y1,x2,y2,x3,y3):9.flag=((x1-x2)*(y3-y2)-(x3-x2)*(y1-y2))!=010.returnflag11.defmain():12.print(Pleaseenter(x,y)ofthreepointsinturn:)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(Theperimeterofthetriangleis:{0:0.2f}.format(perim))22.else:23.print(Kiddingme?Thisisnotatriangle!)24.main()【运行结果】Pleaseenter(x,y)ofthreepointsinturn:Point1:(x,y)=1,3Point2:(x,y)=2,2Point3:(x,y)=3,4Theperimeterofthetriangleis:5.89(3)改变参数值的函数:①函数的形参只接受了实参的值,给形参赋值并不影响实参②Python的参数是通过值来传递的(赋值)③如果变量时可变对象(如列表)返回到调用程序后,该对象会呈现被修改后的状态4.2函数与程序结构/递归(1)函数和程序结构:①函数可以简化程序,使程序模块化②函数可将较长程序分割成短小程序段,提高可读性(2)递归函数:①递归—函数定义中使用函数自身的方法。例:阶乘②递归的定义特征:1.有一或多个基例是不需要再次递归的2.所有的递归链都要以一个基例结尾③注意:1.递归每次调用都会引起新函数的开始2.递归有本地值的副本,包括该值的参数3.阶乘递归函数中:每次函数调用中的相关n值在中途的递归链暂时存储,并在函数返回时使用【例1】计算5![python]viewplaincopy1.#程序4.2.12.deffact(n):3.ifn==0:4.return15.else:6.returnn*fact(n-1)/span/span【例2】字符串反转Python列表有反转的内置方法方法1:字符转换为字符列表,反转列表,列表转换回字符串方法2:递归【IPO】输入:字符串处理:用递归的方法反转字符串输出:反转后的字符串【注意】①构造递归函数,需要基例②基例不进行递归,否则递归就会无限循环执行[python]viewplaincopy1.#程序4.2.22.defreverse(s):3.ifs==:4.returns5.else:6.returnreverse(s[1:])+s[0]/span4.3函数实例分析【例】绘制如下图的“二叉树”【思路】(1)首先学习简单图形绘制的指令(2)其次为树的绘制设计算法(1)Turtle库:[python]viewplaincopy1.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)【例】绘制并填充五角星[python]viewplaincopy1.#程序4.3.12.fromturtleimportTurtle3.p=Turtle()4.p.speed(3)5.p.pensize(5)6.p.color(black,yellow)7.p.begin_fill()8.foriinrange(5):9.p.forward(200)10.p.right(144)11.p.end_fill()(2)代码如下:[python]viewplaincopy1.#程序4.3.22.#drawtree.py3.fromturtleimportTurtle,mainloop4.5.deftree(plist,l,a,f):6.ifl5:7.lst=[]8.forpinplist:9.p.forward(l)#沿着当前的方向画画10.q=p.clone()11.p.left(a)12.q.right(a)13.lst.append(p)#将元素增加到列表的最后14.lst.append(q)15.tree(lst,l*f,a,f)16.defmain():17.p=Turtle()18.p.color(green)19.p.pensize(5)20.p.hideturtle()21.p.speed(100)22.p.left(90)#调整画笔23.p.penup()24.p.goto(0,-200)25.p.pendown()#这三条语句是一个组合相当于先把笔收起来26.#再移动到指定位置,再把笔放下开始画27.#否则turtle一移动就会自动的把线画出来28.t=tree([p],200,65,0.6375)29.main()【运行结果】
本文标题:Python 语言程序设计4
链接地址:https://www.777doc.com/doc-4210000 .html