Neal01 发表于 2016-11-11 11:05:02

零基础python

鱼油们,谁能帮我讲讲,我把我懂的写进去了但是为什么这么运作和为什么有这个不懂
for i in range(100, 1000):                                #i取(100到999)
    sum = 0                                                #sum取值为0.(为什么要有这一步呢?)
    temp = i                                                #temp=i (取i的值)
    while temp:                                                #循环temp
      sum = sum +(temp%10) ** 3                #不懂了
      temp //= 10         # 注意这里要使用地板除哦~                #为什么要temp除10呢?
    if sum == i:                                                #当sum等于i的时候打印i
      print(i)

人zai旅途 发表于 2016-11-11 14:56:21

sum=0.是因为变量需要先赋值,后面才能调用,且切sum是求和,初始值要为0;
while temp: 不仅仅是循环temp,而是因为temp被赋值i,肯定>0,这个循环一定成立,是一个条件;
sum = sum +(temp%10) ** 3      
temp //= 10      
这两行是在表示水仙花的题目中的条件如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,不过这里用了迭代概念,
第一次,temp%10可以求出个位数立方和,然后
temp //= 10,就是temp = temp //10,经过两次迭代可以求出十位数、百位数,分别循环带入sum = sum +(temp%10) ** 3,最终实现了sum是三个位数的立方和;
剩下的你理解的是对的,当sum等于i的时候打印i
   


有用的话给个评分哈,谢谢

人zai旅途 发表于 2016-11-13 19:15:13

Neal01 发表于 2016-11-11 15:38
我比较二啊,这么一讲,我知道了个位数怎么出来的了。那十位数和百位数的详细出来步骤能告诉我吗?

举例子,当i=153,temp = i ,
while 153:   #条件成立,开始循环
      sum=0+(153%10)** 3= 0 +3**3   # 个位数的立方
      temp //= 10 即temp=153//10=15                     #temp被重新赋值为15
while 15:   #条件成立,继续循环
      sum = sum +(temp%10) ** 3=3**3 + (15%10)**3=3**3+5**3   #个位数立方和+十位数立方和
      temp //= 10,即temp=15//10=1                     #temp被重新赋值为1
while 1:   #条件成立,继续循环
      sum = sum +(temp%10) ** 3=(3**3 +5**3)+( 1%10)**3=3**3+5**3 +1**3#各个位数立方和
      temp //= 10,即temp=1//10=0                  #temp被重新赋值为0
while 0 : 条件不成立,不在循环。
if 3**3+5**3 +1**3=153:
    print(153)

真心解答问题,希望获得评分,谢谢楼主!

人zai旅途 发表于 2016-11-14 21:52:32

我回复的帖子右下角,评分,管理

Neal01 发表于 2016-11-11 15:38:04

人zai旅途 发表于 2016-11-11 14:56
sum=0.是因为变量需要先赋值,后面才能调用,且切sum是求和,初始值要为0;
while temp: 不仅仅是循环temp ...

我比较二啊,这么一讲,我知道了个位数怎么出来的了。那十位数和百位数的详细出来步骤能告诉我吗?

Neal01 发表于 2016-11-14 16:47:33

讲的太牛逼了!多谢了!

Neal01 发表于 2016-11-14 16:48:21

人zai旅途 发表于 2016-11-13 19:15
举例子,当i=153,temp = i ,
while 153:   #条件成立,开始循环
      sum=0+(153%10)** 3= 0 +3**3 ...

最后,怎么给你评分?

人zai旅途 发表于 2016-11-15 11:57:52

谢谢楼主,看截图

jim_win 发表于 2016-11-16 17:20:23

人zai旅途 发表于 2016-11-13 19:15
举例子,当i=153,temp = i ,
while 153:   #条件成立,开始循环
      sum=0+(153%10)** 3= 0 +3**3 ...

正解!太棒了!{:5_92:}
页: [1]
查看完整版本: 零基础python