本帖最后由 jackz007 于 2024-3-10 15:57 编辑
现在考察这部分代码: sum = 0
temp = i
while temp:
sum = sum + (temp%10) ** 3
temp //= 10 # 注意这里要使用地板除哦~
if sum == i:
print(i)
假设当前 i = 385
看看是如何判断的sum = 0 # 累加前,先对累加器清零
temp = i # 因为变量 i 后面还要用,所以,给其找个替身 temp
while temp : # temp = 385 条件满足,进入循环
sum = sum + (temp % 10) ** 3 = 0 + (385 % 10) ** 3 = 0 + 5 ** 3 = 125
temp = temp // 10 = 385 // 10 = 38
while temp : # temp = 38 条件满足,继续循环
sum = sum + (temp % 10) ** 3 = 125 + (38 % 10) ** 3 = 125 + 8 ** 3 = 125 + 512 = 637
temp = temp // 10 = 38 // 10 = 3
while temp : # temp = 3 条件满足,继续循环
sum = sum + (temp % 10) ** 3 = 637 + (3 % 10) ** 3 = 637 + 3 ** 3 = 637 + 27 = 664
temp = temp // 10 = 3 // 10 = 0
while temp : # temp = 0 , 条件不再满足,循环结束
if sum == i : # sum = 664 , i = 385, 条件不成立,所以,385 不是一个水仙花数。
可见,当 i = 385 时,while temp 一共循环了三次,第一次,sum = 5 ** 3 ,第二次,sum = 5 ** 3 + 8 ** 3,第三次,sum = 5 ** 3 + 8 ** 3 + 3 ** 3,循环结束后,直接判断 i 与 sum 是否相等,便可以确定 i 是否属于水仙花数了。 |