鱼C论坛

 找回密码
 立即注册
查看: 3334|回复: 5

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

[复制链接]
发表于 2018-9-6 22:06:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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
最佳答案
2018-9-7 15:24:26
这段代码是解释水仙花数的,建议你论坛内搜一搜很多答案,附上一条大神的回答。
  1. while temp:
  2.         sum = sum + (temp%10)**3
  3.         temp = temp // 10

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

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

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

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

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

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

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

以上内容来自此链接的最佳答案https://fishc.com.cn/forum.php?m ... =%CB%AE%CF%C9%BB%A8
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 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 判断
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-7 15:24:26 | 显示全部楼层    本楼为最佳答案   
这段代码是解释水仙花数的,建议你论坛内搜一搜很多答案,附上一条大神的回答。
  1. while temp:
  2.         sum = sum + (temp%10)**3
  3.         temp = temp // 10

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

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

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

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

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

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

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

以上内容来自此链接的最佳答案https://fishc.com.cn/forum.php?m ... =%CB%AE%CF%C9%BB%A8
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-7 18:08:13 | 显示全部楼层
Augustmoon 发表于 2018-9-7 09:21
#解释如下:
for i in range(100, 1000):   #这里进行循环,i 的取值为:100到999之间
    sum = 0     # ...

不太理解,为什么这样就求出 水仙花数了  能说明下吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢 我看看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-5 05:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表