无法理解"def gcd()"的代码

ilj*_*yya 1 python python-2.7 greatest-common-divisor

更新:一旦我不知道3 %4 =0......

def gcd(a, b):
    """Calculate the Greatest Common Divisor of a and b.

    Unless b==0, the result will have the same sign as b (so that when
    b is divided by it, the result comes out positive).
    """
    while b:
        a, b = b, a%b
    return a
Run Code Online (Sandbox Code Playgroud)

我认为它的工作原理如下:

gcd(3,4) => while 4: => 3,4 = 4, 3%4 => 
Run Code Online (Sandbox Code Playgroud)

xxm*_*exx 6

让我们一步一步地完成这个步骤.

def gcd(a, b):
Run Code Online (Sandbox Code Playgroud)

这定义了一个新函数gcd,它使用变量ab在其计算中.必须在函数开始之前设置这些值.

while b:
Run Code Online (Sandbox Code Playgroud)

除非数字等于0,否则它被认为是真的.因此,如果b= 0,那么这部分代码将不会执行.

 a, b = b, a%b
Run Code Online (Sandbox Code Playgroud)

为清楚起见,我将把它扩展为两行.

a = b
b = a%b
Run Code Online (Sandbox Code Playgroud)

第一部分是相当自我解释 - 第二部分绝对不是.a%ba (mod b)模数的python表达式是数学函数,它们在最基本的状态下返回两个数字的余数.例如,12%5 = 2; 剩下的12/5是2.

在编写实际代码时,请确保将它们保持在同一行."在一行中,作业同时发生(礼貌包装和拆包).在两行中,作业一个接一个地发生,这给出了一个不正确的答案(b将永远为0)" - 蒂姆

这些行无限重复,直到变量b等于0.之后,代码执行:

return a
Run Code Online (Sandbox Code Playgroud)

这会将值返回a给程序的其余部分,以便以后可以使用它.它也结束了这个功能.

要阅读有关欧几里德方程的更多信息(并且......因为我喜欢密码学和数学,'扩展'版本)请访问此维基百科页面.

我希望这有用!

  • 就像一张纸条,在实践中你不能将"a,b = b,a%b"分成两行. (4认同)