当数字是 2 的幂时 while 循环不会停止

While loop doesn't stop when number is power of 2

我在 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)

我想要有人帮助我。 提前谢谢你。

问题是您没有在 while 循环内更改 nm。因此,例如,对于输入 n=4m=2k 结果是 n/m=2 满足 k%m==0 并且因为 nm 更改,因此它永远运行。

你可以通过修改while loop中的n来简化代码,如果它能被当前除数m整除则保持递减。你不能对 k 做同样的事情,因为 k 被行 k = n 再次重置为 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):

18=1*2^1*3^2