我试图用这段代码找到素数分解,但程序进入了一个无限循环。我试图找出是什么使程序进入这个无限循环,但不幸的是我不能。代码是:
N = int(input())
B = N
L = []
while B != 1:
for i in range(2,N):
if N % i ==0:
L.append(i)
B = N // i
break
else:
L.append(N)
B = 1
L.pop()
print(L)
3条答案
按热度按时间n53p2ov01#
问题在于
break
语句,每次for循环开始和条件if N % i ==0
到达时,将强制启动一个新的for循环,这将创建一个无限循环。所以你要做的就是移除break
```N = int(input())
B = N
L = []
while B != 1:
for i in range(2,N):
if N % i ==0:
L.append(i)
B = N // i
else:
L.append(N)
B = 1
L.pop()
print(L)
N = int(input())
B = N
L = []
while B != 1:
for i in range(2,N):
if N % i ==0:
L.append(i)
N = N // i
break
else:
L.append(N)
B = 1
print(L)
apeeds0o2#
而b!=1:给你一个无限循环。您可以使用调试器来查看,例如,当n=9时,b永远不会变为1,并且脚本一直将3追加到l。
ohtdti5x3#
你从来没有增加过我。break语句将带您进入“while b!=1". 所以它无限地将2(或n的第一个因子)附加到l上。