loster0219 发表于 2018-12-12 15:51:54

终于看懂了水仙花数的代码

本帖最后由 loster0219 于 2018-12-12 16:25 编辑

def sxh():
    for i in range(100, 1000): #100-999
      sum = 0 # 定义一个变量,收集各个位数的立方和
      temp = i #定义一个temp用作运算,i原封不动用来比较
      while temp:
            sum = sum + (temp % 10) ** 3 # 累加  
            temp //= 10 # 地板除,剥离出这个三位数的个位,十位,百位
      if sum == i:
                print(i)


整个循环过程就是这样的,用print一步一步打出来看

print((153%10)**3) #结果27,赋值给sum,往下走,

print(153//10) # temp //= 10 结果15,temp=15

print((15%10)**3) #结果125 sum之前=27,累加125,等于152,往下执行

print(15//10)# temp //= 10 结果1 temp=1

print((1%10)**3) #结果1 sum之前=152,累加之后,153

拆解出来就很好理解了

这里有个坑我踩了很久,就是 if sum == i: 这一句,之前我写错了缩进,放在里while里面,结果也是不报错的,就是答案错了,会把累加过程中相等的数也列出来

纠结了一会,自己一个个数字试,才发现这个问题,哎

xy123151 发表于 2018-12-13 09:47:23

可以直接在函数里的每一步插满打印,观察各个参数的赋值变化

POWO 发表于 2018-12-13 16:33:36

这个代码太晦涩了 不太好理解 我也研究了半天 主要是地板除和余除还不是很熟,在加上循环赋值,有点懵

万驼奔腾 发表于 2018-12-14 23:35:00

我是将数字变成字符串,在用for分来,来提取的个十百位数。
页: [1]
查看完整版本: 终于看懂了水仙花数的代码