鱼C论坛

 找回密码
 立即注册
查看: 1586|回复: 16

[已解决]第九课 求水仙花数 跪求注释 ///还有帮忙普及一下in 和 range的用法 作用 没有理解

[复制链接]
发表于 2018-1-10 21:52:49 | 显示全部楼层 |阅读模式

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

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

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


第九课 求水仙花数 跪求注释 ///还有帮忙普及一下in  和 range的用法 作用 没有理解
最佳答案
2018-1-10 23:10:50
比如水仙花数:153
①temp=153,sum=(153%10)**3=27,(个位的三次方)temp=153//10=15
②temp=15,sum=27+(15%10)**3=152,(个位+十位的三次方)temp=15//10=1
③temp=1,sum=152+(1%10)**3=153,(个位+十位+百位的三次方)temp=1//10=0
④temp=0循环结束
temp//10让其位数向左移动一位,然后对其进行三次方运算,并且当temp=0也是while循环语句的结束标志
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-10 21:58:26 | 显示全部楼层
本帖最后由 影-死神 于 2018-1-10 21:59 编辑

in 和 for 语句配合使用,表示从一个迭代器中依次取出一个值,
内置函数range()
        语法:range( [strat], stop, [step=1])
        --这个BIF有三个参数,其中用中括号括起来的两个表示这两个参数是可选的。
        --step=1表示第三个参数的值默认是1,是步径,即每次增加的值
        --range这个BIF的作用是生成一个从start参数的值开始到stop参数的值结束的数字序列。
迭代器,大概有字符串,列表,字典,集合,元组
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-10 22:08:40 | 显示全部楼层
影-死神 发表于 2018-1-10 21:58
in 和 for 语句配合使用,表示从一个迭代器中依次取出一个值,
内置函数range()
        语法:range( [strat], s ...

。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-10 22:34:43 | 显示全部楼层
类似C语言里的
  1. for(x=min; x<=max; x++)
复制代码
  1. for i in range(10):
  2.      语句
复制代码

就是i=0的时候执行一次语句,i=1的时候执行一次语句,以此类推
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-10 22:50:59 | 显示全部楼层
屁哥 发表于 2018-1-10 22:08
。。。。。。。

没懂?
这里 i 表示从100到1000(不包含)的每个数,最开始 i 是100,每次循环 i 增加一
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-10 22:55:18 | 显示全部楼层
range(start, stop[, step]) -> range object,根据start与stop指定的范围以及step设定的步长

>>> for x in range(5, 10):
        print(x)

       
5
6
7
8
9
>>>

>>> for x in range(5, 10, 2):
        print(x)

       
5
7
9
>>>

QQ截图20180110225241.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-10 23:10:50 | 显示全部楼层    本楼为最佳答案   
比如水仙花数:153
①temp=153,sum=(153%10)**3=27,(个位的三次方)temp=153//10=15
②temp=15,sum=27+(15%10)**3=152,(个位+十位的三次方)temp=15//10=1
③temp=1,sum=152+(1%10)**3=153,(个位+十位+百位的三次方)temp=1//10=0
④temp=0循环结束
temp//10让其位数向左移动一位,然后对其进行三次方运算,并且当temp=0也是while循环语句的结束标志
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-10 23:12:50 | 显示全部楼层
影-死神 发表于 2018-1-10 22:50
没懂?
这里 i 表示从100到1000(不包含)的每个数,最开始 i 是100,每次循环 i 增加一

temp % 10 得到的是temp这个值的个位数字,比如 111 % 10 == 1,234 % 10 == 4
sum = sum + (temp%10) ** 3
        temp //= 10

这两句  没理解  为什么  111%10 ==1 还是各位数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-10 23:15:14 | 显示全部楼层
zero月蚀的假面 发表于 2018-1-10 23:10
比如水仙花数:153
①temp=153,sum=(153%10)**3=27,(个位的三次方)temp=153//10=15
②temp=15,sum=27+ ...

temp % 10 得到的是temp这个值的个位数字,比如 111 % 10 == 1,234 % 10 == 4
sum = sum + (temp%10) ** 3
        temp //= 10

这两句  没理解  为什么  111%10 ==1 还是各位数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-10 23:15:46 | 显示全部楼层
raimond 发表于 2018-1-10 22:55
range(start, stop[, step]) -> range object,根据start与stop指定的范围以及step设定的步长

>>> for  ...

temp % 10 得到的是temp这个值的个位数字,比如 111 % 10 == 1,234 % 10 == 4
sum = sum + (temp%10) ** 3
        temp //= 10

这两句  没理解  为什么  111%10 ==1 还是各位数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-10 23:23:59 | 显示全部楼层
本帖最后由 zero月蚀的假面 于 2018-1-10 23:25 编辑
屁哥 发表于 2018-1-10 23:12
temp % 10 得到的是temp这个值的个位数字,比如 111 % 10 == 1,234 % 10 == 4
sum = sum + (temp%10)  ...


我写的例子就是对这两句的解释啊,你认真过一遍就懂了
111%10=1是求的余数不是求商
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-10 23:38:46 | 显示全部楼层
屁哥 发表于 2018-1-10 23:15
temp % 10 得到的是temp这个值的个位数字,比如 111 % 10 == 1,234 % 10 == 4
sum = sum + (temp%10) * ...

111%10百分号是取余数的算法,111/10=10......1(是求的这个余数不是求个位)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-10 23:51:38 | 显示全部楼层
zero月蚀的假面 发表于 2018-1-10 23:38
111%10百分号是取余数的算法,111/10=10......1(是求的这个余数不是求个位)

嗯 谢谢了  终于明白了  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-10 23:52:15 | 显示全部楼层
我估计你感到困惑的应该是里面的while循环
while temp:
        sum = sum + (temp%10) ** 3
        temp //= 10

temp % 10 得到的是temp这个值的个位数字,比如 111 % 10 == 1,234 % 10 == 4
(temp % 10) ** 3 表示这个数字的三次方,比如 2 ** 3 == 2 * 2 * 2 == 8
temp //= 10 表示temp右移1位,比如 123 // 10 == 12,234 // 10 == 23,地板除的意思是整除,只取整数部分而去掉小数部分

所以整个while循环的操作就是,拿temp=543举个例子
第一次循环
sum = 0 + 3 ** 3 = 9
temp = 54
第二次循环
sum = 9 + 4**3 = 9 + 64 = 73
temp = 5
第三次循环
sum = 73 + 5**3 = 73 + 125 = 198
temp = 0
第四次循环条件判定失败,跳出while循环,最终sum == 198
后续的判定中sum != 543
所以543不是水仙花数

自己又复制了一个 答案 供后来者参考   哎 我这脑子啊 越来越笨了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-1-11 00:19:21 From FishC Mobile | 显示全部楼层
屁哥 发表于 2018-1-10 23:52
我估计你感到困惑的应该是里面的while循环
while temp:
        sum = sum + (temp%10) ** 3

不是,建议你做课后题的话,你自己先思考了写出答案了再去对照小甲鱼的答案会好得多,实在不懂可以先自己百度一下思维方式,因为有时候自己在某个条件上面卡住不知道怎么灵巧的处理用笨方法先过一遍再看小甲鱼稍微取巧点的算法会记忆深刻些,后面很多例题处理数据的方式是可以套用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-11 07:12:20 | 显示全部楼层
zero月蚀的假面 发表于 2018-1-11 00:19
不是,建议你做课后题的话,你自己先思考了写出答案了再去对照小甲鱼的答案会好得多,实在不懂可以先自己 ...

嗯 好的 謝謝
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-19 20:04:02 | 显示全部楼层

返回头来又看了一遍 好多了 谢谢哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 03:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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