这是我现在的代码。我无法让它返回问题的正确结果。
def problem(n):
myList = [1,n]
for i in range(1,n):
result = int(n ** .5)
new = n/result
i = i + 1
myList.append(new)
return myList
答案 0 :(得分:2)
n
的因素是均匀划分为n
的所有数字。因此,如果i
n
,则n % i == 0
是n
的因素。
您需要做的是对从1到{{1}}的每个数字执行此测试,如果该条件为真,则将该数字附加到列表中。
如果您在开始编写此代码时遇到问题,请使用您尝试的内容更新您的问题。
请注意,上述方法并不是查找因子的最有效方法,但在我看来,这只是一个初学程序员的练习,因此需要一种天真的方法。
答案 1 :(得分:2)
您的代码存在一些问题。首先,您不需要增加i
,因为for
循环已经这样做了。其次,使用一些基本的数学原理,你只需要经过一系列数字,直到你传入的数字的平方根。我将留下第二部分给你玩和试验。
def problem(n):
myList = []
for i in range(1, n+1):
if n % i == 0:
myList.append(i)
return myList
对于更高级的方法,您可以尝试列表推导,它们非常强大,但通常对较小的数据集更好。
def problem(n):
return [x for x in range(1, n+1) if n % x == 0]
答案 2 :(得分:1)
你只需要从1到n ** 0.5 + 1进行迭代,你的因子将是我的全部,并且你不会在途中接受。
例如:因素10:
我们只需要从1到4进行迭代
i = 1 => 10%1 == 0,因此因素:i = 1,10 / i = 10
i = 2 => 10%2 == 0,因此因素:i = 2,10 / i = 5
i = 3 => 10%3!= 0,没有因素
我们不需要再进一步了,答案是1,2,5,10。
def problem(n):
myList = []
for i in xrange(1, int(n ** 0.5 + 1)):
if n % i == 0:
if (i != n/i):
myList.append(i)
myList.append(n / i)
else:
myList.append(i)
return myList
结果:
>>> problem(10)
[1, 10, 2, 5]
>>> problem(12)
[1, 12, 2, 6, 3, 4]
>>> problem(77)
[1, 77, 7, 11]
>>> problem(4)
[1, 4, 2]
>>> problem(64)
[1, 64, 2, 32, 4, 16, 8]
>>> len(problem(10 ** 12))
169
答案 3 :(得分:0)
使用列表理解:
In [4]: num=120
In [5]: [x for x in range(2,int(num/2)+1) if num%x==0]
Out[5]: [2, 3, 4, 5, 6, 8, 10, 12, 15, 20, 24, 30, 40, 60]
In [6]: num=121
In [7]: [x for x in range(2,int(num/2)+1) if num%x==0]
Out[7]: [11]