课件23张PPT。2.4可以复用的代码导入新知我们编写的程序代码中有许多功能是相似甚至完全相同的,这时可以考虑用代码复用的方法提高程序的效率。使用“函数”和“模块”是代码复用的常见方法。Python 包含了丰富的内置函数和模块,你也可以自已编写- -些函数或模块,还可以到代码共享社区去下载。善于利用这些方法既可以减少重复编写代码的工作量,也可以使程序的结构更加清晰。学习目标了解函数的作用。
学会函数的定义和调用方法,并能熟练的使用函数解决问题。
学会发布共享代码的常见方法,并能熟练使用模块解决问题。探索新知 当我们面对一些复杂问题时,可以采取“自顶向下、逐步细化"的方法,即将一个完整的问题分成若千个小问题,每个小问题实现一个功能,再将每个小问题逐步细化、分解为一系列具体可实现的步骤。
本节我们将围绕“解决火柴棒摆数字问题”项目展开学习,通过该项目活动,体验复用和共享代码为编程带来的便利。
本项目主要包含“用自定义函数实现火柴棒摆数字问题”和“发布共享代码实现火柴棒摆数字问题”两个任务任务一 用自定义函数实现火柴棒摆数字问题※活动1用流程图表述问题解决的思路 有6根火柴棒,列出所有能摆出的自然数,要求火柴棒正好用完。火柴数字如图2.4.1所示。思路分析 要找出这些数,可以从0到111依次判断这些数是不是恰巧需要6根火柴棒。
为什么是0到111呢?
观察图2.4.1可知,在0~9这十个数字中,摆出“1”只需要2根火柴棒,是需要火柴棒数最少的数字。
因此6根火柴棒能摆放的最大数就是111。
将自己的想法用流程图表示出来,如图2.4.2所示。
解析 如何计算一个数需要多少根火柴棒呢?可以将这个数的每个数位上的数字所需要的火柴棒数加起来。
实现方法是将这个数除以10取余,求得个位数;然后将这个个位数需要的火柴棒数累加;接着将这个数除以10取整,去掉个位数;
重复以上步骤直到这个数为0。这种方法可行吗?请将其转化为流程图填入图2.4.3的框中。
※活动2完善程序实现问题解决如果遇到一个需求多次出现,可以先思考,有没有内置函数可以提供帮助。
如果没有,则可以考虑寻找或自己编写一个自定义函数。
“一个数字需要多少根火柴棒”的问题可以通过函数计算来实现。那么,如何编写函数呢?函数 函数可分为系统函数和用户自定义函数两种类型。系统函数即函数库中的标准函数,是程序设计语言或操作系统提供给用户的一系列已经编制好的程序。在前面单元使用过的print()和input()函数都是系统函数。前者用于将字符串按指定格式输出到屏幕上;后者用于接收键盘的输人,并存储于相应变量中。用户自定义函数则是用户自己编写的一-段程序。
函数一- 般包括函数名、参数、返回值和函数体等四部分。其中,函数名和函数体是必不可少的,参数和返回值可根据需要进行定义。.定义函数的基本格式如下。函数的分类自定义函数求 n!def factorial(n):
#求n!
s=1
for i in range(2,n+1):
s=s*i
return s
#调用factorial函数
total=factorial(4)
print(total)
input("运行完毕,请按回车键退出...")
总结 上例中,程序执行时由于def块中的代码不是主程序的一部分,因此会跳过该段代码,从主程序的第- -行total = factorial(4)开 始运行。在遇到函数的调用语句factorial(4)时,转到函数中的第一行代码开始执行。
函数运行时,变量n会被赋值为4。函数执行完成返回变量s的值即24,然后回到语句total = factorial(4), 将返回值赋给变量total,最后输出。活动2 完善程序def match_num(num):
f=[6,2,5,5,4,5,6,3,7,6] # 0-9的数字分别需要多少根小棒
if num==0: # 火柴棒总数变量赋初值
total=f[0]
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)
input("运行完毕,请按回车键退出...")
发布代码任务二发布共享代码实现火柴棒摆数字问题
※活动1发布共享代码
任何人编写的代码都有可能帮到其他人,那么如何共享这些有价值的成果呢?常见的方法是发布代码。请将“计算一个数字需要多少根火柴棒”的函数match_ num转换为模块,然后发布。
发布代码
通过模块发布代码可以让很多人受益于你的工作。下面就以任务一为例介绍发布代码的方法。
首先做好发布前的准备工作。在D:创建.--个文件夹mymodule,其中包含mymodule.py和setup.py两个文件。
mymodul.py是- -个模块文件,其内容就是match _num函数。模块文件def match_num(num):
f=[6,2,5,5,4,5,6,3,7,6] # 0-9的数字分别需要多少根小棒
if num==0: # 火柴棒总数变量赋初值
total=f[0]
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='zy@mail.com', #作者邮箱
#代码功能描述
description ='计算一个数字需要多少根火柴棒',
) 导入并使用模块import mymodule #导入模块
snum=6 # 6根火柴棒
print("你可以拼出这些数字:")
for i in range(112):
if mymodule.match_num(i)==snum: #调用模块内match_num()函数
print (i)
input("运行完毕,请按回车键退出...")拓展练习def shengxiao(year):
#求生肖
zodiac=["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"]
index=(year-1972)%12
return zodiac[index]
#以下为主程序
myyear=int(input("请输入出生年份,输入0结束:"))
while myyear!=0:
print("你的生肖是:",shengxiao(myyear))
myyear=int(input("请输入出生年份,输入0结束:"))
拓展知识Python中提供了大量标准模块,也叫标准库。在最强大脑的游戏中使用time模块与random模块。
Time模块案例
import time
print(time.time())
#时间戳,即1970纪元后经过的浮点秒数
time.sleep(2) #延时2秒
print(time.asctime()) #格式化显示时间
input("运行完毕,请按回车键退出...")
Ramdom模块import random
num=random.randint(0,10000)
#产生一个[0,10000]之间的随机整数
print(num)
input("运行完毕,请按回车键退出...")
本节课到此结束