def breaktoprimes(x):
primefactors = []
if x==1:
primefactors.append(1)
y=1
while y<=x or x!=1:
if(x%y==0):
primefactors.append(y)
x=x/y
y=1
else:
y=y+1
return primefactors
所以基本上我要做的就是填写清单&#34; primefactors&#34;与x的素因子。但是,无论我输入什么,代码只会运行并运行,并在一段时间后返回此错误:
Traceback (most recent call last):
File "<pyshell#36>", line 1, in <module>
breaktoprimes(15)
File "<pyshell#35>", line 8, in breaktoprimes
primefactors.append(y)
MemoryError
基本上我想要的代码是:
虽然y小于或等于x,而x不等于1,除非输入的数字小于1或x除以自身,否则它应始终适用,在任何一种情况下我们都会完成,我们继续
我在网上搜索过,但我发现这个问题的解决方案非常不同,所以我没有找到任何帮助。我不知道这段代码中的问题在哪里。我是c#background的python的初学者,现在编写了大约一年。
感谢阅读!
答案 0 :(得分:3)
1
整除。选择1
作为y
的初始值并不是一个好选择。y
至1
应该消失(同样的理由为1)def breaktoprimes(x):
primefactors = []
if x == 1:
primefactors.append(1)
y = 2
while y <= x or x != 1:
if x % y == 0:
primefactors.append(y)
x = x / y
else:
y = y + 1
return primefactors
答案 1 :(得分:2)
如果x=1
和y=1
然后y<=x or x!=1
为真,x=x/y
将x
设为1,那么x
和{{1}将继续为1,循环将永远运行。
答案 2 :(得分:0)
在这部分代码中:
y=1
while y<=x or x!=1:
if(x%y==0):
primefactors.append(y)
x=x/y
y=1
x%y
是0
。然后y
再次成为1
。循环继续。
答案 3 :(得分:0)
问题是你的x和y值总是保持不变。因此,您的代码将以无限循环运行。