我正在做一个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不起作用。我知道这不是执行此操作的最佳方法,但我只是想知道为什么它对某些数字有效而对其他数字无效。谢谢。
答案 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的除数不能产生预期的结果。