python3 水仙花数练习题


  近期在学习Python的过程中,有一道题:

题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

这是一道经典的for循环遍历的题,其中涉及到几个数学运算符,先来复习下:

运算符 描述 实例
+ 加 - 两个对象相加 a + b 输出结果 30
- 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10
* 乘 - 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 200
/ 除 - x除以y b / a 输出结果 2
% 取模 - 返回除法的余数 b % a 输出结果 0
** 幂 - 返回x的y次幂 a**b 为10的20次方, 输出结果 100000000000000000000
// 取整除 - 返回商的整数部分 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0

  然后就是怎么实现的问题了:

1 from math import floor
2 for i in range(100,1000):
3     H = floor(i/100)
4     T = (floor(i/10))%10
5     N = i%10
6     if i==H**3+T**3+N**3:
7         print(i,‘\t’,H**3,T**3,N**3)

执行结果为:

153   1 125 27
370    27 343 0
371    27 343 1
407   64 0 343

   但是查看别人写的代码发现,执行的结果为空,这是为何呢?是因为没有导入math模块吗?

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)

  我们可以一步步来分析下,输出为空。。。

在代码中间输出i的值执行看看结果

for n in range(100,1000):
    i=n/100
    j=n/10%10
    k=n%10
    print(i)
    if n==i**3+j**3+k**3:
        print(n)

执行查看就会发现i这个值是浮点数,所以后面的计算就会出错,且不是我们需要的数值。那么怎么办呢?python中除法取整有以下几个方法:

内置函数round(),向上取整math.ceil(),向下取整math.floor(),如果你不想使用上诉几个方法,你可以这样:

for n in range(100,1000):
    i=int((n/100))
    j=int(n/10)%10
    k=n%10
    if n==i**3+j**3+k**3:
        print(n)

  这样,就可以正确输出了。。。

  bingo.

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM