山不厌高,水不厌深。每天跟着公众号学习一点python小知识,仅仅占用几分钟时间。那么一个月,一年,两年......你就成为python大牛啦
水仙花数是练习python编程是非常常见的一种练习。水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。(百度百科)
这种题目看似简单,其实非常容易出错。下面就是非常典型的错误情况。这种情况下,根本不会找到水仙花数。
for n in range(100,1001):
i = n / 100
j = (n / 10 )% 10
k = n % 10
if n== i **3+ j ** 3 + k ** 3:
print(n)
那么问题出在哪里呢?告诉大家一个简单的调试方法。我怀疑是i,j,k取值有问题,但是不敢确定,那么我们就设置一个n=345。运行得出i,j,k的三行代码。发现结果和我们需要的不一样。
这样,我们就发现了问题的来源,我们提取每个“位”的数值时有错误,那么我们就重新写代码提取那些数值。从输出结果来看,问题的关键在于没有定义i,k,j的数据类型。我们应该把这些数据定义为整形。这样就可以进行取余运算了。
for n in range(100,1001):
i =int( n / 100)
j = int(int(n/10)%10)
k =int( n % 10)
if n== i **3+ j ** 3 + k ** 3:
print(n)
看,我们顺利得到了结果。为什么呢?因为我们用int做了强制类型转化,把没有定义数据类型的i,j,k转化为了整形。这样就可以取余运算了。
所以大家在运算中一定要注意数据的类型。必要的时候可以进行数据类型的转换。
扫描二维码关注公众号
图片与资源来源网站:
1 https://pixabay/zh/
2 https://www.pexels
3 https://picjumbo
4 https://fancycrave
5 https://www.foodiesfeed
6 https://www.pakutaso
7 https://isorepublic
参考来源:百度百科
更多推荐
趣味编程(一)python水仙花数易错点
发布评论