Lambertliu 发表于 2018-9-6 22:06:32

哪位师傅能给讲讲这段python代码啊,看半天了,都不太理解

本帖最后由 Lambertliu 于 2018-9-6 23:53 编辑

for i in range(100, 1000):
    sum = 0
    temp = i
    while temp:
      sum = sum + (temp%10) ** 3
      temp //= 10
    if sum == i:
      print(i)

特别是
这段
while temp:
      sum = sum + (temp%10) ** 3
      temp //= 10

claws0n 发表于 2018-9-7 00:23:18

【水仙花数】
temp 一开始不为 0,所以会进入循环
sum 从 0 开始累加
temp%10 是把个位数给取出来   (153%10 = 3)
temp//10 是把个位数给删除       (153//10 = 15)
直到 temp == 0,跳出循环。后面用 if sum == i 判断

Augustmoon 发表于 2018-9-7 09:21:12

#解释如下:
for i in range(100, 1000):   #这里进行循环,i 的取值为:100到999之间
    sum = 0   #将0赋值给sum
    temp = i   #将 i 赋值给temp
    while temp:   #这里又进入一个循环,即当temp不为0的时候循环进行下面的语句(可以了解一下python中几种为False的情况)
      sum = sum + (temp%10) ** 3      #这里给sum重新赋值,因为上面已经将 i 赋值给temp了,所以(temp%10)**3可以理解成 将 i %10 取模后立方      
      temp //= 10   #这里是简写,等于 temp = temp // 10, 将temp取模再次赋值给temp。 然后while循环进行判断temp的值,如果temp != 0,继续循环while里面的语句;如果temp == 0,退出while循环,进行下面的if语句
    if sum == i:
         print(i)

小污堆 发表于 2018-9-7 15:24:26

这段代码是解释水仙花数的,建议你论坛内搜一搜很多答案,附上一条大神的回答。while temp:
      sum = sum + (temp%10)**3
      temp = temp // 10

这段代码的作用,举例: temp 取值153,sum 的值为0,

第1次循环:
sum = sum + (temp%10)**3    # sum = 0+(3)**3
temp = temp // 10                   # temp = 153//10 = 15

第2次循环:(此时,sum = 27,temp=15)
sum = sum + (temp%10)**3    # sum = 27+(5)**3
temp = temp // 10                   # temp = 15//10 = 1

第3次循环: (此时,sum=152,temp=1)
sum = sum + (temp%10)**3    # sum = 152+(1%10)**3=152+(1)**3=153
temp = temp // 10                   # temp = 1//10 = 0

第4次循环: (此时,sum=153,temp =0),注意,while temp:   等于 while 0:
0即是False,不再执行循环体。

总结: sum = sum +(temp%10)**3,这个式子是为了累积 以 temp为变量的值,每执行一次循环,累计一次,而 temp%10(取余,除以10,就是取末尾的数字),目标是把temp里的每一个数字都分别取出来;

temp = temp // 10,这个式子,是给sum = sum +(temp%10)**3, 提供可取余数的被除数。

以上内容来自此链接的最佳答案https://fishc.com.cn/forum.php?mod=viewthread&tid=121058&highlight=%CB%AE%CF%C9%BB%A8

Lambertliu 发表于 2018-9-7 18:08:13

Augustmoon 发表于 2018-9-7 09:21
#解释如下:
for i in range(100, 1000):   #这里进行循环,i 的取值为:100到999之间
    sum = 0   # ...

不太理解,为什么这样就求出 水仙花数了能说明下吗

Lambertliu 发表于 2018-9-7 20:39:12

小污堆 发表于 2018-9-7 15:24
这段代码是解释水仙花数的,建议你论坛内搜一搜很多答案,附上一条大神的回答。
以上内容来自此链接的最佳 ...

谢谢 我看看
页: [1]
查看完整版本: 哪位师傅能给讲讲这段python代码啊,看半天了,都不太理解