我试图列出一个名为count的数字的所有因子。每当我运行它时,它返回1.例如:if 6 = count
,那么在调用findFactor(6)
时应返回的是1 2 3 6
。返回的是1
divisors = ""
def findFactor(count):
divisors = ""
valueD = 0
for i in range(1, count+1):
valueD = count/i
if isinstance(valueD,int) == True:
divisors = str(valueD)+" "
print divisors
答案 0 :(得分:3)
您可以参考此代码:
def find_factor(n):
factor_values = []
for i in range(1, n + 1):
if n % i == 0:
factor_values.append(i)
values = ""
for v in factor_values:
values += str(v) + " "
return values
该函数将返回1 2 3 6
答案 1 :(得分:2)
这可以使用list comprehension一行完成。
def factorize(num):
return [n for n in range(1, num + 1) if num % n == 0]
答案 2 :(得分:1)
首先,您有缩进错误。 print divisors
需要在for循环内标记。
divisors = ""
def findFactor(count):
divisors = ""
valueD = 0
for i in range(1, count+1):
valueD = count/i
if isinstance(valueD,int) == True:
divisors = str(valueD)+" "
print divisors
此外,与@ juanpa.arrivillaga一样,您的结果会因Python 2和Python 3而异。
但是,如果您希望divisors
按照您想要的顺序打印,即以1
开头,则需要将范围更改为for i in range(count,0, -1)
。您将收到多个1
,但这是我要留下的东西。如果你愿意的话,有点挑战。 ;)
答案 3 :(得分:0)
这是我提出的总代码。谢谢你的帮助。
def findFactor(n):
factorValues = []
for i in range(1, n + 1):
if n % i == 0:
factorValues.append(i)
values = ""
for v in factorValues:
values += str(v) + " "
print values.count(" ")
# prints the number of factors
print values
findFactor(21)
它将打印因子的数量,然后打印下一行的因子。
答案 4 :(得分:0)
到目前为止给出的答案都是蛮力方法。
对于n = 10000,他们将必须迭代一万次。
以下内容仅重复100次:
def find_factors(n):
factors = []
i = 1
j = n
while True:
if i*j == n:
factors.append(i)
if i == j:
break
factors.append(j)
i += 1
j = n // i
if i > j:
break
return factors
如果有可用质数的列表,则可以使其更快。