打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,
其各位数字立方和等于该数本身。例如:153是一个"水仙花数",
因为153=1的三次方+5的三次方+3的三次方。
GenList = []
ShuiXianHuanList = []
#柯里化一下
def GenListWrapper(fn):
def _GenListWrapper(n=10):
GenList = [i+1 for i in range(n)]
listAll = ((x+1,y+1,z+1) for x in range(len(GenList)) for y in range(len(GenList)) for z in range(len(GenList)))
#把列表中的每个元素拿出来做判断,如果有重复的数字移除
for x in (listAll):
a,b,c = x
ShuiXianHuanList.append(str(a*100+b*10+c))
return fn()
return _GenListWrapper
#然后用装饰器来调用水仙花函数,因为生成的list和水仙花数毫无关系,所以用装饰器增强他的功能
@GenListWrapper # 相当于GenListWrapper(ShuiXianHua) 无参装饰器 相当于GenListWrapper(n)(fn)
def ShuiXianHua():
#每次拿三个数 然后用字符串拼接 然后转车数字和 x^3 +y^3 + z^3 作比较 如果相等 则是水仙花数
for sxh in ShuiXianHuanList:
a,b,c = sxh[0],sxh[1],sxh[2]
if (pow(int(a),3) + pow(int(b),3) + pow(int(c),3)) == int(sxh):
print('this a number is shuixianhua',sxh)
ShuiXianHua(10)