这里是要求:
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。 为什么呢?
答案 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]
。从那里开始,我们现在向后m
向1
重复n-1
到m
。耶。
然后我们检查它是否是一个因素,如果是,那么我们返回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
。
如果数字是素数(意味着它没有因素),您希望程序返回什么?上面的代码返回1。
但是如果你想让它返回你输入的数字:
{{1}}