我正在尝试创建一个函数,该函数可以返回给定数字的所有可能因子。我正在使用递归,但我不知道为什么会收到错误。
我知道错误发生在最后的“ for factor in factor”行。
def get_factors(number: int):
factors = []
if number % 2 == 0: # Checks if number is divisible by all the primes up
factors.append(2) # to 19
factors += get_factors(int(number/2))
elif number % 3 == 0:
factors.append(3)
factors += get_factors(int(number/3))
elif number % 5 == 0:
factors.append(5)
factors += get_factors(int(number/5))
elif number % 7 == 0:
factors.append(7)
factors += get_factors(int(number/7))
elif number % 11 == 0:
factors.append(11)
factors += get_factors(int(number/11))
elif number % 13 == 0:
factors.append(13)
factors += get_factors(int(number/13))
elif number % 17 == 0:
factors.append(17)
factors += get_factors(int(number/17))
elif number % 19 == 0:
factors.append(19)
factors += get_factors(int(number/19))
else:
final = [1, number]
for digit in range(1, int(number/2) + 1): # Checks that there isn't
if number % digit == 0: # a factor prime that isn't listed above.
factors.append(digit)
for factor in factors:
final += [factor**power for power in range(1, factors.count(factor) + 1)] # A way to ensure that repeated numbers are turned into factors.
return sorted(final)
答案 0 :(得分:0)
将因子存储在全局变量中也许是一种可接受的解决方案(或者您也可以将所有这些代码包装在函数中……)。我拿出退货并将所有factors.append()
更改为total_factors.append()
,并将factors += get_factors()
更改为get_factors()
(因为取出后它没有返回值)。 / p>
结果代码:
total_factors = []
def get_factors(number: int):
factors = []
if number % 2 == 0: # Checks if number is divisible by all the primes up
total_factors.append(2) # to 19
get_factors(int(number/2))
elif number % 3 == 0:
total_factors.append(3)
get_factors(int(number/3))
elif number % 5 == 0:
total_factors.append(5)
get_factors(int(number/5))
elif number % 7 == 0:
total_factors.append(7)
get_factors(int(number/7))
elif number % 11 == 0:
total_factors.append(11)
get_factors(int(number/11))
elif number % 13 == 0:
total_factors.append(13)
get_factors(int(number/13))
elif number % 17 == 0:
total_factors.append(17)
get_factors(int(number/17))
elif number % 19 == 0:
total_factors.append(19)
get_factors(int(number/19))
else:
final = [1, number]
for digit in range(1, int(number/2) + 1): # Checks that there isn't
if number % digit == 0: # a factor prime that isn't listed above.
factors.append(digit)
for factor in factors:
final += [factor**power for power in range(1, factors.count(factor) + 1)] # A way to ensure that repeated numbers are turned into factors.
get_factors(300)
print(total_factors)
输出
[2,2,3,5,5]
然后2 * 2 * 3 * 5 * 5 == 300,这样就检查出来了!
在您的else
区块中似乎确实还有其他困难。当我尝试getfactors(366)
时,它只会输出:
[2,3]
但这应该可以使您朝正确的方向前进:)