微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决当数字是 2 的幂时,while 循环不会停止

我在 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 循环内更改 mwhile。因此,例如,对于输入 n=4,m=2k 的结果是 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。