皮皮~ 发表于 2017-4-1 16:40:05

python 009课后 求100~999水仙花数

for i in range (100,1000):
    temp = i
    sum = 0
    while temp:
      sum = sum + (temp%10)**3
      temp //= 10
    if sum == i:
      print (i)

小甲鱼的答案没看懂,求大神讲解{:9_221:}

lumber2388779 发表于 2017-4-1 17:10:28

sum = sum + (temp%10)**3 先将temp的每一位数取出 (temp%10) 计算其位数的3次方 算到总和sum里面,然后将temp //= 10 留下百位数和千位数,以此类推,到了只有个位数的时候temp //= 10不就是0嘛 while的条件是Temp 在编程中 0就是False 非0就是True ,跳出循环 ,这个时候sum就是各位数的3次方之和 与原本的数作比较 如果一致就是水仙花数

jerryxjr1220 发表于 2017-4-1 17:51:59

其实可以写成1行代码输出:
>>> print ) == i]

流月飞星 发表于 2017-4-1 18:48:51

temp%10 为取最后一位数,
temp //= 10 是去掉最后一位数

小书包 发表于 2017-4-3 10:24:40

本帖最后由 小书包 于 2017-4-3 10:26 编辑

for i in range (100,1000):#表示范围为100-999
    temp = i#temp用于接受i的个位,十位,百位
    sum = 0
    while temp:#第一次进入循环,取出个位。第二次进入循环,取出除以10以后的个位。这样类推
      sum = sum + (temp%10)**3#求余数,并开三次方
      temp //= 10#除以表示除出来的为整型,方便进行第二次的取出个位。
    if sum == i:
      print (i)
注释:
比如105
1.第一次进入while循环,求余数取出个位5,并给它三次开方,将值赋给sum。
2.然后105除以10,得到的是整型10。
3.10再次进入循环,求余数取出个位0,并给它三次开方,加上原来的sum,将值赋给sum。
4.最后再除以10,等于1,1跟10求余数,得到1,然后继续老步骤。这样就分别把1,0,5拿出来了,算好他们的三次开方的值,sum跟i相等就打印。这个就是水仙花数

还是鱼头好 发表于 2017-11-6 21:03:36

好难理解,先马住,这两天再仔细看一下QAQ

shinjohn 发表于 2020-7-25 18:08:12

for i in range(100,1000):
    if i == (int(str(i))**3+int(str(i))**3+int(str(i))**3):
      print(i,end=" ")
页: [1]
查看完整版本: python 009课后 求100~999水仙花数