鱼C论坛

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

[已解决]《零基础学python》关于水仙花数

[复制链接]
发表于 2018-8-25 11:22:33 | 显示全部楼层 |阅读模式

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

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

x
F4V][8G0XH)1(D1U[[FMCP8.png
不太理解这个while循环
sum是仅仅代表个位数的三次方吗?temp是表示该三位数中有几个十?
每次while循环时,sum=sum+(temp%10)**3中,等号右面的sum都等于零,还是和上次while进行后的sum有关?
谢谢大佬
最佳答案
2018-8-26 12:35:52
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://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-25 11:35:37 | 显示全部楼层
temp 一开始不为 0,所以会进入循环
sum 从 0 开始累加
temp%10 是把个位数给取出来   (153%10 = 3)
temp//10 是把个位数给删除       (153//10 = 15)
直到 temp == 0,跳出循环。后面用 if sum == each 判断
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-25 11:35:59 | 显示全部楼层
temp 一开始不为 0,所以会进入循环
sum 从 0 开始累加
temp%10 是把个位数给取出来   (153%10 = 3)
temp//10 是把个位数给删除       (153//10 = 15)
直到 temp == 0,跳出循环。后面用 if sum == each 判断
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-25 11:36:12 | 显示全部楼层
sum是个和,为了把各个位数立方求和,所以变量名都起了sum
temp每次不一样的,都地板除10,分别实现将个十百位立方加给sum
当temp为百位数时候再地板除10就是0了,while就退出,sum也不会多加东西
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-26 12:35:52 | 显示全部楼层    本楼为最佳答案   
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://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-26 22:50:07 | 显示全部楼层
geen 发表于 2018-8-26 12:35
while temp:
        sum = sum + (temp%10)**3
        temp = temp // 10

举例大法好
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-5 10:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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