水仙花数python代码多种方式_用多种方式打印输出“水仙花数”的思路讲解,Python编程百例实践...

今天,我们来和大家探讨一个入门级的话题:使用Python打印输出"水仙花数"

622762d0f703918f6ea759e5a0fe389058eec4f2.jpeg?token=667400beced7b10e89b1f149356658b0&s=6D24865400316E3C5E281C4C0300E0B0水仙花

所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。

e61190ef76c6a7ef59e078b40f39b156f1de66ad.jpeg?token=395df202dfd805aa5e22b6994bd2b632要用到公式

如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

01方法一:for循环打印输出(三位数组合遍历)

【思路】三位数中,每一位数的范围应该是0-9之间的数。我们遍历三位数中的每一位数字,当数字组合成三位数时符合水仙花数的条件时,将该数字打印输出。代码如下:

d043ad4bd11373f0211a670154cc55fcfaed0455.jpeg?token=b89b25221b431c24f5db2be6457bab60for循环打印输出水仙花数

for i in range(1,10):

for j in range(0,10):

for k in range(0,10):

if i*100+j*10+k==i**3+j**3+k**3:

print(i*100+j*10+k)

574e9258d109b3deb4b5bed93d7c7286810a4c47.jpeg?token=e0977d4c0294bce7e9fb19390210dd3e实现了

这样,我们可以轻松实现。具体输出如下:

>>>

153

370

371

407

那么,还有没有别的方法呢?答案是肯定的!往下看……

02方法二:for循环打印输出(三位数直接遍历)

上面是把三位数各个位数单独拿出来进行遍历,这样的话会有很多重复的组合,浪费时间(很难察觉),有没有好一点的for循环方案呢?

【思路】我们直接从100-999这些三位数中,将每个数字中个位、十位、百位数提取出来,按照水仙花数规则,将符合条件的三位数筛选出来即可。

代码如下:

f2deb48f8c5494eef635ba29dd36fef999257e31.jpeg?token=6c4413799cb826566c625b44c220b7edfor循环打印的另一种方式

for n in range(100,1000):

i = n // 100

j = n // 10 % 10

k = n % 10

if n == i ** 3 + j ** 3 + k ** 3:

print(n)

同样可以实现。

03方法三:for循环打印输出(三位数转化字符串遍历)

【思路】对于一个三位数是可以转化为字符串类型的,遍历转化后的每一个字符,将字符再转化为整数后,求各位的立方和,然后同三位数比较,如果相等则打印输出即可。

e850352ac65c10385da9bdad5dd28d14b27e89d0.jpeg?token=5dab4053884dd39770dada83b2bb74f4for循环遍历的另一种方式

for n in range(100,1000):

s = str(n)

sum_num = 0

for i in s:

sum_num += int(i) ** 3

if sum_num == n:

print(n, end='')

这种方式也可以实现同样的效果。

04方法四:更加Pythonic表示

【思路】我们把方法三中的写法变得更加Pythonic一点

来看下代码:

9825bc315c6034a87ddce6b43bd0575309237617.jpeg?token=466e59442053bdda894d1cc5e2ad1937另一种表示

for i in range(100,1000):

if sum(pow(int(d), 3) for d in str(i)) == i:

print(i, end='\t')

轻松实现效果。为了避免重复代码,上述代码中截图有可能和后面代码内容不一致;再者,贴上代码方便大家复制粘贴测试,截图方便代码对齐。

05这就完了?

这还远远不够,我们知道,水仙花数是自幂数的一种,它也叫阿姆斯特朗数。对于自幂数的打印输出,还有很多内容哦,如何使用Python实现呢?我们下一篇内容会有所涉及,大家关注我,后续提供更加精彩的内容。

8435e5dde71190efedf7452d21d88311fcfa607b.jpeg?token=70e979945b4242817c540111606b360c&s=FA22A246C48236F45FEA040F0300E0CA

欢迎大家留言讨论,转载请注明出处,百家号:Python高手养成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值