1、2.4 可以复用的代码可以复用的代码 【学习目标】【学习目标】 1.了解函数的作用。 2.掌握函数的定义和调用方法。 3.了解发布共享代码的常见方法。 【教学重点】【教学重点】 1.函数的定义及调用。 2.模块的发布和导入使用。 【教学难点】【教学难点】 共享代码的发布。 有6根火柴棒,列出所有能摆出的自然数,要求火柴棒正好用完。 问题:问题: 火柴棒摆数字 问题问题: 1. 列举列举3个可以用个可以用6根火柴棒摆放的数字根火柴棒摆放的数字_、_、_。 2. 6根火柴棒能摆放的最大数是根火柴棒能摆放的最大数是_。 每个数字需要几个火柴棒每个数字需要几个火柴棒 6 2 5 5 4 5 6 3 7
2、 6 火柴棒摆数字 6个个火柴火柴棒棒可以可以摆出的最大数字摆出的最大数字 火柴棒摆数字 火柴棒摆数字的算法及流程图表示 从从0到到111依次判断这些数是不是恰巧需要依次判断这些数是不是恰巧需要6根火柴棒根火柴棒将这个数的每个数位上的数字所需要的火柴棒数加起来将这个数的每个数位上的数字所需要的火柴棒数加起来 将这个数的每个数位上的数字所 需要的火柴棒数加起来。实现方 法是将这个数除以10取余,求得 个位数;然后将这个个位数需要 的火柴棒数累加;接着将这个数 除以10取整,去掉个位数;重复 以上步骤直到这个数为0。 函数 def factorial(n): #求n! s=1 for i in r
3、ange(2,n+1): s=s*i return s #调用factorial函数 total=factorial(4) print(total) 函数分类:系统函数和用户自定义函数,体现共性和个性的问题。 系统函数即函数库中的标准函数,是程序设计语言或操作系统提供给用户的一 系列己经编好的程序。用户自定义函数则是用户自己编写的一段程序。 函数的组成: 函数一般包括函数名、参数、返回值和函数体4部分。其中函数名和函数 体是必不可少的,参数和返回值可根据需要进行定义。 函数 def 函数名(参数): #函数说明 语句或语句组 return 返回值 参数是用来向函数传递值的, 当有多个参数时各个
4、参数由逗 号分隔。函数执行完成后,由 return语句将表达式值返回给调 用者,结束函数。 6根火柴棒摆放的数字画程实现 计算自然数num需要多少根火柴棒,可以分别计 算num中各个数位需要多少根火柴,然后将各数 位对应的火柴棒根数进行累加。 如何获得num各数位的值?将num除以10取余, 求得个位数;然后将num除以10取整,去掉个 位数。重复步骤直到num为0。显然可用 while循环。 单个数字09需要的火柴棒根数可预先存储到列 表f中。 6根火柴棒摆放的数字画程实现根火柴棒摆放的数字画程实现 将画程程序转换为将画程程序转换为Python程序程序 def match_num(num):
5、 f=6,2,5,5,4,5,6,3,7,6 # 09的数字分别需要多少根小棒 if num=0: total=6 else: total=0 # 火柴棒总数变量赋初值 while (num0): x=num % 10 # 取num除以10的余数,即num的个位数 total=total+fx # 所需火柴棒数累加 num=num/10 #num整除10,即去掉num的个位数 return total #返回需要多少根火柴棒数 #以下为主程序 snum=6 # 6根火柴棒 print(你可以拼出这些数字:) for i in range(112): if match_num(i)=snum:
6、#如果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# 09的数字分别需要多少根火柴棒 if num=0: total=6 else: total=0 # 火柴棒总数变量赋初值 while (num0): x
7、=num % 10 # 取num除以10的余数,即num的个位数 total=total+fx # 所需火柴棒数累加 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,
8、 #作者 author_email=, #作者邮箱 description =计算一个数字需要多少根火柴棒, #代码功能描述 ) 在DOS命令行中打开mymodule所在的目录,构建发布文件,命令如图1。请注意本机Python安装的位置,例 子中Python安装在d:python34文件夹中。 最后将发布安装到你的Python本地副本中,如下图 安装完成后mymodule文件夹包含了如图 如果你想在因特网上发布代码,让全世界都分享你的成果。可以访问PyPI网站(访问这个网站速度很慢)注册一 个PyPI ID,然后向PyPI上传代码。PyPI(Python Package Index)是pyth
9、on官方的第三方库的仓库,所有人都可以 下载第三方库或上传自己开发的库到PyPI。 (二)导入模块并使用(二)导入模块并使用 已经构建发布的模块必须先导入程序,然后才能使用。导入时使用语句已经构建发布的模块必须先导入程序,然后才能使用。导入时使用语句“import mymodule”,调用模块内的函数时用,调用模块内的函数时用“mymodule.match_num()”来实现来实现。 import mymodule #导入模块 snum=6 print(你可以拼出这些数字:) for i in range(112): if mymodule.match_num() =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)