鱼C论坛

 找回密码
 立即注册
查看: 1760|回复: 6

[已解决]求水仙花数的问题

[复制链接]
发表于 2018-1-24 18:16:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这是正确的代码:

  1. def myfun():
  2.     for each in range(100,1000):
  3.         sum = 0
  4.         temp = each
  5.         while temp:
  6.             sum = sum + (temp % 10)**3
  7.             temp = temp//10

  8.         if each == sum:
  9.             print(sum)

  10. myfun()
复制代码


请问为什么当我把sum = 0 拿到外面后反而就跑不出结果了呢?

  1. def myfun():
  2.     sum = 0
  3.     for each in range(100,1000):
  4.         temp = each
  5.         while temp:
  6.             sum = sum + (temp % 10)**3
  7.             temp = temp//10

  8.         if each == sum:
  9.             print(sum)

  10. myfun()
复制代码
最佳答案
2018-1-24 18:52:06
heywilliam 发表于 2018-1-24 18:34
我要求和的呀,不需要每次都把sum恢复到0

sum需要归零的,for 每循环一次都会代入一个数字进行:
sum = sum + (temp % 10)**3
            temp = temp//10
这两步的运算,如果sum==each,才会执行打印出sum,如果sum不等于each,则说明这个数字不是水仙数,现在for开始下一次循环,这个时候sum = 0这一步就是让sum归零,然后继续:
sum = sum + (temp % 10)**3
            temp = temp//10
这两步,代入下一个数字进行这两步的运算。而你把sum拿到for循环之外,这个数就没办法归零了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-1-24 18:20:50 | 显示全部楼层
每次循环 for each  sum = 0要初始化为0;
你拿到外面还怎么每次循环初始化为0
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2018-1-24 18:34:02 | 显示全部楼层
ba21 发表于 2018-1-24 18:20
每次循环 for each  sum = 0要初始化为0;
你拿到外面还怎么每次循环初始化为0

我要求和的呀,不需要每次都把sum恢复到0
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-24 18:52:06 | 显示全部楼层    本楼为最佳答案   
heywilliam 发表于 2018-1-24 18:34
我要求和的呀,不需要每次都把sum恢复到0

sum需要归零的,for 每循环一次都会代入一个数字进行:
sum = sum + (temp % 10)**3
            temp = temp//10
这两步的运算,如果sum==each,才会执行打印出sum,如果sum不等于each,则说明这个数字不是水仙数,现在for开始下一次循环,这个时候sum = 0这一步就是让sum归零,然后继续:
sum = sum + (temp % 10)**3
            temp = temp//10
这两步,代入下一个数字进行这两步的运算。而你把sum拿到for循环之外,这个数就没办法归零了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-1-24 18:57:11 | 显示全部楼层
我最怕起名字 发表于 2018-1-24 18:52
sum需要归零的,for 每循环一次都会代入一个数字进行:
sum = sum + (temp % 10)**3
            temp  ...

原来如此!!!看懂了,我的天啊这个小细节 T T
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-24 19:02:45 | 显示全部楼层
sum的求和这一步在while循环里就已经完成了,如果符合条件打印sum,如果不和符合则不打印。就是说当前运算的数字已经出了结果,它是不是一个水仙数我们都已经得出结果了,区别就是如果他是水仙数,我们就打印出来,如果不是就不打印,这个时候我们还要继续算剩下的数字是不是水仙数, temp = temp//10 这一步执行到最后都会使得while循环条件不成立而跳出while循环,进行for循环代入下一个需要运算的数字,for循环重新对temp进行赋值,使得其满足while循环的条件,sum之前得出的结果已经跟现在正在运算的数字没有任何关系了,所以在while循环之前就要归零
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-1-24 19:05:45 | 显示全部楼层
当each = 100,运行后sum = 1,如果你没有将sum初始化为0,
当each = 101,运行后sum = 3了(加上了上面100的1了),显然是错的。
所以每次都要初始化,不然得不到水仙花数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-6 07:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表