红唇如刀 发表于 2018-5-20 17:52:12

水仙花的计算

for i in range(100,1000):                            #从100到1000之间开始迭代
    sum=0                                                 #变量sum的值为0
    temp=i                                                 #变量temp复制 i 的值
    while temp:                                           #永远为真(我这样理解对不对)
      sum=sum+(temp%10)**3                  # ???????????
      temp//=10                                       #???????????
    if sum ==i:                                          #如果sum的值和 i 的值相等
      print(i)                                             #输出 i 的值

请求解释,谢谢大神

zhdwinter 发表于 2018-5-20 17:52:13

其实那种算法要求的计算次数较多,可以看下我写的,这样也比较容易明白
for i in range(1,10):
    for j in range(10):
      for k in range(10):
            if i*100 + j*10 + k == i**3 + j**3 + k**3:
                print(i*100 + j*10 + k)

ba21 发表于 2018-5-20 17:58:29

while temp:                                           #为什么会永远为真?
      sum=sum+(temp%10)**3                  
      temp//=10                                       #temp //= 10 除着除着到最后就 temp == 0了。何来while temp 会永运为真?

红唇如刀 发表于 2018-5-20 18:02:16

我确实搞不清楚,如果大神有时间,请详细解释下

红唇如刀 发表于 2018-5-20 18:03:25

ba21 发表于 2018-5-20 17:58
while temp:                                           #为什么会永远为真?
      sum=sum+(temp%10 ...


我确实搞不清楚,如果大神有时间,请详细解释下

ba21 发表于 2018-5-20 18:07:18

红唇如刀 发表于 2018-5-20 18:03
我确实搞不清楚,如果大神有时间,请详细解释下

请问还要该如何详细?
下面给你上个图。理解不了。我也表示无语了
再附个。 0 为假    非0 都是为真(如:-1,-1,2,43)

zhdwinter 发表于 2018-5-20 18:11:03

你的while 语句会一直执行 永不停歇

ba21 发表于 2018-5-20 18:23:46

zhdwinter 发表于 2018-5-20 18:11
你的while 语句会一直执行 永不停歇

?????
你有调试过?

zhdwinter 发表于 2018-5-20 18:36:39

你要明白 itemp%10第一次输出的是个位上的数然后执行了 temp//=10这样temp 就变成了去掉原来个位数的temp(比如temp=159执行完 temp//=10之后temp就变成了15) 然后又执行temp%10 这样就是输出的原始数据的十位数然后再执行temp //=10这样temp就变成了原来的百位值(15//=10 之后输出的就是1)然后又执行temp%10 输出就就是原始数据的百位数值再执行次temp//10 输出就变成0了while 就不循环了

zhdwinter 发表于 2018-5-20 18:38:38

ba21 发表于 2018-5-20 18:23
?????
你有调试过?

不是这个意思他不是说他的temp 是真理啊   哈哈

红唇如刀 发表于 2018-5-20 19:35:09

sum=sum+(temp%10)**3                  # ???????????
      temp//=10                                 #temp与10地板除法,求到的是啥结果,加上上面的一句还是不明白

zhdwinter 发表于 2018-5-20 20:23:17

红唇如刀 发表于 2018-5-20 19:35
sum=sum+(temp%10)**3                  # ???????????
      temp//=10                               ...

temp%10 依次求的是原始数据的 个位数,十位数和百位数

新手·ing 发表于 2018-5-20 21:52:39

http://bbs.fishc.com/thread-93848-1-1.html

红唇如刀 发表于 2018-5-20 23:02:03

zhdwinter 发表于 2018-5-20 17:52
其实那种算法要求的计算次数较多,可以看下我写的,这样也比较容易明白
for i in range(1,10):
    for j ...

我这样的小白,对于那种非常飞跃式一行写法,理解起来很困难啊,还是这种分开来一步一步计算的容易看明白,谢谢你,ahdwinter.

红唇如刀 发表于 2018-5-20 23:02:36

新手·ing 发表于 2018-5-20 21:52
http://bbs.fishc.com/thread-93848-1-1.html

谢谢你的链接,新手.ing

zhdwinter 发表于 2018-5-20 23:11:28

红唇如刀 发表于 2018-5-20 23:02
我这样的小白,对于那种非常飞跃式一行写法,理解起来很困难啊,还是这种分开来一步一步计算的容易看明白,谢 ...

不客气   其实在编程序之前要先想好算法尽量让其简单化计算次数少逻辑性要强
页: [1]
查看完整版本: 水仙花的计算