我想编写一个函数,它接受一个积分并返回所有乘数的列表

时间:2017-05-05 13:11:19

标签: python

例如,

输入: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)

4 个答案:

答案 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)

@EvilSmurf已正确地指出我的答案在Python 2中起作用。请注意,本答案中建议的方法仅适用于Python 3.您可以进行一些修改以使其在Python中有效2. 证明留给读者作为练习:)

我将提出两种不同的解决方案,以同样的方式工作。第一个与您原来的答案更相似。第二个使用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)