在Python中使用整数意义的'while'是什么意思?这个GCD代码如何工作?

时间:2011-08-31 00:55:55

标签: python python-3.x

我找到了这个最大的共同点代码:

def gcd(x,y):
    while y:
        x, y = y, x % y
    return x

我无法理解while y的含义,因为y是一个整数。它是如何工作的?此外,行x, y = y, x % y添加到代码中的是什么?

4 个答案:

答案 0 :(得分:8)

对于while,请阅读:http://docs.python.org/reference/compound_stmts.html#the-while-statement

它说“这反复测试表达式,如果是,则执行第一个套件;”

现在问题是:什么是真的?

阅读本文:http://docs.python.org/library/functions.html#bool

然后阅读:http://docs.python.org/library/stdtypes.html#truth-value-testing

非零值为True。零是错误的。

  

“x,y = y,x%y”这一行添加到代码中了什么?

作为一个问题,没有什么意义。 “添加到代码”?什么?什么部分令人困惑?

阅读本文:http://docs.python.org/reference/simple_stmts.html#assignment-statements

“如果目标列表是以逗号分隔的目标列表:对象必须是与目标列表中的目标具有相同数量的项目的可迭代对象,并且项目从左到右分配到相应的目标。“

对于整数'%'运算符,请阅读:http://docs.python.org/library/stdtypes.html#numeric-types-int-float-long-complex

如果您的问题更具体,那将会有所帮助。按要求回答很难。

答案 1 :(得分:4)

  1. y==0

  2. 时,循环停止
  3. 循环体同时将y分配给x,将x%y分配给y。否则,您需要一个临时变量来执行这两个分配,因为其中一个将被覆盖。

答案 2 :(得分:1)

只要while y不为零,表达式y就会迭代。

另一条线以原子方式执行两项操作:

new_x <-- old_x
new_y <-- old_x mod old_y

这为GCD执行欧几里德算法,元组赋值不需要临时变量。

答案 3 :(得分:0)

使用Euclidean algorithm

的最大公约数
while y != 0:
    temp = y
    y = x % y
    x = temp
return x