最大因素有什么不对?

时间:2017-03-16 01:34:49

标签: python

这里是要求:

def largest_factor(n):
    """Return the largest factor of n that is smaller than n.

    >>> largest_factor(15) # factors are 1, 3, 5
    5
    >>> largest_factor(80) # factors are 1, 2, 4, 5, 8, 10, 16, 20, 40
    40
    >>> largest_factor(13) # factor is 1 since 13 is prime
    1
    """
    "*** YOUR CODE HERE ***"

这是我的代码:

def largest_factor(n):
  for m in n:
    if m <= n:
      if n%m == 0:
       return m
      else: 
       m = m+1
    else:
      return min

当我输入15时,输出为15

当我输入20时,输出为20。 为什么呢?

1 个答案:

答案 0 :(得分:0)

对当前问题的回复

我在输入代码时更新了您的问题;所以,这是一个更新。您缺少正确的range()语法(请参阅下面的说明),您需要一个列表来存储所有相关因素。我添加了一个join函数来组合列表中的所有元素。

def factor(n):
    results = []
    for m in range(1,n):
        if n%m == 0:
            results.append(str(m))
    if len(results) == 1:
        return "factor is 1 since " + str(n) + " is prime"
    return "factors are " + ", ".join(results)

print(factor(15))
print(factor(80))
print(factor(13))

回答旧问题/标题问题

以下是修复代码的方法:

def largest_factor(n):
    for m in range(1,n)[::-1]:
        if n%m == 0:
            return m

如何运作

for m in n无效,因为in运算符的右侧需要一个数组(或类似的)。所以,我用range(1,n)替换了第二个运算符。 range会生成一个类似[1,2,3,4,... n-1]的列表,然后我们就可以迭代它。但是,我们不希望它向上计数,我们希望它向下计数,所以我添加了[::-1]。从那里开始,我们现在向后m1重复n-1m。耶。

然后我们检查它是否是一个因素,如果是,那么我们返回def largest_factor(n): for m in range(2,n)[::-1]: if n%m == 0: return m return n #or, if you want it to return false, change this line to return False

例外检查 - Primes

如果数字是素数(意味着它没有因素),您希望程序返回什么?上面的代码返回1。

但是如果你想让它返回你输入的数字:

{{1}}