当数字是 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
循环内更改 n
或 m
。因此,例如,对于输入 n=4
、m=2
、k
结果是 n/m=2
满足 k%m==0
并且因为 n
和 m
更改,因此它永远运行。
你可以通过修改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
我在 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
循环内更改 n
或 m
。因此,例如,对于输入 n=4
、m=2
、k
结果是 n/m=2
满足 k%m==0
并且因为 n
和 m
更改,因此它永远运行。
你可以通过修改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