Thomason 发表于 2018-10-10 18:22:25

Python作业原理

def Narcissus():
    for each in range(100, 1000):
      temp = each
      sum = 0
      while temp:
            sum = sum + (temp%10) ** 3
            temp = temp // 10# 注意这里用地板除

      if sum == each:
            print(each, end='\t')

print("所有的水仙花数分别是:", end='')
Narcissus()
请问谁知道检测是否为水仙花数的原理是什么理由

Thomason 发表于 2018-10-10 18:23:35

我只会用(x//100)**3+(x%100//10)**3+(x%10)**3 == x 检测是否为水仙花数

claws0n 发表于 2018-10-10 18:34:00

Thomason 发表于 2018-10-10 18:23
我只会用(x//100)**3+(x%100//10)**3+(x%10)**3 == x 检测是否为水仙花数

水仙花数的定义:此数的各个位数取x次方之和,与此数相等。取几次方,就要看此数有几位数。
while temp: #如果 temp 为 0,退出循环
153 是一个水仙花数,假设外部循环跑到 153
temp = i, 所以 temp == 153
(temp%10) == 3      # 把个位数取出来
(temp //10) == 15    # 把个位数丢掉

Thomason 发表于 2018-10-10 18:54:36

claws0n 发表于 2018-10-10 18:34
水仙花数的定义:此数的各个位数取x次方之和,与此数相等。取几次方,就要看此数有几位数。
while temp: ...

但是它是怎么确保为每一位数的三次方之和?只有一个个位和百位十位的整合,定义不是向我写的那样吗?

claws0n 发表于 2018-10-10 19:15:54

Thomason 发表于 2018-10-10 18:54
但是它是怎么确保为每一位数的三次方之和?只有一个个位和百位十位的整合,定义不是向我写的那样吗?

透过循环,把各位数取出来,3次方,累加。一些细节就不说了
第一次 while 153
temp%10 == 3
temp//10 == 15
第二次 while 15
temp%10 == 5
temp//10 == 1
第三次 while 1
...
while 0,退出循环

Thomason 发表于 2018-10-10 19:51:20

claws0n 发表于 2018-10-10 19:15
透过循环,把各位数取出来,3次方,累加。一些细节就不说了
第一次 while 153
temp%10 == 3


谢谢{:9_236:}
页: [1]
查看完整版本: Python作业原理