Python 求一个数的因子之和(不包括该数本身)

Python 求一个数的因子之和(不包括该数本身),python,Python,编辑代码后,我了解了如何操作: def sum_factors(n): sum = 0 factor = 1 # Return the sum of all factors of n, not including n while n!=0 and factor < n: if n % factor == 0: sum = sum + factor factor = factor + 1 else: factor

编辑代码后,我了解了如何操作:

def sum_factors(n):
  sum = 0
  factor = 1
  # Return the sum of all factors of n, not including n
  while n!=0 and factor < n:
    if n % factor == 0:
        sum = sum + factor
        factor = factor + 1
    else:
        factor = factor + 1
  return sum
我最初的代码无法对这些因素求和,但我不明白为什么:

def sum_divisors(n):
  sum = 0
  factor = 1
  # Return the sum of all divisors of n, not including n
  while n % factor == 0 and factor < n:
    sum = sum + factor
    factor = factor + 1
  return sum

你能解释一下为什么我的初始代码不起作用吗?

初始代码着重强调条件,而n%因子==0不是结束while循环的必要条件。

初始代码着重强调条件,而n%因子==0不是结束while循环的必要条件循环。

您的while循环写入

while n % factor == 0 and factor < n:
这意味着,一旦n%因子测试条件为false,代码将中断while循环

让我们以10为例

10%1等于零,10%2等于0。但是10%3不等于0。这意味着一旦因子达到3,我们就可以打破while循环

我们得到的答案是1和2之和,这是不正确的。

您的while循环写入

while n % factor == 0 and factor < n:
这意味着,一旦n%因子测试条件为false,代码将中断while循环

让我们以10为例

10%1等于零,10%2等于0。但是10%3不等于0。这意味着一旦因子达到3,我们就可以打破while循环


我们得到的答案是1和2之和,这是不正确的。

有时,向Python程序添加一些调试输出会有所帮助:

定义和除数n: 总和=0 系数=1 返回n的所有除数之和,不包括n printfactor={factor} 当n%系数=0且系数 系数=1 系数=2 系数=3 系数=4 6. 注释

正如我们所看到的,while循环在找到一个不是因子的数字时退出

重构

我注意到if-else块中有重复的代码。无论何时发生这种情况,您都可以将公共代码移到外部:

如果n%系数==0: 总和=总和+系数 系数=系数+1
有时,向Python程序添加一些调试输出会有所帮助:

定义和除数n: 总和=0 系数=1 返回n的所有除数之和,不包括n printfactor={factor} 当n%系数=0且系数 系数=1 系数=2 系数=3 系数=4 6. 注释

正如我们所看到的,while循环在找到一个不是因子的数字时退出

重构

我注意到if-else块中有重复的代码。无论何时发生这种情况,您都可以将公共代码移到外部:

如果n%系数==0: 总和=总和+系数 系数=系数+1 while循环将在第一次n%因子不等于零时退出。while循环将在第一次n%因子不等于零时退出。