Crossin的编程教室

标题: 每日一坑-阿姆斯特朗数的疑问 [打印本页]

作者: cbh    时间: 2019-9-28 16:05
标题: 每日一坑-阿姆斯特朗数的疑问
def amu(n):
    for j in range(1,n + 1):
        # a = str(j).split()
        x = len(str(j))
        m = []
        # print(m)
        for i in str(j):
            s = int(i) ** x
            # print(x)
            m.append(s)
            p = sum(m)
            # print(p)
    r = []
    if j == p:
        r.append(j)
    return r

amu(1000)
我这个为什么执行完出不来结果呢?...

还有个问题。。老师的答案:
def judge_arms(i):    # 将该数转换为字符串 123 -> '123'    tem = str(i)
    # 按照 n位正整数等于其各位数字的n次方 进行求和    # sum = 1**3 + 2**3 + 3**3    tem_sum = sum([int(j)**len(tem) for j in tem])
    # 判断求和之后的数是否和原数相等    if i == tem_sum:
        return True

'''寻找小于 1000 的阿姆斯特朗数逐一遍历小于 1000 的数判断是否为阿姆斯特朗数'''
def arms(N):    for i in range(1, N+1):
        if judge_arms(i):            print(i)arms(1000)

第3行,sum()里面的内容为什么两边要加上[]呢?~

作者: crossin先生    时间: 2019-9-28 17:10
  1. def amu(n):
  2.     r = []
  3.     for j in range(1,n + 1):
  4.         # a = str(j).split()
  5.         x = len(str(j))
  6.         m = []
  7.         # print(m)
  8.         for i in str(j):
  9.             s = int(i) ** x
  10.             # print(x)
  11.             m.append(s)
  12.             p = sum(m)
  13.             # print(p)
  14.         if j == p:
  15.             r.append(j)
  16.     return r

  17. print(amu(1000))
复制代码
你代码问题比较多,我就直接给你改吧
r应该在循环开始初始化,然后在循环里每一步发现正确的值的时候,添加到r里
最后的结果你也没有print

sum的问题是因为里面是一个列表,相当于
x = [int(j)**len(tem) for j in tem]
tem_sum = sum(x)

列表等方面的基础内容你还得再看看

作者: cbh    时间: 2019-9-28 22:17
crossin先生 发表于 2019-9-28 17:10
你代码问题比较多,我就直接给你改吧
r应该在循环开始初始化,然后在循环里每一步发现正确的值的时候,添加 ...

噢!!我以为int(j)**len(tem) for j in tem已经是个列表了,就不用加[]了。。
谢谢老师了!!还要继续学习呀




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5