Python_ONLINE_习题集_02 函数封装
2.1 封装函数实现如下要求
例如:输入2,5
则求:2 + 22+222 + 2222+22222的和
参考答案: https://www.bilibili.com/read/cv4185619
def demo(f):
def func(x,y): #定义内层函数(即装饰的功能函数),两个功能:一个是打印出式子,另一个是计算结果
Str = "" #空字符串,用来生成一个字符串,实现第一个功能 "x + xx + ... + x...x ="
for i in range(1, y + 1): #这里renge(a,b,k=1)包左不包右,步长k默认为1
Str += str(x) * i #利用字符串的加法运算将字符串连接起来(利用字符串乘法重复运算)
if i == y: #使用条件语句连接完数字后再连接一个加号,但在最后一个后面连接等号
Str += "="
else:
Str += "+"
sum = 0 #通过累加计算以上数学运算式子的值
for j in range(1, y + 1): #这里的range()序列遍历主要为第j个x的长度
sum += int(str(x) * j)
return f(Str,sum) #这是个函数表达式,Str和sum已经通过外层返回的函数名计算出来了,传递给f()函数执行出最终结果
return func #返回内层函数名主要是通过内层函数计算出Str和sum的值传递到f()函数中执行
# @demo #如果执行此句,后面无需a=dimo(f)来间接调用,可直接f(8,10)执行出结果
def f(a,b):
print(a,b)
a = demo(f) #可以直接写dimo(f)(8,10)同样可以执行出结果
a(8,10)
a(5,6)
a(2,2)
demo(f)(3,6)
8+88+888+8888+88888+888888+8888888+88888888+888888888+8888888888= 9876543200
5+55+555+5555+55555+555555= 617280
2+22= 24
3+33+333+3333+33333+333333= 370368
2.2 判断某个数是否是素数,返回结果
def demo(f): #定义装饰器函数
def func(num): #定义一个内层功能函数
if num == 1: #特殊情况
num= "既不是素数也不是和数"
elif num == 2: #2不能放在下面的for循环中,因为range(2,2)是个空序列,会直接不执行循环体
num = "否"
elif num > 2:
for i in range(2,num): #遍历2~(num-1)每个数试探,如果期间存在一个数能整除num,则它不是素数
if num % i == 0:
num = "否"
break #判断完毕,终止并跳出循环语句
elif i == num-1: #如果循环语句都遍历到num-1了就可以肯定它就是素数
num = "是"
return f(num) #通过外层函数返回的函数名再加上括号就能算出num的值,传递给p来执行judge_prime_num()函数
return func
@demo
def judge_prime_num(p):
print("您输入的这个数是否为素数?——%s"%p)
judge_prime_num(25)
judge_prime_num(13)
judge_prime_num(101)
judge_prime_num(1)
您输入的这个数是否为素数?——否
您输入的这个数是否为素数?——是
您输入的这个数是否为素数?——是
您输入的这个数是否为素数?——既不是素数也不是和数
2.3 计算2-100之间素数的个数,返回结果
def demo(f): #定义一个外层函数
def func(): #在外层函数内定义一个函数(该函数主要实现所需要封装的功能),因为指定2~100内,所以不需要形参
sum = 0 #后面通过sum+=1来统计素数的个数
for i in range(2, 101): #从2~100中取数,后面挨个判断是否为素数
for j in range(2, i): #该循环体从2到i-1中挨个取数,若存在一个数能整除i,则i不是素数,若j取到了i-1,说明i只被1和它本身整除
if i % j == 0:
break
elif j == i-1:
sum += 1 #当j都取到i-1了还找不到整除i的数,则i是素数,此处对sum+1进行累计
return f(sum+1) #因为当i=2时,range(2,2)为空,循环无法进行,直接结束了,所以2被漏掉了,所以sum+1将2补回来
return func() #在调用f1时,通过返回
# @f1
def f(p):
print("2~100内有%d个素数"%p) #func()函数无形参为何此处有?因为他需要传递统计的结果
demo(f) #该语句的意思就是用f1()函数装饰f()函数的意思,因为@具备此功能就将此注释掉了 """
(1)通过语句f1(f)调用f1函数,注意f1(f)是一个函数运算表达式,他需要执行f1()函数,得到的值为f2()
(2)f2()是内层函数运算表达式,它也是有值的,它的值是f(sum+1),这个仍然是函数运算表达式,它的值是什么???
(3)在内层函数中我们通过语句运算已经得出了sum+1=25,也就是说f1(f)最终的返回值是f(25),它仍然还是个函数表达式,继续调用函数运算
(4)执行f函数得到最终结果>>2~100内有25个素数
"""
您输入的这个数是否为素数?——否
您输入的这个数是否为素数?——是
您输入的这个数是否为素数?——是
您输入的这个数是否为素数?——既不是素数也不是和数
2.5 交换某两个变量的值
def demo(f):
def func(x,y):
return f(y,x)
return func
@demo
def f (a,b):
print("a=%d,b=%d"%(a,b))
a=int(input("请输入第一个数a="))
b=int(input("请输入第二个数b="))
f(a,b)
请输入第一个数a=10
请输入第二个数b=90
a=90,b=10
2.6
2.7
2.8
Python_ONLINE_习题集_02 函数封装的更多相关文章
- c#读写共享内存操作函数封装
原文 c#读写共享内存操作函数封装 c#共享内存操作相对c++共享内存操作来说原理是一样,但是c#会显得有点复杂. 现把昨天封装的读写共享内存封装的函数记录下来,一方面希望给需要这块的有点帮助,另一方 ...
- [妙味JS基础]第九课:定时器管理、函数封装
知识点总结 函数封装 回调函数 实例:抖动函数 获取当前的位置 通过数组来实现,一正一负,直到恢复成0为止. 当前位置与数组中各值相加
- 前端总结·基础篇·JS(三)arguments、callee、call、apply、bind及函数封装和构造函数
前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(三)补充 前端总结·基础篇·JS(一)原型.原型链.构造函数和字符串(String) 前 ...
- XMLHttpRequest函数封装
XMLHttpRequest函数封装: function ajax(Url,sccuessFn,failureFn) { //1.创建XMLHttpRequest对象 var xhr = null; ...
- Appium python自动化测试系列之滑动函数封装实战(八)
8.1 什么是函数的封装 教科书上函数的封装太官方,我们这里暂且将函数的封装就是为了偷懒把一些有共性的功能或者一些经常用的功能以及模块放在一起,方便我们以后再其他地方调用.这个只是个人的理解所以大家懂 ...
- c++ 回调函数封装
std::function<void(int a,int b)> ha; //函数封装 当成参数用callback std::bind(&fun1,this,std::plac ...
- 定时器中的this和函数封装的简单理解;
一.定时器中的this: 不管定时器中的函数怎么写,它里面的this都是window: 在函数前面讲this赋值给一个变量,函数内使用这个变量就可以改变this的指向 二.函数封装 函数封装是一种函数 ...
- JS中深浅拷贝 函数封装代码
一.了解 基本数据类型保存在栈内存中,按值访问,引用数据类型保存在堆内存中,按址访问. 二.浅拷贝 浅拷贝只是复制了指向某个对象的指针,而不是复制对象本身,新旧对象其实是同一内存地址的数据,修改其中一 ...
- Ajax入门(二)Ajax函数封装
如果看了的我上一篇博客<Ajax入门(一)从0开始到一次成功的GET请求>的话,肯定知道我们已经完成了一个简单的get请求函数了.如下: 1234567891011121314151617 ...
随机推荐
- JS Null 空 判断
JS判断对象是否为空 https://www.cnblogs.com/mountain-mist/articles/1600995.html http://www.cftea.com/c/2007/0 ...
- LeetCode - 滑动窗口最大值
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口每次只向右移动一位. 返回滑动窗口中的最大值. 输入: nums ...
- 安装原版 Windows 7 后需要安装的微软更新 和 必备系统组件
Windows 7 SP1 和 Windows Server 2008 R2 SP1 更新历史记录 https://support.microsoft.com/zh-cn/help/4009469 微 ...
- 判断字符串a是否以字符串b开头或结尾
使用字符串的 str.startwith() 和 str.endswith()方法 import os , stat for name in os.listdir('.') if name.endsw ...
- TTTTTTTTTTTTTT CDOJ Sliding Window 线段树(nlogn)或双端队列(n) 模板
题目链接: L - Sliding Window Time Limit:6000MS Memory Limit:131072KB 64bit IO Format:%lld & ...
- 浅谈BSGS(大步小步)及其扩展
用途: 一般用来求\(a^x\equiv b\,\,(mod\,p)\)的最小正整数解,其中gcd(a,p)=1 设\(u=\lceil sqrt(p)\rceil\),则式子可以转化为\(a^{iu ...
- Oracle数据库锁表查询
--查看数据库最大连接数 select value from v$parameter where name = 'processes'; --更改数据库连接数 alter system scope = ...
- Hive分析窗口函数(一) SUM,AVG,MIN,MAX
Hive分析窗口函数(一) SUM,AVG,MIN,MAX Hive分析窗口函数(一) SUM,AVG,MIN,MAX Hive中提供了越来越多的分析函数,用于完成负责的统计分析.抽时间将所有的分析窗 ...
- Getting CFNetwork SSLHandshake failed (-9806) error
平常个人打测试包一切OK,今天突然不能联网了 How to handle "CFNetwork SSLHandshake failed" in iOS 参考1 Getting CF ...
- pycharm 调用turtle模块时,窗口闪屏不能显示
#如下代码时,在pycharm中运行时,窗口在程序结束后,直接关闭,不能看到绘制的图像. #在python自带的IDE中,在执行代码后,可以看到窗口的显示. import turtle t = tur ...