输入:20 输出:[[1,20],[2,10],[4,5]]
我试过这个,但有些我怎么能让它正常工作
def Multiplicators(n):
w=2
while 1:
if w*n-1==n:
print w,n
n-=1
elif n==0:
break
else:
n-=1
Multiplicators(20)
答案 0 :(得分:1)
使用Python 2.x和3.x
的简单解决方案def Multiplicators(n):
return [[i,n/i] for i in range(n+1) if i and n%i is 0 and i <= n/i]
print (Multiplicators(20))
输出将是[[1,20],[2,10],[4,5]] 按要求
答案 1 :(得分:1)
我将提出两种不同的解决方案,以同样的方式工作。第一个与您原来的答案更相似。第二个使用Python&#34; list comprehension&#34;。
def Multiplicators(n):
multiples = []
for i in range(1, n + 1):
div = n / i
if div % 1 == 0:
multiples.append([i, int(div)])
return multiples
def Multiplicators_list_comprehension(n):
return [[i, int(n / i)] for i in range(1, n + 1) if n / i % 1 == 0]
print(Multiplicators(20))
print(Multiplicators_list_comprehension(20))
两者的输出将是:
[[1, 20], [2, 10], [4, 5], [5, 4], [10, 2], [20, 1]]
for i in range(1, n + 1)
中,我们正在迭代所有可能的n
的整数倍。n / i
是整数,即(n / i) % 1 == 0
,我们找到了一个倍数![i, int(div)]
附加到我们的列表中。但我们将div
转换为int
以摆脱尾随零。要了解列表理解,请点击此处:
要匹配问题中提到的结果,您必须将if div % 1 == 0
更改为if div % 1 == 0 and i <= n / i
。这样,您的输出将是
[[1, 20], [2, 10], [4, 5]]
而不是
[[1, 20], [2, 10], [4, 5], [5, 4], [10, 2], [20, 1]]
答案 2 :(得分:-2)
你可以简单地使用列表理解来解决它:
a = 20
b = [[i,a//i] for i in range(1,a) if a%i == 0 and a!=1]
与...相同:
a = 20
b = [] # creating empty list
for i in range(1,a): # iterate over range (LOWER_BOUND, UPPER_BOUND)
if a != 1 and a%i == 0:
b.append([i, a//i]) # append data to list
print(b)
output is : [[1, 20], [2, 10], [4, 5], [5, 4], [10, 2]]
答案 3 :(得分:-2)
也许你的意思是找到一个数字的因素吧?下面的代码是你在找什么?
def Multiplicators(n):
for i in range(n):
if (i!=0 and n%i == 0):
print (int(n/i),i)
Multiplicators(100)