解水仙花数求助
求水仙花数这个帖子看不太懂诶,麻烦理解的鱼油讲解一下呗for i in range(100, 1000):
sum = 0
temp = i
while temp:
sum = sum + (temp%10) ** 3
temp //= 10 # 注意这里要使用地板除哦~
if sum == i:
print(i) 我也是新人,昨晚做了这个。
我的理解就是通过把 i 除以 10 求余数,得到个位数
循环三次得到个、十、百位数(中间用地板除把比如153变成15方便求下一位)
但是我也想问的是为什么一开始要sum=0 因为最后打印的是i,sum只是一个测试它是不是水仙花数的变量
所以用完后必须要重新赋值为0 本帖最后由 jackz007 于 2020-2-17 16:48 编辑
本题对初学者而言,不太好理解的是 while temp 循环,这里把它展开,因为 i 是 3 位数,所以,会循环 3 次,循环体中的语句也会执行 3 次:
for i in range (100 , 1000):
sum = 0
temp = i
sum = sum + (temp % 10) ** 3 # (temp % 10) 得到 i 的个位
temp = temp // 10 # temp = i // 10,i 的个位被舍弃,i 的百位、十位依序变为 temp 的十位、个位
sum = sum + (temp % 10) ** 3 # (temp % 10) 得到 i 的十位
temp = temp // 10 # temp = i // 100,i 的十位、个位被舍弃,i 的百位变为 temp 的个位
sum = sum + (temp % 10) ** 3 # (temp % 10) 得到 i 的百位
temp = temp // 10 # temp 的值为 0
if i == sum:
print(i) jackz007 发表于 2020-2-17 16:45
本题对初学者而言,不太好理解的是 while temp 循环,这里把它展开,因为 i 是 3 位数,所以,会循 ...
谢谢老哥 jackz007 发表于 2020-2-17 16:45
本题对初学者而言,不太好理解的是 while temp 循环,这里把它展开,因为 i 是 3 位数,所以,会循 ...
为什么会循环3次啊 不是100-999吗,扎心我还是没看懂…… 这个答案超赞 jackz007 发表于 2020-2-17 16:45
本题对初学者而言,不太好理解的是 while temp 循环,这里把它展开,因为 i 是 3 位数,所以,会循 ...
谢谢讲解,明白啦
你知道吗我会 发表于 2020-2-17 18:03
为什么会循环3次啊 不是100-999吗,扎心我还是没看懂……
我的理解是:
因为是三位数,比如i=153,赋值给 temp,
第一次while循环:temp%10得到3,然后sum=3**3=27,然后153地板除10后为15
进入第二次循环,此时temp%10即15%10等于5,然后sum=27 + 5**3=152,然后15地板除10后为1
进入第三次循环,此时temp%10即1%10等于5,然后sum=152 + 1=153,然后1地板除后为0
因为此时temp值为0,即代表"False",而while False会终止循环,所以一共循环3次 酒醉三分醒 发表于 2020-2-17 22:52
我的理解是:
因为是三位数,比如i=153,赋值给 temp,
第一次while循环:temp%10得到3,然后sum=3**3= ...
终于懂了!感谢!!!
页:
[1]