鱼C论坛

 找回密码
 立即注册
查看: 853|回复: 9

[已解决]《零基础入门python》第009讲动动手第1题

[复制链接]
发表于 2018-3-20 16:30:11 | 显示全部楼层 |阅读模式

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

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

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)
复制代码


小白求大神解释一下这段代码,看了好久还是一脸懵
谢谢大家了
最佳答案
2018-3-20 17:54:52
我今天也看了很久,主要是wihle循环
while temp:
        sum = sum + (temp%10) ** 3
        temp //= 10

代码解释,假设这个数为153: 
                循环1:temp=153
                153 % 10 = 3 #求出 153的个位
                3 ** 3 = 27 
                153 // 10 = 15 #去掉 153的个位
                循环2:temp=15
                15 % 10 = 5 #求出 15个位
                5 ** 3 = 125
                15 // 10 = 1 #去掉 15的个位
                循环3:temp=1
                1 % 10 = 1 # 求出1的个位
                1 ** 3 = 1
                1 // 10 = 0 # 去掉 1的个位
循环4:temp=0 退出循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-20 16:43:38 | 显示全部楼层
遍历100到1000的每个数i,先对这个数i进行求余操作,求出的就是它的个位数,立方后加到sum上。
再对这个数地板除10,这样做可以把i的个位数剔除,所以在进行一次求余就可以得到这个数的十位数,立方后加到sum上。
同理sum再加一次百位数的立方,如果最后sum等于i,说明这个数是水仙花数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-20 16:49:10 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-20 17:44:44 | 显示全部楼层
while 循环,只要temp!=0,就会一直进行。例如i =abc,第一次运行sum = sum + (temp%10) ** 3,求出的是个位数的立方,也就是c^3,然后temp //= 10,地板除,消除个位数,得到 ab.因为ab不等于0,所以继续while循环。第二次运行sum = sum + (temp%10) ** 3,得到十位数,也就是b^3,然后地板除,得到a,继续while循环。这时sum = sum + (temp%10) ** 3得到的是a^3,然后地板除,结果为零,跳出while。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-20 17:54:52 | 显示全部楼层    本楼为最佳答案   
我今天也看了很久,主要是wihle循环
while temp:
        sum = sum + (temp%10) ** 3
        temp //= 10

代码解释,假设这个数为153: 
                循环1:temp=153
                153 % 10 = 3 #求出 153的个位
                3 ** 3 = 27 
                153 // 10 = 15 #去掉 153的个位
                循环2:temp=15
                15 % 10 = 5 #求出 15个位
                5 ** 3 = 125
                15 // 10 = 1 #去掉 15的个位
                循环3:temp=1
                1 % 10 = 1 # 求出1的个位
                1 ** 3 = 1
                1 // 10 = 0 # 去掉 1的个位
循环4:temp=0 退出循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-20 19:36:13 | 显示全部楼层
lh8877210 发表于 2018-3-20 17:54
我今天也看了很久,主要是wihle循环
while temp:
        sum = sum + (temp%10) ** 3

非常感谢您的帮助,解释的很清楚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-20 19:36:48 | 显示全部楼层
Z同学 发表于 2018-3-20 17:44
while 循环,只要temp!=0,就会一直进行。例如i =abc,第一次运行sum = sum + (temp%10) ** 3,求出的是个位 ...

真的很感谢您的帮助,现在我能看懂了,谢谢您
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-20 19:37:48 | 显示全部楼层
Luke李 发表于 2018-3-20 16:43
遍历100到1000的每个数i,先对这个数i进行求余操作,求出的就是它的个位数,立方后加到sum上。
再对这个数 ...

非常感谢您的帮助,真的很感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-20 19:41:09 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-18 12:46:56 | 显示全部楼层
这个题目就是几位数的每一位数进行立方再相加等于这个几位数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 23:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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