在while循环中发生了什么?

时间:2019-01-09 00:43:06

标签: python

我正在使用此函数来获取数字的素因子。当前输出正在打印每个素数。我试图了解此代码的工作原理,但不了解while循环的工作原理。

def get_primes(n):
    for i in range(2, n + 1):
        while n % i == 0:
            n = n / i
            print(i)

print(get_primes(32))

输出为正确答案2 2 2 2 2。但是我不明白2i唯一的值,而n % i == 0是唯一的值。

2 个答案:

答案 0 :(得分:2)

因为这就是答案。乘以形成32的素数是2、2、2、2和2。

这是数学事实;与Python无关。

答案 1 :(得分:2)

让我们逐行浏览代码:D

def get_primes(n):              # great use of a function :D
    for i in range(2, n + 1):   # this loops through the possible factors
        while n % i == 0:       # this loops through n, trying to factor it
            n = n / i           # these only run if i is a factor of n
            print(i)            # note that n = n/i only runs when i is a factor
                                # meaning it divides for the upcoming iterations

您的代码运行得很好。因为i从for循环的开始是2,所以我们将检查其中的代码。当函数进入while循环时,它将检查是否n%i == 0,当i为2时表示n%2 == 0。当n为偶数时,n = n/i将运行。也会print(i)。当它第二次出现时,n是原始n的一半。请注意,while循环仅在n%i == 0时运行,这意味着i需要成为主要因素。这将找到n的所有主要因素。

因为32等于2 * 2 * 2 * 2 * 2或2 ^ 5,所以它打印了5次2。尝试不同的方法,您会发现它有效:D