Python for Kids
  • 0 前言
  • 1 编程环境准备
  • 2 运算符和表达式
  • 3 掌握变量
  • 4 字符串
  • 5 获取用户的输入
  • 6 条件判断
  • 7 条件判断实操
  • 8 FOR循环
  • 9 循环和列表
  • 10 WHILE循环
  • 11 WHILE循环实操
  • 12 WHILE循环再实操
  • 13 多重循环
  • 14 再谈列表
  • 15 初见函数
  • 16 函数实操
  • 17 选择排序
  • 18 冒泡排序
  • 19 递归算法之一
  • 20 递归算法实操
  • 21 快速排序
  • 22 汉诺塔游戏
  • 23 递推算法
  • 24 分治算法
  • 25 集合与组合
  • 26 贪心算法
  • 27 字典和键值对
  • 28 广度优先搜索算法
  • 29 数组和向量化计算
  • 30 随机和模拟
  • 31 数据可视化
  • 32 文件读取和分析
Powered by GitBook
On this page
  • 大纲
  • 什么是函数
  • 练习:鸡兔同笼
  • 练习:找到质数
  • 练习:数字判断
  • 练习:最大公约数

Was this helpful?

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那些命令一样,首先是写之前定义好的函数名字,再是括号和输入,函数在处理后就会输出面积。写函数的好处就是可以反复利用某一段代码。

关于写函数我们要注意几个地方

  1. 定义函数需要用到def这个三个字母特定的关键词作为开头,表示后面的代码是在写一个函数

  2. def后面跟着函数名,函数名是自己定义的,上例中就是circle_area

  3. 函数名后面跟一个括号,括号里是输入的变量,也就是未来在使用这个函数时的输入内容,这里的输入是半径

  4. 然后后面跟一个分号,表示函数具体的代码会在下一行开始了

  5. 分号后面具体的代码需要有一个缩进,就类似于中文写作文起一个段落一样,这种缩进一般是四个空格

  6. 最后的输出结果需要用return来特别指出

下面我们再来写一个函数,计算一个圆柱体的表面积,回忆一下圆柱体的表面积是由底面积和侧面积两部分构成,具体公式是:

2πr2+2πh2\pi r^2 + 2\pi h2πr2+2πh
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只,根据关系公式:

x+y=nx+y=n x+y=n
2x+4y=m 2x+4y=m2x+4y=m

联立解可得:

x=(4n−m)/2x=(4n-m)/2x=(4n−m)/2
y=n−xy = n-xy=n−x
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
Previous14 再谈列表Next16 函数实操

Last updated 4 years ago

Was this helpful?