这是我现在拥有的代码。我无法让它返回问题的正确结果。
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
这是我现在拥有的代码。我无法让它返回问题的正确结果。
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
您只需要从 1 迭代到 n ** 0.5 + 1,您的因子将全部是 i,并且您在此过程中会选择 n/i。
例如: 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
的因数n
是所有均分的数n
。ifi
的一个因素也是如此。n
n % i == 0
您需要做的是对从 1 到 的每个数字执行此测试n
,如果该条件为真,则将该数字添加到您的列表中。
如果您在开始编写此代码时遇到问题,请使用您尝试过的内容更新您的问题。
请注意,上述方法并不是查找因子的最有效方法,但在我看来,这只是一个初学者的练习,因此需要一种幼稚的方法。
您的代码存在一些问题。首先,您不需要增加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]
使用列表理解:
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]