我找到了这个最大的共同点代码:
def gcd(x,y):
while y:
x, y = y, x % y
return x
我无法理解while y
的含义,因为y
是一个整数。它是如何工作的?此外,行x, y = y, x % y
添加到代码中的是什么?
答案 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)
当y==0
。
循环体同时将y
分配给x
,将x%y
分配给y
。否则,您需要一个临时变量来执行这两个分配,因为其中一个将被覆盖。
答案 2 :(得分:1)
只要while y
不为零,表达式y
就会迭代。
另一条线以原子方式执行两项操作:
new_x <-- old_x
new_y <-- old_x mod old_y
这为GCD执行欧几里德算法,元组赋值不需要临时变量。
答案 3 :(得分:0)
while y != 0:
temp = y
y = x % y
x = temp
return x