编写一个自定义函数用于判断一个任意数是否是水仙花数,调用此函数找到并输出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