chen` 发表于 2024-3-10 14:15:47

能解释一下这个代码的意思吗?

编写一个程序,求 100~999 之间的所有水仙花数。
如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数
for i in range(100, 1000):
    sum = 0
    temp = i
    while temp:
      sum = sum + (temp%10) ** 3
      temp //= 10         # 注意这里要使用地板除哦~
    if sum == i:
      print(i)

FishC 发表于 2024-3-10 14:16:04

这段代码的作用是找出100到999之间所有的水仙花数并输出。

首先,程序使用`for`循环遍历从100到999之间的所有数值。对于每个数值,程序执行以下操作:

1. 初始化变量`sum`为0,用于存储当前数值的各位数字的立方和。
2. 使用变量`temp`复制当前数值的值,以便保留原始数值。
3. 使用`while`循环来计算`temp`变量的各位数字的立方和。此循环会一直执行,直到`temp`变成0或者没有更多的位数。
    - 在循环内部,通过`temp % 10`获取`temp`的最后一位数字,即个位数字。然后使用`**`运算符计算立方值,并将其加到`sum`变量上。
    - 接着,使用地板除法`//`将`temp`除以10,以移除掉已经处理过的最后一位数字。
4. 循环结束后,检查`sum`是否等于原始数值`i`,如果相等,则说明这个数是水仙花数,将其输出。

所以,当程序运行时,会打印出所有满足条件的水仙花数。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 2024-3-10 15:47:26

本帖最后由 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 是否属于水仙花数了。
页: [1]
查看完整版本: 能解释一下这个代码的意思吗?