15 初见函数
函数是可以反复用的代码片断
大纲
什么是函数
练习:鸡兔同笼
练习:找到质数
练习:最大公约数
什么是函数
有些问题的程序太长或太复杂,写起来会比较困难,如果我们将一个复杂的问题分解成多个较小的问题,就会比较容易解决一些。这些处理较小问题的代码块就叫做函数,它也可以用于其它场景的重复使用。
在第3小节里面,我们编写了计算圆面积的代码,这几行代码对于我们计算面积很有用处,如果我们想反复利用这段代码的话,可以将它打个包,变成一个函数,听起来很复杂,其实很简单。
def circle_area(r):
pi = 3.14
area = pi * r**2
return area
circle_area(1.5)
7.065
circle_area(2.5)
19.625
这个函数在使用起来和print、type那些命令一样,首先是写之前定义好的函数名字,再是括号和输入,函数在处理后就会输出面积。写函数的好处就是可以反复利用某一段代码。
关于写函数我们要注意几个地方
定义函数需要用到def这个三个字母特定的关键词作为开头,表示后面的代码是在写一个函数
def后面跟着函数名,函数名是自己定义的,上例中就是circle_area
函数名后面跟一个括号,括号里是输入的变量,也就是未来在使用这个函数时的输入内容,这里的输入是半径
然后后面跟一个分号,表示函数具体的代码会在下一行开始了
分号后面具体的代码需要有一个缩进,就类似于中文写作文起一个段落一样,这种缩进一般是四个空格
最后的输出结果需要用return来特别指出
下面我们再来写一个函数,计算一个圆柱体的表面积,回忆一下圆柱体的表面积是由底面积和侧面积两部分构成,具体公式是:
def cylinder_area(r,h):
area_a = circle_area(r)
area_b = 2*3.14*h
total_area = area_a*2 + area_b
return total_area
cylinder_area(1.5,4)
39.25
上例中,先定义了函数名字,因为圆柱体的表面积由半径r和高h两个值决定,所以这里要有两个输入的变量,或者说两个输入参数,两个变量用逗号隔开。然后在第二行开始分别底面积和侧面积,area_a计算了底面积,这里底面积是一个圆,直接利用了circle_area这个我们已经写好的函数,然后area_b计算了侧面积,之后再求和,最后输出。当r为1.5,h为4的时候,我们计算出这个圆柱体的表面积是39.25
小结:函数可以让我们反复利用某一段代码,函数的特点是有输入,有计算处理,有输出,之前我们学到的print、type等其实也是函数。python还内置了很多有用的函数,如果不够的话,大家可以自己写一些函数,就像是算圆面积那样就可以了。
练习:鸡兔同笼
鸡兔同笼问题:已知鸡和兔的总数量为n,它们一起的腿的总数量为m,编写一个函数,以求出鸡有多少只,兔有多少只?
设鸡有x只,兔有y只,根据关系公式:
联立解可得:
def chicken_rabbit(n,m):
x = (4*n-m)/2
y = n-x
return x,y
chicken_rabbit(25,76)
(12.0, 13.0)
从功能上来看,这个函数已经完成了,不过输出显示看起来不是很人性化,我们利用前面学到的东西把输出修改一下。
def chicken_rabbit(n,m):
x = (4*n-m)/2
y = n-x
output = "鸡:"+str(int(x))+","+"兔:"+str(int(y))
return output
chicken_rabbit(25,76)
'鸡:12,兔:13'
或者使用字符串格式化来做输出的修改
def chicken_rabbit(n,m):
x = int((4*n-m)/2)
y = int(n-x)
output = "鸡:{x}, 兔:{y}".format(x=int(x), y=y)
return output
chicken_rabbit(25,76)
'鸡:12, 兔:13'
练习:找到质数
我们在第9课的时候,学习过如何来找到质数
x = int(input("输入一个数字:"))
result = True
for i in range(2,x):
if x%i==0:
result = False
break
if result:
print(x,"是一个质数")
else:
print(x,"不是一个质数")
输入一个数字:13
13 是一个质数
下面我们把它改造一下,将核心代码转换成一个函数。
def prime(x):
if x in [0,1]:
return False
for i in range(2,x):
if x%i==0:
return False
return True
prime(1)
False
prime(32)
False
x = int(input("输入一个数字:"))
result = prime(x)
if result:
print(x,"是一个质数")
else:
print(x,"不是一个质数")
输入一个数字:32
32 不是一个质数
函数可以用在很多场合,例如在列表解析中。
prime_list = [prime(x) for x in range(20)]
prime_list
[False,
False,
True,
True,
False,
True,
False,
True,
False,
False,
False,
True,
False,
True,
False,
False,
False,
True,
False,
True]
练习:数字判断
写一个函数,输入是n,返回在n以内所有可以被3或5整除的数字之和。
def sum_f(n):
sum_x = 0
for x in range(3,n):
if x%3==0 or x%5==0:
sum_x = sum_x+x
return sum_x
def sum_f(n):
return sum([e for e in range(3, n) if e % 3 == 0 or e % 5 == 0])
sum_f(30)
195
练习:最大公约数
函数可以有多个输入参数,让我们把之前学到的最大公约数的方法来写成一个函数。
def common_divisor(x,y):
if x>y:
y,x = x,y
i=x
while (i>0) and ((x%i!=0) or (y%i!=0)):
i = i-1
return i
common_divisor(18,15)
3
Last updated
Was this helpful?