鱼C论坛

 找回密码
 立即注册
查看: 3283|回复: 14

[已解决]第9课的课后作业看不懂,求大大解答

[复制链接]
发表于 2017-3-15 17:57:42 | 显示全部楼层 |阅读模式

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

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

x
2017315-175446.jpg
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后面为什么这么编写啊,看不懂呢。后面那两句是什么意思啊
最佳答案
2017-3-16 00:53:59
本帖最后由 自然水 于 2017-3-16 01:03 编辑
  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)
复制代码


我们用大脑+笔来循环一下:
假设咱们i 循环到了153
第一轮while:

  1. sum = sum + (temp % 10) ** 3
  2. sum = 0 + (153 % 10 ) **3
复制代码

#这里,153%10 计算出了个位数,也就是3 ,那么 sum = 27

  1. temp //= 10
  2. # 将temp 进行10的底板除,并赋值到 temp
  3. #temp = 15
  4. #其实就是求得了前2位数
复制代码


第二轮while 因为  temp = 15 所以条件为真,继续循环
  1. sum = 27 + (15 % 10) ** 3   
  2. #咱们已知27是个位数的三次方,接着和十位数的三次方(15%10得到了5,也就是十位数) 进行相加 27+(5^3 =125) = 152  
  3. #(假设个位十位 百位,分别为 abc,那么现在已经完成了a^3 + b^3了)
  4. temp //= 10
  5. #上一轮测试中 temp = 15 , 15 // 10 = 1 (直接去除小数点后面的数值,求得了百位的数值)
复制代码


同上,因为while =1 所以条件成立,继续循环:
  1. sum = 152 + (1 % 10) ** 3     
  2. #我们现在加上c^3就可以啦!
  3. temp //= 10
  4. #1底板除为0 ,可以终止循环了。
复制代码


这时候 a + b + c 已经完成,且赋值到了sum ,如果 sum =  i 提取出来的数字,那么就是水仙花数啦~

应该很详细了吧? 求个最佳~
     
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-3-15 19:05:17 | 显示全部楼层
鱼c交流群,里面随时都有大神在,问问题随时都有回应:528770819
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-15 19:06:25 From FishC Mobile | 显示全部楼层
鱼c交流群,里面随时都有大神在,问问题随时都有回应:528770819
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-15 19:22:43 | 显示全部楼层

鱼c交流群,里面随时都有大神在,问问题随时都有回应:528770819

python5条水仙花的答案,还有谁!!!
5条答案都来自:528770819

下面是参考答案
http://www.lijinlong.cc/python/pyxt/1525.html

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

使用道具 举报

发表于 2017-3-15 19:24:22 | 显示全部楼层
小兔兔娃 发表于 2017-3-15 19:05
鱼c交流群,里面随时都有大神在,问问题随时都有回应:528770819

你是谁?为什么假冒妹子
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-15 19:37:26 | 显示全部楼层
李金龙 发表于 2017-3-15 19:24
你是谁?为什么假冒妹子

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

使用道具 举报

发表于 2017-3-15 20:04:48 | 显示全部楼层
temp % 10 是取余,也就是取他的个位数
(temp % 10) ** 3是他的三次方
temp //= 10 也就是temp = temp // 10地板除,就是去掉个位数
整个循环起来就是在取每个位的立方,然后加起来

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-3-15 20:35:11 | 显示全部楼层
Bruin 发表于 2017-3-15 20:04
temp % 10 是取余,也就是取他的个位数
(temp % 10) ** 3是他的三次方
temp //= 10 也就是temp = temp // ...

哎呀你说太详细了我都没有办法补充了~给你点个赞~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-15 20:44:36 | 显示全部楼层
可以给你另外一种方法,直接把3位数都取出来,然后3次幂相加
for i in range(100,1000):
百位数:a = i/100
十位数:b = i/10%10
个位数:c = i%10
    if i = a**3 + b**3 + c**3:
         print i
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-15 23:26:28 | 显示全部楼层
for i in range (100,1000):
    temp = i
    a = temp // 100
    b = (temp//10) % 10
    c = temp % 10
    sum = a ** 3 + b ** 3 + c ** 3
    if temp == sum:
        print (i)
这个好像也可以的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-16 00:53:59 | 显示全部楼层    本楼为最佳答案   
本帖最后由 自然水 于 2017-3-16 01:03 编辑
  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)
复制代码


我们用大脑+笔来循环一下:
假设咱们i 循环到了153
第一轮while:

  1. sum = sum + (temp % 10) ** 3
  2. sum = 0 + (153 % 10 ) **3
复制代码

#这里,153%10 计算出了个位数,也就是3 ,那么 sum = 27

  1. temp //= 10
  2. # 将temp 进行10的底板除,并赋值到 temp
  3. #temp = 15
  4. #其实就是求得了前2位数
复制代码


第二轮while 因为  temp = 15 所以条件为真,继续循环
  1. sum = 27 + (15 % 10) ** 3   
  2. #咱们已知27是个位数的三次方,接着和十位数的三次方(15%10得到了5,也就是十位数) 进行相加 27+(5^3 =125) = 152  
  3. #(假设个位十位 百位,分别为 abc,那么现在已经完成了a^3 + b^3了)
  4. temp //= 10
  5. #上一轮测试中 temp = 15 , 15 // 10 = 1 (直接去除小数点后面的数值,求得了百位的数值)
复制代码


同上,因为while =1 所以条件成立,继续循环:
  1. sum = 152 + (1 % 10) ** 3     
  2. #我们现在加上c^3就可以啦!
  3. temp //= 10
  4. #1底板除为0 ,可以终止循环了。
复制代码


这时候 a + b + c 已经完成,且赋值到了sum ,如果 sum =  i 提取出来的数字,那么就是水仙花数啦~

应该很详细了吧? 求个最佳~
     

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
李金龙 + 5 + 5 + 3 靠谱

查看全部评分

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

使用道具 举报

发表于 2017-3-16 08:24:03 | 显示全部楼层
Luse 发表于 2017-3-15 20:35
哎呀你说太详细了我都没有办法补充了~给你点个赞~

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

使用道具 举报

发表于 2017-3-16 08:25:51 | 显示全部楼层
很容易理解啊 sum+=(temp%10)**3这句话中temp%10是取余数  (temp%10)**3是余数的3次方 拿153举例子 就是3的3次方
temp//=10是地板除法 拿153举例子  商为15  此时temp就是15了  在while循环中直到temp为0时跳出循环  
if sum==i:就更好理解了  水仙花的判断条件  百位  十位  个位 分别三次方相加等于原数字本身   
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-16 09:05:30 | 显示全部楼层
注意地板除:目的在于与(temp%10)连起来使用三次,分别得到个,十,百,三位的数字。然后使用水仙花数的定义进行判断就好了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-16 10:24:14 | 显示全部楼层
自然水 发表于 2017-3-16 00:53
我们用大脑+笔来循环一下:
假设咱们i 循环到了153
第一轮while:

你这样一解释就明白了,谢谢各位大大,都好厉害
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-26 03:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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