(共18张PPT)
2.4 可以复用的代码
【学习目标】
1.了解函数的作用。
2.掌握函数的定义和调用方法。
3.了解发布共享代码的常见方法。
【教学重点】
1.函数的定义及调用。
2.模块的发布和导入使用。
【教学难点】
共享代码的发布。
……
print()
input()
range()
我们已经学习了哪些函数?
类 别 函 数 举 例
系统函数 数学运算符类 **
数据转换类 int()
字符串操作类 len()
输入输出类 print() input()
文件操作类 open()
自定义函数
函数
函数分类:系统函数和用户自定义函数。
系统函数即函数库中的标准函数,是程序设计语言或操作系统提供给用户的一系列己经编好的程序,例如print(),input()。
用户自定义函数则是用户自己编写的一段程序。
函数的组成:
函数一般包括函数名、参数、返回值和函数体4部分。其中函数名和函数体是必不可少的,参数和返回值可根据需要进行定义。
函数
def 函数名(参数):
#函数说明
语句或语句块
return 返回值
参数是用来向函数传递值的,当有多个参数时各个参数由逗号分隔。函数执行完成后,由return语句将表达式值返回给调用者,结束函数。
定义函数的基本格式:
函数的作用:将许多相似或者相同的代码编写成函数或模块,可以减少重复编写代码量,提高代码复用效率。
函数的调用:
函数的调用:指函数定义以后,在代码的其他地方使用函数的动作
函数的调用形式:函数名+参数
函数的调用采用函数名(参数)的方式。如上例求n!中,total=factorial(4);程序执行时由于def不是主程序的一部分,因此会跳过该段代码,从主程序的第一行total=favtorial(4)开始运行。
在遇到函数的调用语旬factorial(4)时, 转到函数中的第一行代码开始执行。函数运行时,变量n会被赋值为4。函数执行完成返回变量s的值即24,然后回到语句total = factorial(4), 将返回值赋给变量 total, 最后输出。
例:用自定义函数编写求正方形面积
def s(a):
#求正方形面积
s=a*a
return s
t=s(5)
print("该正方形面积为:",t)
有6根火柴棒,列出所有能摆出的自然数,要求火柴棒正好用完。
火柴棒摆数字
问题:
列举3个可以用6根火柴棒摆放的单个数字_____、_____、______。
列出用6根火柴棒摆出的所有数字,分别是____________________。
3. 6根火柴棒能摆放的最大数是________。
6 2 5 5 4 5 6 3 7 6
每个数字需要几个火柴棒
6 2 5 5 4 5 6 3 7 6
火柴棒摆数字
6根火柴棒摆出的数字是: 0 , 6 , 9 , 14 ,41, 77 , 111
最大数为:111
总结:要求一个数总共需要多少根火柴,可以将这个数的每个数位上的数字
所需要的火柴棒数加起来。
如何让计算机提取出数字中的每位数呢?
想一想,如果我们想得到“125”的个位上的“5”,125与10之间用哪种运算可以实现?除、整除还是取模?
125%10=5
我们定义一个变量digit来接受取模运算的结果,用tens来接受整除的结果;
digit1 = 125%10 tens1=125//10
Digit2 = tens1%10 tens2=tens1//10
125//10=12
12%10=2
12//10=1
计算机数字中数位提取术:
实现方法:
1.将这个数除以10求余(取模),求得个位数;
2.将这个数除以10取整数
3.重复第1和第2步骤,直到这个数为0
1 2 5
12,5
0,1
1,2
火柴棒摆数字的算法及流程图表示
从0到111依次判断这些数是不是恰巧需要6根火柴棒
计算一个数需要多少根火柴棒?将这个数的每个数位上的数字所需要的火柴棒数加起来
实现方法是将这个数对10取余,求得个位数;然后将这个个位数需要的火柴棒数累加;接着将这个数整除以10,去掉个位数;重复以上步骤直到这个数为0。
6根火柴棒摆放的数字画程实现
计算自然数num需要多少根火柴棒,可以分别计算num中各个数位需要多少根火柴,然后将各数位对应的火柴棒根数进行累加。
第一:如何获得num各数位的值? 将num除以10取余,求得个位数; 然后将num除以10取整,去掉个位数。重复步骤 直到num为0。显然可用while循环。
第二:单个数字0~9需要的火柴棒根数可预先存储到列表f中,每次循环通过提取的每位数字对应列表中火柴的根数进行相加即可。
第三:最后,通过for循环遍历0—111所有的数,把符合6根火柴棒的数字筛选并输出即可。
6根火柴棒摆放的数字画程实现
将画程程序转换为Python程序
def match_num(num):
f=[6,2,5,5,4,5,6,3,7,6] # 0~9的数字分别需要多少根小棒
if num==0:
total=6
else:
total=0 # 火柴棒总数变量赋初值
while num>0:
x=num % 10 # 取num除以10的余数,即num的个位数
total=total+f[x] # 所需火柴棒数累加
num=num//10 #num整除10,即去掉num的个位数
return total #返回需要多少根火柴棒数
#以下为主程序
snum=6 # 6根火柴棒
print("你可以拼出这些数字:")
for i in range(112):
if match_num(i)==snum: #如果i需要的火柴棒数等于现有火柴棒数
print (i)
发布及导入、使用模块
(一)发布代码
首先做好发布前的准备工作。在D:\创建一个文件夹mymodule,其中包含mymodule.py和setup.py(包含发布的元数据)两个文件。
mymodule.py是一个模块文件,其内容就是match_num函数。
def match_num(num):
f=[6,2,5,5,4,5,6,3,7,6] # 0~9的数字分别需要多少根火柴棒
if num==0:
total=6
else:
total=0 # 火柴棒总数变量赋初值
while (num>0):
x=num % 10 # 取num除以10的余数,即num的个位数
total=total+f[x] # 所需火柴棒数累加
num=num//10 #num整除10,即去掉num的个位数
return total #返回需要多少根火柴棒数
setup.py文件包含有关发布的元数据,代码如下。
from distutils.core import setup
setup(
name ='mymodule', #参数一定要与mymodule.py文件名相同
version ='1.0.0', #版本号
py_modules =['mymodule'], #参数一定要与mymodule.py文件名相同
author='yd', #作者
author_email='yd@', #作者邮箱
description ='计算一个数字需要多少根火柴棒', #代码功能描述
)
在DOS命令行中打开mymodule所在的目录,构建发布文件,命令如图1。请注意本机Python安装的位置,例子中Python安装在d:\python34文件夹中。
最后将发布安装到你的Python本地副本中,如下图:
安装完成后mymodule文件夹包含了如图
如果你想在因特网上发布代码,让全世界都分享你的成果。可以访问PyPI网站(访问这个网站速度很慢)注册一个PyPI ID,然后向PyPI上传代码。PyPI(Python Package Index)是python官方的第三方库的仓库,所有人都可以下载第三方库或上传自己开发的库到PyPI。
(二)导入模块并使用
已经构建发布的模块必须先导入程序,然后才能使用。导入时使用语句“import mymodule”,调用模块内的函数时用“mymodule.match_num()”来实现。
import mymodule #导入模块
snum=6
print("你可以拼出这些数字:")
for i in range(112):
if mymodule.match_num(i) ==snum: #调用模块内match_num()函数
print (i)
练习
课后作业:
求1!+2!+3!+……+10!的结果,要求用函数实现阶乘的计算。
def factorial(n):
#求n!
s=1
for i in range(2,n+1):
s=s*i
return s
#调用factorial函数
total=0
for i in range(1,11):
total=total+factorial(i)
print(total)