我想写一个函数,它接受一个整数,返回所有的因数列表。

2024-10-01 15:49:26 发布

您现在位置: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)

Tags: ifdefelseprintbreakelifwhilemultiplicators
3条回答

@evissmurf正确地指出,我的答案在Python 2中不起作用。请注意,这个答案中建议的方法只适用于python3。您可以做一些修改,使其在python2中工作。校样留给读者作为练习


我将提出两个不同的解决方案,它们以相同的方式工作。第一个和你原来的答案更相似。第二个使用Python的“列表理解”。你知道吗

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]]

使用Python2.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]] 按要求

也许你的意思是找到一个数的因子,对吗?下面的代码是你要找的?你知道吗

   def Multiplicators(n):
      for i in range(n):
         if (i!=0 and n%i == 0):
            print (int(n/i),i)

   Multiplicators(100)

相关问题 更多 >

    热门问题