鱼C论坛

 找回密码
 立即注册
查看: 2360|回复: 6

[已解决]一段代码不明白这么写的意思是什么

[复制链接]
发表于 2017-6-16 21:49:16 | 显示全部楼层 |阅读模式

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

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

x
  1. for i in range(100, 1000):
  2.     sum = 0
  3.     temp = i
  4.     while temp:
  5.         sum = sum + (temp%10) ** 3
  6.         temp //= 10         # 注意这里要使用地板除哦~
  7.     if sum == i:
  8.         print(i)
复制代码

小甲鱼老师的这一段代码看的不是很明白,求水仙花数的问题,就是这一段代码没有看明白为么时这样表示:
while temp:
        sum=sum+(temp%10)**3
        temp//=10#个人理解:temp=temp//10
求大神解答,看了答案还没看懂很无奈
最佳答案
2017-6-17 11:57:54
本帖最后由 nano_core 于 2017-6-17 12:02 编辑

while temp:    #当temp不为零(即还有需要计算的数位)
        sum=sum+(temp%10)**3     #在和总数的记录中加上temp的个位的立方
        temp//=10#个人理解:temp=temp//10     
                         #理解没有问题,使用地板除,令temp变为temp/10的商数。
                                 示例:209//10 即 209->20.9->20(地板除,结果取更小的整数。)

一套算法跑下来,sum就是从个位到最高位所有数位上数字立方的和。
在整个过程中,temp是变化的,这种变化是被允许的。
是水仙花数的条件是sum==i(过程中i不变,一直是所判断数字),这符合水仙花数的定义,每位数字立方的和等于本身
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-6-16 21:54:32 | 显示全部楼层
第一句是把temp的最后1位数字立方 加入sum
第二句是把temp的最后一位数字去掉。
如此循环到temp没有数字。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-16 22:05:20 | 显示全部楼层
就是temp=temp//10, 你理解的没错。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-16 22:29:27 | 显示全部楼层
ooxx7788 发表于 2017-6-16 21:54
第一句是把temp的最后1位数字立方 加入sum
第二句是把temp的最后一位数字去掉。
如此循环到temp没有数字 ...

我是没有看懂这个思路,为什么这样子表达可以求出水仙数,水仙数是一个三位数,各个数字的三次方的合吗?您的意思是:每次循环都会有一个数字,然后这个数字会和下面的数字相加,然后得出了temp=i的时候打印出来是吗?我数学不好
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-17 08:34:18 | 显示全部楼层
忽视 发表于 2017-6-16 22:29
我是没有看懂这个思路,为什么这样子表达可以求出水仙数,水仙数是一个三位数,各个数字的三次方的合吗? ...

因为水仙花数的要求就是每一位数字的立方之和等于本数嘛。
http://pythontutor.com/visualize.html#mode=edit
如果再不能理解,就把你的代码复制到以上链接中去
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-17 10:24:44 | 显示全部楼层
大胆理解 temp 弄成一个变量  进过一系列运算后还等于他自身

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +2 收起 理由
忽视 + 5 + 5 + 2 多谢您的解答

查看全部评分

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

使用道具 举报

发表于 2017-6-17 11:57:54 | 显示全部楼层    本楼为最佳答案   
本帖最后由 nano_core 于 2017-6-17 12:02 编辑

while temp:    #当temp不为零(即还有需要计算的数位)
        sum=sum+(temp%10)**3     #在和总数的记录中加上temp的个位的立方
        temp//=10#个人理解:temp=temp//10     
                         #理解没有问题,使用地板除,令temp变为temp/10的商数。
                                 示例:209//10 即 209->20.9->20(地板除,结果取更小的整数。)

一套算法跑下来,sum就是从个位到最高位所有数位上数字立方的和。
在整个过程中,temp是变化的,这种变化是被允许的。
是水仙花数的条件是sum==i(过程中i不变,一直是所判断数字),这符合水仙花数的定义,每位数字立方的和等于本身

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
忽视 + 5 + 5 + 3 感谢楼主无私奉献!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-28 01:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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