中华小鬼 发表于 2020-3-20 15:56:42

关于求 100~999 之间的所有水仙花数的程序解读。

for i in range(100, 1000):
    sum = 0
    temp = i
    while temp:
      sum = sum + (temp%10) ** 3
      temp //= 10         # 注意这里要使用地板除哦~
    if sum == i:
      print(i)

我是零基础学python,上述代码中,有几个问题,请大神勿嘲笑帮解读。

1. temp = i中,i在python里为一个正整数吗?sum = sum + (temp%10) ** 3中用temp,不用i,我记得有的代码是用i啊!

2.sum = sum + (temp%10) ** 3
      temp //= 10         # 注意这里要使用地板除哦

   这两行代码是核心,可我理解不了。=两边的sum肯定不是同一个数,分别代表什么意思?

3.   问题2中 代码的运算方式也无法理解。举个例子,153吧!153%10=3,这里边只有3的三次方啊。下边那行代码中,153//10=15,这个15应该在运算一次,15//10=1,完全没有提出来5啊。
      即便这三个数字都提出来,又是怎么进入计算的?

如果可以帮助我理解,我一定会设为最佳答案的。

qiuyouzhi 发表于 2020-3-20 16:01:40

1,i是一个正整数,temp=i,所以temp也是正整数,之所以要用这个temp,就是为了保护i,防止i被改变
2,sum就是一个数,先把右边的执行完,再赋值给左边
3,不是有while temp嘛,先取出来一位乘上3次方,再扔掉这一位,之后只要temp还在就继续判断

qiuyouzhi 发表于 2020-3-20 16:06:52

我可能解释的不够清楚,这里放两个链接:
https://fishc.com.cn/forum.php?mod=viewthread&tid=159491&highlight=Python%2BFAQ%2B%CB%AE%CF%C9%BB%A8%CA%FD
(我写的{:10_278:},有问题可以先来这里面找找)
https://fishc.com.cn/forum.php?mod=viewthread&tid=126088&highlight=%CB%AE%CF%C9%BB%A8%CA%FD

中华小鬼 发表于 2020-3-20 16:14:33

qiuyouzhi 发表于 2020-3-20 16:01
1,i是一个正整数,temp=i,所以temp也是正整数,之所以要用这个temp,就是为了保护i,防止i被改变
2,sum ...

2. 这个是不是与a=a+1类似。a=a+1的结果是一直递增吗?
3.我尝试举例解读一下。首先153%10=3;其次153进入代码 temp //= 10 中,153//10=15,这个15会自动进入上一行代码中,会什么会返回到上一个代码?得到15%10=5;然后15再进入下一行代码中,15//10=1,1再进入上一行代码中,而且不执行1%10运算,这又是为什么?求解答?

qiuyouzhi 发表于 2020-3-20 16:17:57

中华小鬼 发表于 2020-3-20 16:14
2. 这个是不是与a=a+1类似。a=a+1的结果是一直递增吗?
3.我尝试举例解读一下。首先153%10=3;其次153进 ...

2,是的,会一直递增
3,有一个循环用于控制(while temp)
但为什么不执行呢?你可以打印一下试试

2549284557 发表于 2020-3-20 17:43:43

我发过类似的帖子
页: [1]
查看完整版本: 关于求 100~999 之间的所有水仙花数的程序解读。