趣味编程(一)python水仙花数易错点

山不厌高,水不厌深。每天跟着公众号学习一点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.com/zh/

2 https://www.pexels.com

3 https://picjumbo.com

4 https://fancycrave.com

5 https://www.foodiesfeed.com

6 https://www.pakutaso.com

7 https://isorepublic.com

参考来源:百度百科

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值