实验二 函数的定义与调用
前言
- 掌握函数的定义
- 理解函数的返回值的应用和函数的调用
- 理解递归函数的用法
正文
第一题
编写程序,利用可变参数定义一个求任意个数数值的最大、小值的函数getMaxMin(a, b, *c)函数,并求出给出的元素个数,编写测试代码
def getMaxMin(a,b,*c):
sum=1
# 最大值默认是元组里第一个元素里的第一个值
Max=c[0][0]
# 最小值默认是元组里第一个元素里的第一个值
Min=c[0][0]
for i in range( 1, len ( c[0] ) ):
if Max<c[0][i]:
Max=c[0][i]
if Min>c[0][i]:
Min=c[0][i]
sum=sum+1
print("list={}".format(c[0]))
print("最大值={},最小值={},元素个数={}".format(Max,Min,sum))
list1=[9,7,8,3,2,1,55,6]
getMaxMin(list1[0],list1[0],list1)
list2=['apple','pear','melon','kiwi']
getMaxMin(list2[0],list2[0],list2)
list3="TheQuickBrownFox"
getMaxMin(list3[0],list3[0],list3)
list4=(9,7,8,3,2,1,55,6)
getMaxMin(list4[0],list4[0],list4)
运行的效果如下图所示:
第二题
编写程序,定一个求斐波那契数列的函数fib(n),变编写测试代码,输出前20项(每项宽度5个字符位置,右对齐),每行输出10个。请分别用递归和非递归方式实现
#第一种方法:递归
def fib(n):
if n==1 or n==2 :
return 1
else:
return fib(n-1)+fib(n-2)
n=20
for i in range(1,n+1):
if i==10:
print("{:>5}".format(fib(i)))
else:
print("{:>5}".format(fib(i)),end="")
#第二种方法:非递归
def not_fib(n) :
print ( "{:>5}".format ( 1 ) , end="" )
print ( "{:>5}".format ( 1 ) , end="" )
a = 1
b = 1
for i in range ( 3 , n + 1 ) :
b = b + a
a = b - a
if i == 10 :
print ( "{:>5}".format ( b ) )
else :
print ( "{:>5}".format ( b ) , end="" )
not_fib ( 20 )
运行的结果如下图所示:
总结
-
函数的概念
函数是以组织的、具有特定功能的、可重复使用的单一或相关联功能的代码段,通过函数名来表示和调用,能够提高模块化和代码的复用。 -
函数的定义
在python中,通过保留字def来定义函数,基本语法如下:def <函数名>(<参数列表>): <函数体> return <返回值列表>
-
函数的参数传递
根据实际参数类型不同,在实际函数调用过程中会因传递的对象不同,实际参数传递给形参的方式也不同,包括值传递和引用传递
值传递
参数传递时,实参为不可变对象,实参传递给形参后,程序运行结束,形参的值改变,而实参的值却不变,这种传递方式即为值传递。
在Python中,数值类型int、float、字符串str、元组tuple、boole都是不可变对象。
引用传递
参数传递时,实参为可变对象,实参传递给形参后,程序运行结束,形参的值改变,实参值也改变,这种传递方式即为引用传递。
在Python中,列表list、集合set、字典dict均是可变对象。 -
可变长度参数
如果定义一个函数时,函数处理的参数个数比函数定义时的参数个数多,则函数定义时需要使用可变长度参数。
可变长度参数在函数定义时主要有两种方式:*parameter和**parameter
*parameter:函数可以接收任意个数的参数,函数会把多个位置参数值当成元组的形式传入。
**parameter:函数可以接收任意个数的参数,函数会把关键字参数值当成字典的形式传入。