第5章函数和模块 【学习目标】 通过本章的学习,应达到如下学习目标: 1. 阐释函数的概念,包括函数的定义与调用、函数的返回值、参数传递、变量作用域、递 归函数。 2. 掌握函数的定义与调用、返回值、参数传递和变量作用域。重点掌握如何按照需求 定义函数,如何构建函数的参数,如何调用函数并返回值。 3. 根据要求编写有关函数的案例,能说明递归函数的含义。 4. 掌握模块的定义与导入。 5. 了解模块的内建属性和内建函数,模块的搜索路径。 【单元导学】 第5章思维导图如图5-1所示。 图5-1 第5章思维导图 本章重点主要包括以下部分。 函数定义部分:函数定义的概念、函数定义的格式、函数的返回值、函数的参数。 函数调用部分:函数调用的格式。 模块定义部分:模块定义的概念、模块定义的格式。 模块导入部分:模块导入的格式。 本章难点主要包括:递归函数、模块导入。 【知识回顾】 第4章重点介绍了Python的数据结构。复习第4章的内容,编写代码,从键盘输入任 意多个数字,按Enter键退出,结束输入,输出存放在列表ls中的数,并统计输出最大的数 和最小的数,以及最大的数和最小的数的平均值。 ·83· 代码: ls=[] iNumStr=input("请输入数字(直接输入回车退出): ") while iNumStr !="": ls.append(eval(iNumStr)) iNumStr=input("请输入数字(直接输入回车退出): ") max1=min1=ls[0] for num in ls: print(num,end=" ") if num>max1: max1=num elif numx-1: print(x,"是素数") else: print(x,"不是素数") 实验5-5 通过自定义函数计算最大公约数和最小公倍数 【实验目的】 1.掌握自定义最大公约数函数和最小公倍数函数。 2.理解自定义函数调用过程中参数的传递。 【实验内容】 编写两个函数,分别计算两个整数的最大公约数和最小公倍数,运行结果如图5-6 所示。 图5-6 计算两个整数的最大公约数和最小公倍数 【实验步骤】 根据要求编写函数: def GY(m,n): r=m%n while r!=0: m=n n=r r=m%n ·88· return n def GB(m,n): P=m*n/GY(m,n) return P x=int(input("输入第一个数:")) y=int(input("输入第二个数:")) if y>x: t=x x=y y=t z=GY(x,y) U=GB(x,y) print(x,"和",y,"的最大公约数是: ",z) print(x,"和",y,"的最小公倍数是: ",U) 实验5-6 通过自定义函数计算阶乘 【实验目的】 1.掌握通过自定义函数计算阶乘的方法。 2.掌握调用函数的方法。 【实验内容】 编写一个函数,计算输出n 的阶乘值。 【实验步骤】 根据要求编写函数: def jiecheng(x): y=1 for i in range(1,x+1): y=y*i return y n=int(input("输入一个整数: ")) s=jiecheng(n) print(n,"的阶乘是",s) 实验5-7 函数的参数传递 【实验目的】 1.掌握函数参数中形参和实参的含义。 2.体会函数的参数传递过程。 ·89· 3.准确编写包含参数传递的程序。 【实验内容】 1.定义一个有3个形参的函数,在函数体内实现3个形参相加。 【实验步骤】 根据要求编写函数: def add(a,b,c): d=a+b+c return d x=int(input("input x:")) y=int(input("input y:")) z=int(input("input z:")) s=add(x,y,z) print(s) 【实验内容】 2.定义一个有3个形参值为100,200,300的函数,在函数体内实现3个形参相加。 【实验步骤】 根据要求编写函数: def add(a=100,b=200,c=300): d=a+b+c return d s=add() print(s) 上面两种方式定义的形参个数都是固定的,例如定义函数的时候如果定义了n 个形 参,那么在调用时最多只能传递n 个实参。 实验5-8 递归函数 【实验目的】 1.了解递归函数的含义。 2.掌握递归函数的使用方法。 【实验内容】 递归解决年龄问题:有5个人坐在一起,问第五个人多少岁? 他说比第四个人大两岁。 问第四个人多少岁? 他说比第三个人大两岁。问第三个人多少岁? 他说比第二个人大两 岁。问第二个人多少岁? 他说比第一个人大两岁。最后问第一个人多少岁? 他说是十五 ·90· 岁。编写程序,输入第几个人时输出其对应的年龄。 【实验步骤】 根据要求编写函数: def age(x): if x==1: y=15 else: y=age(x-1)+2 return y n=int(input("输入人数: ")) s=age(n) print("输入第",n,"个人对应的年龄是",s) 递归就是在调用一个函数的过程中又直接或间接地调用该函数本身。本例子中,age() 函数被递归调用。递归过程分为两个阶段:第一阶段是“回推”,由题意可知,想知道第五个 人的年龄,必须知道第四个人的年龄,想知道第四个人的年龄,必须知道第三个人的年 龄……直到第一个人的年龄,这时age(1)的年龄已知,就不用再推;第二阶段是“递推”,从 第二个人推出第三个人的年龄……一直推到第五个人的年龄为止。需要注意,必须有一个 结束递归过程的条件,本例中,当x=1时,y=15(也就是age(1)=15时)结束递归过程,否 则递归会无限进行下去。 实验5-9 输出杨辉三角形 【实验目的】 1.了解杨辉三角形的含义。 2.掌握用自定义函数输出杨辉三角形的方法。 【实验内容】 编写函数,输入一个整数t 作为参数,打印杨辉三角形的前t 行,运行结果如图5-7 所示。 图5-7 杨辉三角形 ·91· 【实验步骤】 根据要求编写函数: def yanghui(t): print([1]) line=[1,1] print(line) #从第三行开始打印其他行 for i in range(2,t): r=[] #按照杨辉三角形规律生成每行除两端之外的数字 for j in range(0,len(line)-1): r.append(line[j]+line[j+1]) #把两端的数字连在一起 line=[1]+r+[1] print(line) n=int(input("输入打印杨辉三角形的行数: ")) yanghui(n) 杨辉三角形是二项式系数在三角形中的一种几何排列,特点是:最左侧的一列数字和 右边的斜边都是1,内部其他位置上的每个数字都是上一行同一列数字与前一列数字的和。 实验5-10 通过模块计算列表中偶数的和 【实验目的】 1.掌握模块的含义。 2.掌握导入模块的使用方法。 【实验内容】 通过模块计算一个给定列表中偶数的和。 【实验步骤】 根据要求建立文件osh.py,编写下列代码: def func_sum(L1): s=0 for i in range(0,len(L1)): if L1[i]%2==0: s=s+L1[i] return s 新建文件exp10.py,编写下列代码: ·92·