周同学 发表于 2020-6-28 18:11:58

没有理解这串代码怎么运行能得出结果的求大佬指教一下

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()

qiuyouzhi 发表于 2020-6-28 18:15:22

https://fishc.com.cn/thread-159491-1-1.html

Twilight6 发表于 2020-6-28 18:15:53



看注释吧~~按循环顺序来,这里举例当循环到 153 时:


for i in range(100, 1000):# 找100~999的水仙花数

    sum = 0# 初始化数值,用于后面计算 百十个位数各自3次方的总和

    temp = i# 找个临时变量来暂时赋值,用于记录本身的值,因为后面计算会改变原本的值

    while temp:
      # 将temp 作为循环条件
      # 假设第1次循环temp = 153
      # 则第2次循环temp = 15
      # 第3次temp=1
      # 第4次因temp=0退出循环

      sum = sum + (temp % 10) ** 3
      # 第1次循环sum = 0+(153%10)**3,sum=27
      # 第2次循环sum = 27+(15%10)**3,sum=152
      # 第3次循环sum = 152+(1)**3 = 153

      temp //= 10
      # temp//10 = 15,则第1次循环temp = 15
      # 第2次循环temp//10=1 ,temp=1
      # 第3次temp//10 = 0 则temp=0

    if sum == i:# 退出循环后判断是否与本身相等, 若是打印,不是则开启下一次for循环

      print("100-999之间的水仙花数有:", end="")# print 默认参数end ='\n' 换行符号 我们用end="" 覆盖他的默认值 就不会换行
      print(i)

小甲鱼的铁粉 发表于 2020-6-28 19:53:29

Twilight6 发表于 2020-6-28 18:15
看注释吧~~按循环顺序来,这里举例当循环到 153 时:

马上拿到小甲鱼的全套书籍了,好羡慕{:10_301:}

Twilight6 发表于 2020-6-28 20:22:17

小甲鱼的铁粉 发表于 2020-6-28 19:53
马上拿到小甲鱼的全套书籍了,好羡慕

{:10_297:}

周同学 发表于 2020-6-29 00:16:08

Twilight6 发表于 2020-6-28 18:15
看注释吧~~按循环顺序来,这里举例当循环到 153 时:

谢谢大佬

周同学 发表于 2020-6-29 00:16:43

qiuyouzhi 发表于 2020-6-28 18:15
https://fishc.com.cn/thread-159491-1-1.html

谢谢大佬
页: [1]
查看完整版本: 没有理解这串代码怎么运行能得出结果的求大佬指教一下