我正在尝试创建一个函数,它可以返回给定数字的所有可能因素。我正在使用递归,我不知道为什么要得到错误。
我知道,错误发生在“因子中的因素”线接近尾端。
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)发布于 2019-03-30 01:39:39
也许将这些因素存储在全局变量中是一个可以接受的解决方案(或者您也可以将所有这些代码包装在一个函数中.)。我取出返回,并将所有factors.append()更改为total_factors.append(),并将factors += get_factors()更改为get_factors() (因为它在取出后没有返回值)。
由此产生的代码:
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
但这应该会让你朝着正确的方向前进:)
https://stackoverflow.com/questions/55427328
复制相似问题