代码之家  ›  专栏  ›  技术社区  ›  SAtt

蟒蛇使用字典查找数字代码的因子。为什么这样不行?

  •  2
  • SAtt  · 技术社区  · 7 年前

    在此函数中,获取(开始、结束)之间的数字因数, 我认为最好的方法是定义一个这些数字的字典,然后将因子附加到分配给该数字的列表中。 这种方法有什么问题吗?如果没有,那么为什么这不起作用-->?

    def factors(start, end):
    
       factors = {}
    
       for number in range(start, end + 1):
          for i in range(2, number+1):
             if number % i == 0:
                factors[number] = []
                factors[number].append(i)
    

    在代码中,参数是起始值和结束值,因子是存储数字及其各自因子的字典。

    其思想是循环遍历范围内的数字,然后针对每个循环遍历其所有可能的因子,确定哪些确实是因子,并将其添加到字典中。

    这有意义吗?

    非常感谢。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Nathan Vērzemnieks    7 年前

    您的方法至少有两个问题:

    1. 您正在设置 factors[number] = [] 每次你找到一个因素。这意味着每次你找到一个因子,你就会删除之前找到的因子。在循环的最后一次迭代中, i 将等于 number number % number == 0 ,您的因素列表将始终只包含 数字 它本身

    2. 您没有从函数中返回任何内容。

    我所看到的使您的功能正常工作的最小变化是移动 系数[数字]=[] 在内环外部,并返回 factors 完成后使用字典:

    def factors(start, end):
    
        factors = {}
    
        for number in range(start, end + 1):
            factors[number] = []
            for i in range(2, number+1):
                if number % i == 0:
                    factors[number].append(i)
        return factors
    
        2
  •  0
  •   Nathan Vērzemnieks    7 年前

    我不能完全理解这个问题。最好提供一个例子和预期的结果。以下是我认为有效的方法。

    def factors(start, end):
    
        factors = {}
    
        for number in range(start, end+1):
            factors[number] = []
            for i in range(2, number+1):
                if number % i == 0:
                    factors[number].append(i)
        return factors
    
    print(factors(10,20))
    

    这就是你要找的吗?