求任意水仙花数 python

今天学习,看见有个让做水仙花数的题

肯定先百度啊,什么是水仙花数,百度了下,明白了

例如:一个三位数的水仙花数,是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。

 

以此类推,可以有4+为以上的水仙花数,先别急,做一个固定3位数的

i = 521
a = i%1000//100
b = i%100//10
c = i%10
print(a)
print(b)
print(c)

忘记了一些东西,先试试,打印了下,还可以,就写出了一个三位数的水仙花

num = 3
for i in range(pow(10,num-1),pow(10,num)):
    a = i%1000//100
    b = i%100//10
    c = i%10
    if pow(a,3)+pow(b,3)+pow(c,3) == i:
        print(i)

这里就学习了pow函数,原来是求N次的幂,可以,学到一招

 

那继续,问题来了

怎么去把输入是位数去固定名称了,例如4位数,就是abcd四个参数,输入3,d就白定义了,万一输入7,又不够,继续想

后面想到可以用list储存,这样用下标循环就可以了

想了下,用这个方法,要定义个函数,来取余

百度了下,发现了一个师兄的博客,地址是https://blog.csdn.net/Guo_Apple/article/details/68944653

代码是:

'''代码,有个地方复制不到,就打省略号
def f(n):
    list=[]
    for i in range(pow(10,n-1),pow(10,n)):
        list=map(int,str(i))
        sum = 0
        for k in range(0,len(list)):
            sum=sum+pow(list[k],n)
        if sum==i:
            print i
 
if __name__=="__main__":
    n=int(raw_input("请输入正整数的位数:"))

......

'''

看不懂啊,这神马哦,那继续研究

先看代码问题,可能是老版的python,我用的是python 3.7,代码有误啊

print i 需要加个括号,raw_input不知道什么,估计是input,自己敲就省略了

然后捣鼓代码

后面发现原来这么强的list函数,map就拆分了,各位新手建议自己百度

语法

 

map(function, iterable, ...)

 

  • function -- 函数
  • iterable -- 一个或多个序列

然后自己一步一步调试啊,基本上就成了

其中,遇见了以下几个问题:

1.unsupported operand type(s) for -: 'str' and 'int'

这个是定义num的时候,没有加int,直接放在range里面,就提示了,后面把num控制成int就行了:

num = int(input("输入一个位数,求水仙花数:"))

2.'map' object is not subscriptable

最难的就是这个了,研究了好久,调试了十几分钟,才明白,map是不能直接加减的,然后继续想解决办法,后面看类型,然后把list_s 重新用list包装,即

list_s = list(list_s)

然后终于搞定了,当然,后面取list[k],也int了

然后附上全部代码:

num = int(input("输入一个位数,求水仙花数:"))
list_s = []

for i in range(pow(10,num-1),pow(10,num)):

    list_s = map(str, str(i))
    list_s = list(list_s)

    sum = 0
    for k in range(0, num):

        sum = sum + pow(int(list_s[k]), num)
        if sum == i:
            print(i)

当然,在num > = 7,之后,计算数值太大,机器吃不消哈

 

 

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值