寻找除数(Codewars问题)

时间:2018-06-24 06:44:55

标签: python

我正在做一个Codewars问题,指出:

创建一个名为divisors / Divisors的函数,该函数采用整数n> 1,并返回一个数组,该数组具有从最小到最大的所有整数除数(除了1和数字本身)。如果数字为质数,则返回字符串'(integer)为质数

我想出了代码:

def divisors(integer):
    newlist = []
    for x in range(2, integer):
      if integer%x==0:
        newlist.append(x)
      if len(newlist) == 0:
        return str(integer) + " is prime"
    return newlist

我觉得这应该可以工作,并且在大多数测试中都可以,但是只要第一个因子是奇数,它就不会工作。例如,15和9不起作用。我知道这不是执行此操作的最佳方法,但我只是想知道为什么它对某些数字有效而对其他数字无效。谢谢。

4 个答案:

答案 0 :(得分:0)

您的缩进是错误的:

def divisors(integer):
    newlist = []
    for x in range(2, integer):
      if integer%x==0:
        newlist.append(x)
    if len(newlist) == 0:  # this _was_ being executed after just the first iteration
      return str(integer) + " is prime"
    return newlist

有效

答案 1 :(得分:0)

还有一件事情可以代替len(newlist)==0来完成,not newlist

def divisors(integer):
    newlist = []
    for x in range(2, integer):
      if integer%x==0:
        newlist.append(x)
    if not newlist:
      return str(integer) + " is prime"
    return newlist
print(divisors(15))

答案 2 :(得分:0)

您的第二个if语句在for循环内,因此它在评估x = 2时返回。 将其移出for循环,它应该可以工作。

答案 3 :(得分:0)

您可以使用

for x in range(2, (integer//2)+1):

代替

for x in range(2, integer):

将所需时间减少一半。

大于整数/ 2的除数不能产生预期的结果。