1、2.4 2.4 可以复用的代码可以复用的代码【学习目标】【学习目标】1.了解函数的作用。2.掌握函数的定义和调用方法。3.了解发布共享代码的常见方法。【教学重点】【教学重点】1.函数的定义及调用。2.模块的发布和导入使用。【教学难点】【教学难点】共享代码的发布。有6根火柴棒,列出所有能摆出的自然数,要求火柴棒正好用完。火柴棒摆数字问题问题:1.列举列举3个可以用个可以用6根火柴棒摆放的数字根火柴棒摆放的数字_、_、_。2.6根火柴棒能摆放的最大数是根火柴棒能摆放的最大数是_。火柴棒摆数字每个数字需要几个火柴棒每个数字需要几个火柴棒6 2 5 5 4 5 6 3 7 6火柴棒摆数字6个火柴棒可以
2、摆出的最大数字个火柴棒可以摆出的最大数字火柴棒摆数字 问题分析,设计解决问题的算法数字数字所用火柴棒数所用火柴棒数6255456376【思考回答思考回答】1、6根火柴棒可以摆出的最小数字是:_可以摆出的最大数字为:_2、要判断一个数所用的火柴数,需要对每一位上的数所用火柴数求_u 数学分析数学分析 问题分析,设计解决问题的算法u 自然语言描述算法自然语言描述算法环节环节请用自然语言描述算法请用自然语言描述算法列出区间列出区间 计算数量计算数量 比较输出比较输出 哪一部分是要重复使用的?哪一部分是要重复使用的?问题分析,设计解决问题的算法u 流程图描述算法流程图描述算法能用6根火柴棒摆出的数字的
3、流程图snum=6#6根火柴棒print(你可以拼出这些数字:)for i in range(112):if(match-num(i)=snum:#如果i需要的火柴棒数等于现有火柴棒数 print(i)1.数字“1”需要的火柴棒最少,因此能摆出的自然数最大是111。2.对0-111之间的每一个数进行计算,统计需要的火柴棒根数。3.凡是恰好需要6根火柴棒的数直接输出。能用6根火柴棒摆出的数字【预热】请同学们阅读课本P42并分析以下程序代码:def factorial(n):#求n!s=1 for i in range(2,n+1):s=s*i return s#调用factorial函数tota
4、l=factorial(4)print(total)input(运行完毕,请按回车键退出.)揭开函数的面纱函数def factorial(n):#求n!s=1 for i in range(2,n+1):s=s*i return s#调用factorial函数total=factorial(4)print(total)函数分类:系统函数和用户自定义函数,体现共性和个性的问题。系统函数即函数库中的标准函数,是程序设计语言或操作系统提供给用户的一系列己经编好的程序。用户自定义函数则是用户自己编写的一段程序。由于def块中的代码不是主程序的一部分,会跳过该段代码;从主程序第一行total=facto
5、rial(4)开始执行。遇到函数的调用语句factorial(4)时,转到自定义函数中的第一行代码开始执行。函数运行时,变量n会被赋值为4。执行完成返回变量s的值即24,回到语句total=factorial(4),将返回值赋给变量total,最后输出。s=1for i in range(2,n+1):s=s*is=1s=1*2 2 s=2s=2*3 s=63 s=6*4 4 s=2s=2 s=6 s=24s=6 s=24函数的组成:函数一般包括函数名、参数、返回值和函数体4部分。其中函数名和函数体是必不可少的,参数和返回值可根据需要进行定义。函数def 函数名(参数):#函数说明 语句或语句
6、组 return 返回值参数是用来向函数传递值的,当有多个参数时各个参数由逗号分隔。函数执行完成后,由return语句将表达式值返回给调用者,结束函数。求一个数字所用火柴棒数 一个数需要火柴棒:将这个数的每个数位上的数字所需要的火柴棒数加起来。(某数为abc,火柴棒总数=c用火柴棒数+b用火柴棒数+a用火柴棒数)实现方法实现方法:将这个数除以10取余,求得个位数;然后将这个个位数需要的火柴棒数累加;接着将这个数除以10取整,去掉个位数;重复以上步骤直到这个数为0。求42需要火柴棒个数:(1)42/10=4余2,个位数2需火柴棒5根。(2)42/10=4,十位数4需火柴棒4根。因此,42需要9根
7、火柴棒。图2.4.3一个数需要火柴棒数流程图一个数需火柴棒数num=int(input(“请输入一个数“)f=6,2,5,5,4,5,6,3,7,6#0-9的数字分别需要火柴棒数if num=0:#火柴棒总数变量赋初值 total=f0 else:total=0#火柴棒总数变量赋初值while(num0):x=num%10#取num除以10的余数,即num的个位数total=total+fx#所需火柴棒数累加num=num/10#num整除10,即去掉num的个位print(total)编程实现一个数需火柴棒数编程实现一个数需火柴棒数火柴棒摆数字的算法及流程图表示从从0到到111依次判断这些数
8、是不是恰巧需要依次判断这些数是不是恰巧需要6根火柴棒根火柴棒将这个数的每个数位上的数字所需要的火柴棒数加起来将这个数的每个数位上的数字所需要的火柴棒数加起来将这个数的每个数位上的数字所需要的火柴棒数加起来。实现方法是将这个数除以10取余,求得个位数;然后将这个个位数需要的火柴棒数累加;接着将这个数除以10取整,去掉个位数;重复以上步骤直到这个数为0。火柴棒摆放的数字画程实现计算自然数num需要多少根火柴棒,可以分别计算num中各个数位需要多少根火柴,然后将各数位对应的火柴棒根数进行累加。如何获得num各数位的值?将num除以10取余,求得个位数;然后将num除以10取整,去掉个位数。重复步骤直
9、到num为0。显然可用while循环。单个数字09需要的火柴棒根数可预先存储到列表f中。6根火柴棒摆放的数字画程实现根火柴棒摆放的数字画程实现将画程程序转换为将画程程序转换为Python程序程序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=num%10#取num除以10的余数,即num的个位数 total=total+fx#所需火柴棒数累加 num=num/10#num整除10,即去掉num的个位数 return tot
10、al#返回需要多少根火柴棒数#以下为主程序 snum=6#6根火柴棒print(你可以拼出这些数字:)for i in range(112):if match_num(i)=snum:#如果i需要的火柴棒数等于现有火柴棒数 print(i)练习练习请完善修改程序请完善修改程序活动六活动六.py,实现输入一个人的出生年份(,实现输入一个人的出生年份(=1900),输出他的生肖,直到输入),输出他的生肖,直到输入0结结束。束。def shengxiao(year):#求生肖 zodiac=鼠,牛,虎,兔,龙,蛇,马,羊,猴,鸡,狗,猪 index=(year-1972)%12 return _#以
11、下为主程序myyear=int(input(请输入出生年份,输入0结束:)while myyear!=0:print(你的生肖是:,_)myyear=int(input(请输入出生年份,输入0结束:)请将“计算一个数字需要多少根火柴棒”的函数match-num转换为模块,然后发布。首先做好发布前的准备工作。在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 n
12、um=0:#将火柴棒总数变量赋初值 total=f(0)else:total=0 while(num0):x=num%10#取num除以10的余数,即num的个位数 total=total+f(x)#所需火柴棒数累加 num=num/10#num整除10,即去掉num的个位数 return total#返回需要多少根火柴棒from distutils.core import setupsetup(name=mymodule,version=1.0.0,py_modules=mymodule,author=yd,author_email=,description=计算一个数字需要多少根火柴棒,)
13、在DOS命令行中打开mymodule所在的目录,构建发布文件,命令如图1。请注意本机Python安装的位置,例子中Python安装在d:python34文件夹中。最后将发布安装到你的Python本地副本中,如下图安装完成后mymodule文件夹包含了如图如果你想在因特网上发布代码,让全世界都分享你的成果。可以访问PyPI网站(访问这个网站速度很慢)注册一个PyPI ID,然后向PyPI上传代码。PyPI(Python Package Index)是python官方的第三方库的仓库,所有人都可以下载第三方库或上传自己开发的库到PyPI。已经构建发布的模块必须先导入程序,然后才能使用。可使用语句“
14、import mymodule”导入。import mymodule#导入模块snum=6print(你可以拼出这些数字:)for i in range(112):if mymodule.match_num()=sum:print(i)123请在D盘创建一个名为mymodule的文件夹在该文件夹内拷入两个文件:mymodule.py和setup.py打开这两个文件了解其代码内容,做到融会贯通举一反三举一反三体验模块调用体验模块调用总结:总结:导入并使用模导入并使用模块块1、已经发布的模块在导入时要使用语句:、已经发布的模块在导入时要使用语句:_2、调用模块内的函数时要用、调用模块内的函数时要用
15、_实现实现如果发布的模块名为如果发布的模块名为test,其其模块内定义的函数名为模块内定义的函数名为huochaishu,该程序中该修,该程序中该修改的语句为:改的语句为:_知识补充知识补充常见内置模块常见内置模块常见内置模块:常见内置模块:运行以下程序代码,体验内置模块运行以下程序代码,体验内置模块random的使用:的使用:importrandomnum=random.randint(0,10)print(num)模块名模块名功能功能Math模块 包含大量的数学函数和常用常数Random模块 用来生成随机数Time模块 用来获取计算机的时间信息sys模块 包含跟python环境相关的函数课后作业:课后作业:求1!+2!+3!+10!的结果,要求用函数实现阶乘的计算。def factorial(n):#求n!s=1 for i in range(2,n+1):s=s*i return s#调用factorial函数total=0for i in range(1,11):total=total+factorial(i)print(total)THANK YOU