用最简单的python来解决

编写一个自定义函数用于判断一个任意数是否是水仙花数,调用此函数找到并输出500以内最大的水仙花数。注:水仙花数是指一个3位数,它的每个位上的数字的3次幂之和等于它本身,如153=1*1*1+5*5*5+3*3*3,153就是一个水仙花

def narcissistic_number(num):

    s = str(num)

    length = len(s)

    if len(s) != 3:

    return False

    sum_num = 0

    for i in s:

        sum_num += int(i)**length

    return sum_num == num

   

result = [i for i in range(1000) if narcissistic_number(i)]

print(result)

输出:[153, 370, 371, 407]

 

for i in range(100,1000):
    if eval('+'.join([n+'**3' for n in str(i)]))==i:
        print(i)

使用切片,将数字切分并拼接立方的算数表达式,然后用+号拼接成完整算数表达式,运算结果如果等于数字本身,就输出。

上边这个完全等效于这个,输出的时候,我多输出了两个变量,可以方便的观察结果是否是预期的内容

for i in range(100,1000):
    a = [n+'**3' for n in str(i)]
    b = '+'.join(a)
    if eval(b)==i:
        print(a,b,i)

如果还不明白,可以看下边这个

for i in range(100,1000):
    a = []
    for n in str(i):
        a.append(n+'**3')
    b = '+'.join(a)
    if eval(b)==i:
        print(a,b,i)

几个遍历的方法,可以使用不同的语法进行缩减语句的

--------------

看错题了,从写一个

def isFlowerNumber(a):
    if len(str(a))!=3:
        return False
    return eval('+'.join([n+'**3' for n in str(a)]))==a

print(isFlowerNumber(155))

 

 最简单的代码如下:{如果对你有帮助,可以给我个采纳吗,谢谢!! 点击我这个回答右上方的【采纳】按钮}。

def pf(n):
    return 100<=n<=999 and sum([int(x)**3 for x in str(n)])==n

for i in range(500,0,-1):
    if pf(i):
        print(i)
        break

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632