问题描述
我在 python 控制台应用程序中遇到了一些问题。 我编写了一个分解控制台应用程序。 它运行良好,但是当我输入一个 2 的幂的数字(如 4、8、16)时,while 循环不会停止。 所以它不会打印任何东西,代码也不会停止。 波纹管是我的代码。
import math
n=input("Input check number:")
n=int(n)
sent= str(n) + "=1"
for m in range(2,int(n / 2)+1):
if n % m == 0:
k = n
i = 0
while k % m == 0:
k = k / m
i += 1
sent = sent + "*" + str(m) + "^" + str(i)
if sent == str(n)+ "=1":
sent = sent + "*" + str(n)
print(sent)
我想要有人帮助我。 提前致谢。
解决方法
问题在于您没有在 n
循环内更改 m
或 while
。因此,例如,对于输入 n=4
,m=2
,k
的结果是 n/m=2
,它满足 k%m==0
并且因为 n
和 { {1}} 会发生变化,因此它会永远运行。
您可以通过修改 while m
中的 n
来简化代码,使其在可被当前除数 loop
整除的情况下继续减小。您不能对 m
执行相同操作,因为 k
再次使用 k
行重置为 n
,并且它将以原始数字开头,给出错误输出。>
这里是带有外部 k = n
循环的代码的一些修改版本:
while
输出(对于输入 n=input("Input check number:")
n = int(n)
sent = str(n) + "=1"
m = 2 # start division with 2
while n > 1: # keep dividing till the number is greater than 1
if m > n:
break
i = 0
while n % m == 0:
n = n / m # modify n by dividing it with current divisor
i += 1
if i > 0: # add only if m divides n at least once
sent = sent + "*" + str(m) + "^" + str(i)
m = m + 1
if sent == str(n)+ "=1":
sent = sent + "*" + str(n)
print(sent)
):
18