打印出所有的"水仙花数"

打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,

其各位数字立方和等于该数本身。例如: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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值