水仙花数是指一个n位数(n>=3),它的每个位上的数字的n次幂之和等于它本身输出所有三位水仙花的数
for i in range(100, 1000):
if i == sum(map(lambda x:int(x)**3, str(i))):
print(i)
有4个三位水仙花数
153
370
371
407
def sxh(x):
b = int(x) // 100
s = int(x) // 10 % 10
g = int(x) % 10
if b ** 3 + s ** 3 + g ** 3 == x:
return True
else:
return False
sxh = sxh(int(input("请输入水仙花数:")))
if sxh:
print('是水仙花数')
else:
print('不是水仙花数')
我可以给出以下解决方案:
# 方法一:遍历所有三位数,判断是否满足水仙花数的定义
for num in range(100, 1000):
digit_sum = sum(int(digit) ** 3 for digit in str(num))
if digit_sum == num:
print(num)
方法一是比较直接的遍历所有三位数,对每个数判断是否满足水仙花数的定义,如果是就输出。这里利用了 Python 的 str 类型和生成器表达式,让代码更加简洁。
# 方法二:使用列表推导式一次生成所有符合条件的数
result = [num for num in range(100, 1000) if sum(int(digit) ** 3 for digit in str(num)) == num]
print(result)
方法二是一次生成所有符合条件的数,并存放在列表 result 中,使用了列表推导式。
两种方法的输出都是:
153
370
371
407
这些数是满足水仙花数定义的所有三位数,可以手动验证。