1 / 12
文档名称:

《Python教学课件》第5章函数与模块-7.pptx

格式:pptx   大小:737KB   页数:12页
下载后只包含 1 个 PPTX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

《Python教学课件》第5章函数与模块-7.pptx

上传人:autohww 2020/11/24 文件大小:737 KB

下载得到文件列表

《Python教学课件》第5章函数与模块-7.pptx

文档介绍

文档介绍:Python 函数与模块
函数应用举例
分析:定义一个匿名函数求累加项,循环控制累加100次。
程序如下:
from math import *
f=lambda n:(1+log(n))/(2*pi)
y=exp()
for n in range(1,101):
y+=f(n)
print("y=",y)
函数应用举例
例 设计一个程序,求同时满足下列两个条件的分数x的个数:
(1) 1/6<x<1/5
(2) x的分子、分母都是素数且分母是2位数。
分析:设x=m/n,根据条件(2),有10≤n≤99;根据条件(1),有5m≤n≤6m,并且n、m均为素数。用穷举法来求解这个问题,并设计一个函数来判断一个数是否为素数,若是素数则返回值True,否则为False。
程序内容如下:
from math import *
def isprime (n):
found=True
for j in range(2, int(sqrt(n)+1)):
if n%j==0: found=False
return found
def main():
count=0
for n in range (11, 100):
if isprime(n):
for m in range(n//6+1, n//5+1):
if isprime(m):
print("{:d}/{:d} ".format(m, n))
count+=1
print("满足条件的数有{:d}个".format(count))
main()
例 汉诺(Hanoi)塔向题。有三根柱子A、B、C,A上堆放了n个盘子,盘子大小不等,大的在下,小的在上,如图5-4所示。现在要求把这n个盘子从A搬到C,在搬动过程中可以借助B作为中转,每次只允许搬动一个盘子,且在移动过程中在3根柱子上都保持大盘在下,小盘在上。要求打印出移动的步骤。
分析:汉诺塔问题是典型的递归问题。分析发现,想把A上的n个盘子搬到C,必须先把上面的n-1个盘子搬到B,然后把第n个盘子搬到C,最后再把n-1个盘子搬过来。整个过程可以分解为以下三个步骤。
(1) 将A上n-1个盘子借助C柱先移到B柱上。
(2) 把A柱上剩下的一个盘子移到C柱上。
(3) 将n-1个盘子从B柱借助于A柱移到C柱上。
也就是说,要解决n个盘子的问题,先要解决n-1个盘子的问题。而这个问题与前一个是类似的,可以用相同的办法解决。最终会达到只有一个盘子的情况,这时直接把盘子从A搬到C即可。
例如,将三个盘子从A柱移到C柱可以分为如下三步:
(1) 将A柱上的1~2号盘子借助于C柱移至B柱上。
(2) 将A柱上的3号盘子移至C柱上。
(3) 将B柱上的1~2号盘子借助于A柱移至C柱上。
步骤(1)又可分解成如下三步:
① 将A柱上的1号盘子从A柱移至C柱上。
② 将A柱上的2号盘子从A柱移至B柱上。
③ 将C柱上的1号盘子从C柱移至B柱上。
步骤(3)也可分解为如下三步:
① 将B柱上的1号盘子从B柱移至A柱上
② 将B柱上的2号盘子从B柱移至C柱上。
③ 将A柱上的1号盘子从A柱移至C柱上。
综合上述移动,将三只盘子由A移到C需要如下的移动步骤:
1号盘子A→C,2号盘子A→B,1号盘子C→B,3号盘子A→C,1号盘子B→A,2号盘子B→C,1号盘子A→C。
可以把上面的步骤归纳为两类操作:
(1) 将1~n-1号盘子从一个柱子移动到另一个柱子上
(2) 将n号盘子从一个柱子移动到另一个柱子上。
基于以上分析,分别用两个函数实现上述两类操作,用hanoi函数实现上述第一类操作,用move函数实现上述第二类操作。hanoi函数是一个递归函数,可以实现将n个盘子从一个柱子借助于中间柱子移动到另一个柱子上,如果n不为1,以n-1作实参调用自身,即将n-1个盘子移动,依次调用自身,直到n等于1,结束递归调用。move函数实现将1个盘子从一个柱子移至另一个柱子的过程。
程序如下:
cnt=0 #统计移动次数,cnt是一个全局变量
def hanoi(n, a, b, c):
global cnt
if n==1:
cnt+=1
move(n, a, c)
else:
hanoi(n-1, a, c,b)
cnt+=1
move(n,