终于看懂了水仙花数的代码
本帖最后由 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里面,结果也是不报错的,就是答案错了,会把累加过程中相等的数也列出来
纠结了一会,自己一个个数字试,才发现这个问题,哎 可以直接在函数里的每一步插满打印,观察各个参数的赋值变化 这个代码太晦涩了 不太好理解 我也研究了半天 主要是地板除和余除还不是很熟,在加上循环赋值,有点懵 我是将数字变成字符串,在用for分来,来提取的个十百位数。
页:
[1]