教学视频-->>
任务1 函数的定义与参数传递
定义函数funS10T1(n),返回帕多瓦数列的第n项。
要求:
1、输入一个正整数n,调用funS10T1函数得到帕多瓦数列的第n项并输出。如果n为无效数据则输出ERROR。
2、函数和程序保存到:s10t1.py
3、程序执行效果:
输入1个正整数:33
第33项=7739
【参考与提示】
1、帕多瓦数列的前三项为1,1,2。从第4项起通项公式为f(n)=f(n-2)+f(n-3),n>3。
2、在函数体内,可利用return语句返回函数值。
3、自定义函数须写在调用它的代码之前。
定义函数funS10T1(m,n),判断m与n是否互质。
要求:
1、输入一个大于10的正整数n,调用上述函数得到[2,n]上互质的数对数目(注:[2,3]与[3,2]视为一对)。如果n为无效数据则输出ERROR。
2、函数和程序保存到:s10t1.py
3、程序执行效果:
输入1个正整数:1111
互质数对=374601
【参考与提示】
1、如果正整数m与n的最大公约数为1,则称为它们互质。
2、辗转相除法可计算m与n的最大公约数。
3、在函数体内,可利用return语句返回函数值。
4、自定义函数须写在调用它的代码之前。
任务2 匿名函数的应用
设a=[(7,3),(3,8),(5,6),(1,2)],输入2个正整数m,n,将(m,n)添加到a中后对a按元组的第2元素递增排序。输出(m,n)在排序中的最小位置索引(非负整数),n为无效数据则输出ERROR。
要求:
1、使用匿名函数完成排序。
2、函数和程序保存到:s10t2.py
3、程序执行效果:
输入2个正整数:2,5
位置索引=2
【参考与提示】
可使用列表的内置函数sort直接对列表元素排序。该函数的key参数可设置排序的依据,可赋值为类名或函数名(包括匿名函数),表示列表的元素按key转换后的数据排序。注意:排序后列表的元素并没有转换为其他类型。
设a=[63,78,96,5,72,20,63,30,4,6],输入一个正整数n,将其添加到a中后对a按元素的个位数字递减排序。输出n在排序中的最小位置索引(非负整数),n为无效数据则输出ERROR。
要求:
1、使用匿名函数完成排序。
2、函数和程序保存到:s10t2.py
3、程序执行效果:
输入1个正整数:22
位置索引=8
【参考与提示】
可使用列表的内置函数sort直接对列表元素排序。该函数的key参数可设置排序的依据,可赋值为类名或函数名(包括匿名函数),表示列表的元素按key转换后的数据排序。注意:排序后列表的元素并没有转换为其他类型。
任务3 应用函数的嵌套
定义函数funS10T3(a)。在该函数内定义函数isnumic(s),判断字符串是否为一个数值字符串。函数funS10T3利用isnumic函数从列表a中筛选出全部数值,并返回这些整数的平均值(四舍五入保留2位小数)。
程序运行时输入1个数值序列,调用上面定义的函数输出它们的平均值。如果序列中没有数值则输出ERROR。
要求:
1、函数和程序保存到:s10t3.py
2、程序执行效果:
输入整数序列:8.3,7.6,ab,9,-6.5,cd,12
avg=6.08
【参考与提示】
1、在函数(称为外函数)内可以定义函数(称为内函数),称为函数的嵌套。
2、内函数只能被定义它的外函数调用。
定义函数funS10T3(m,n)。在该函数内定义函数gcd(m,n),求m和n的最大公约数。funS10T3函数根据gcd(m,n)的函数值返回m和n的最小公倍数。
程序运行时输入2个正整数,调用上面定义的函数输出它们的最小公倍数。无效输入则输出ERROR。
要求:
1、函数和程序保存到:s10t3.py
2、程序执行效果:
输入2个正整数:6,15
6和15的最小公倍数=30
【参考与提示】
1、在函数(称为外函数)内可以定义函数(称为内函数),称为函数的嵌套。
2、内函数只能被定义它的外函数调用。
任务4 应用函数递归
编写递归函数funS10T4(n),计算正整数n的阶乘n!。
程序运行时输入正整数n,输出n!。输入无效数据时输出ERROR。
要求:
1、函数和程序保存到:s10t4.py
2、程序执行效果:
输入一个正整数:10
10!=3628800
【参考与提示】
在函数体内,可以直接或间接调用函数本身(称为递归调用)。该函数称为递归函数。
已知f(0)=1,g(0)=2,f(n)=f(n-1)+g(n-1)*2,g(n)=2*f(n-1)+g(n-1)。
程序运行时输入正整数n,输出g(n)的值。输入无效数据时输出ERROR。
要求:
1、定义函数funS10T4A(n)计算f(n);定义函数funS10T4B(n)计算g(n)。
2、函数和程序保存到:s10t4.py
3、程序执行效果:
输入一个正整数:10
g(10)=88574
【参考与提示】
在函数体内,可以直接或间接调用函数本身(称为递归调用)。该函数称为递归函数。
任务5 函数综合应用
请根据注释将以下代码中的<X>替换为适当的内容:
def funS10T5(<X>):
#函数有2个参数:
#第1个参数为m
#第2个参数为k,必须按关键字传递,默认值为0
def check(<X>):
#函数有2个参数:第1个参数为n
#第2个参数为c,默认值为8
#全部参数必须按值传递
<X> b #声明非局部变量
<X> a #声明全局变量
b+=1 if k else 2
a=(a+c)*n
return a-c
b=1234
return check(m,<X>) #第2个参数传递值7
a=123
s=input("输入一个正整数:")
try:
n=int(s)
assert n>0
except:print("ERROR")
else:
v=funS10T5(a,<X>) #第2个参数传递值34
print(funS10T5(n)+v)
要求:
1、函数和程序保存到:s10t5.py
2、程序执行效果:
输入一个正整数:23
输出:383907
【参考与提示】
1、在函数外定义的变量为全局变量。
2、函数内可直接读取全局变量的值。
3、函数内可以修改全局变量的值,但需先声明。
4、在嵌套函数中,内函数可以修改外函数的局部变量的值,但需先声明。
5、函数参数中,"/"表示之前的全部参数必须按值传递。"*"表示之后的全部参数必须按关键字传递。
请根据注释将以下代码中的<X>替换为适当的内容:
def funS10T5(<X>):
#函数共2个参数:
#第1个参数为a,表示将按值传递的参数全部打包为元组
#第2个参数为f,默认值为0
<X> num #声明全局变量
num=len(a)
if f:return sum(a)*f
else:return sum(a)
num=0
s=input("输入正整数序列:")
a=[]
s=s.split(",")
for c in s:
try:
n=int(c)
assert n>0
a.append(n)
except:<X> #不作处理
#a的全部元素解包作第1个参数
#第2个参数传递值3:
n=funS10T5(<X>)
#a的全部元素解包作第1个参数,第2个参数不传递数据:
print(num,n,funS10T5(<X>))
要求:
1、函数和程序保存到:s10t5.py
2、程序执行效果:
输入正整数序列:2,r,4,t,5,3
输出:4 42 14
【参考与提示】
1、在函数外定义的变量为全局变量。
2、函数内可直接读取全局变量的值。
3、函数内可以修改全局变量的值,但需先声明。
4、函数参数中,"/"表示之前的全部参数必须按值传递。"*"表示之后的全部参数必须按关键字传递。

