1: 在Python中如何定义一个函数?
def 函数名([形参列表])
(缩进) 函数体
<1>:函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
<2>:任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
<3>:函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。 <4>:函数内容以冒号起始,并且缩进。 <5>:return
[表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
2:什么是Lambda函数?
lambda 函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的匿名函数
3:什么是递归函数?在递归函数的使用中为什么需要设置终止条件?
<1>:递归函数是子调用函数,在函数体内部直接或间接地自己调用自己,即函数的嵌套调用时函数本身。
<2>:终止条件是表示递归的结束条件,用于返回函数值,不再递归调用,如果缺少终止条件的递归函数,将会导致无限递归函数调用,其最终结果是系统会耗尽内存。
上机实践练习:
2:编写程序,定义一个求阶乘的函数fact(n),并编写测试代码,要求输入整数n(n>=0)。请分别使用递归和非递归方式实现
递归实现代码如下:
def fac(n):
if(n==0):
return 1
return n*fac(n-1)
print("请输入整数n(n>=0):",end=' ')
n=int(input())
print("{0}!={1}".format(n,fac(n)))
非递归代码如下:
def glf(n):
s=1
for i in range(1,n+1):
s*=i
return s
print("请输入整数n(n>=0):",end=' ')
n=int(input())
print("{0}!={1}".format(n,glf(n)))
运行结果如下:
3:编写程序,定义一个求Fibonacci数列的函数fib(n),并编写测试代码,输出前20项(每项宽度5个字符位置,右对齐),每行输出10个。请分别使用递归和非递归方式实现
递归代码如下:
def fib(n):
if(n==1 or n==2):
return 1
return fib(n-1)+fib(n-2)
for i in range(1,21):
print(str(fib(i)).rjust(5),end=' ')
if(i%10==0):
print()
非递归代码如下:
def glf(n):
if(n==1 or n==2):
return 1
n1=n2=1
for i in range(3,n+1):
n3=n1+n2
n1=n2
n2=n3
return n3
for i in range(1,21):
print(str(glf(i)).rjust(5),end=' ')
if(i%10==0):
print()
运行结果如下:
4:编写程序,利用可变参数定义一个求任意个数数值的最小值的函数min_n(a,b,c),并编写测试代码。例如对于“print(min_n(8, 2))”以及“print(min_n(16, 1, 7, 4, 15))”的测试代码
代码如下:** *
def min_n(a,b,*c):
min=a
if(a<b):
min=a
else:
min=b
for i in c:
if(i<min):
min=i
return min
print("最小值为:{}".format(min_n(8, 2)))
print("最小值为:{}".format(min_n(16, 1, 7, 4, 15)))
运行结果如下:
5:编写程序,利用元组作为函数的返回值,求序列类型中的最大值、最小值和元素个数,并编写测试代码,假设测试代码数据分别为s1=[9, 7, 8, 3, 2, 1, 55, 6]、s2=[“apple”, “pear”, “melon”, “kiwi”]和s3=“TheQuickBrownFox”
代码如下:
def func(n):
return (max(n), min(n), len(n))
s1 = [9, 7, 8, 3, 2, 1, 55, 6]
s2 = ["apple", "pear", "melon", "kiwi"]
s3 = "TheQuickBrownFox"
for i in (s1, s2, s3):
print("list = ", i)
t = func(i)
print("最大值 = {0},最小值 = {1},元素个数 = {2}".format(t[0], t[1], t[2]))
运行结果如下: