欧几里得求最大公约数报错
def gcd (x,y):while x%y== 0 :
a = y
y = x% y
x = a
return (a)
报错Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
gcd (2,4)
File "C:\Users\000\AppData\Local\Programs\Python\Python38\爱因斯坦计算题处理方法.py", line 6, in gcd
return (a)
UnboundLocalError: local variable 'a' referenced before assignment
原因是什么啊,求解答
def gcd(x, y):
while y:
a = x % y
x = y
y = a
return x
帮你改好了你的错误原因是运用了局部变量a
还有,你为什么要写x % y == 0呢,这样写是不对的 因为这样写,只有当x % y == 0 时才会运行while的语句,否则直接返回x的值 本帖最后由 jackz007 于 2020-3-1 11:40 编辑
while x%y== 0 :
a = y
y = x% y
x = a
局部变量 a 的作用域仅限于 while 循环内部,在循环以外失效。
由于语句
return (a)
不在 while 循环以内,所以,会产生 “变量 a 没定义” 的错误
其实,可以不用临时变量
def gcd (x , y):
while y :
x , y = y , x % y
return x
jackz007 发表于 2020-3-1 11:29
局部变量 a 的作用域仅限于 while 循环内部,在循环以外失效。
由于语句
您好
x , y = y , x % y
这个语句是同时赋值的嘛,会不会因为x 先被赋值了y, y的计算结果被改变? 蒋博文 发表于 2020-3-1 11:23
帮你改好了你的错误原因是运用了局部变量a
谢谢! a8541695 发表于 2020-3-1 12:01
您好
x , y = y , x % y
这个语句是同时赋值的嘛,会不会因为x 先被赋值了y, y的计算结果被改变?
你多虑了,这个表达式所有变量的赋值是同时进行的,没有先后顺序,完全就是我们所希望的效果。 jackz007 发表于 2020-3-1 12:09
你多虑了,这个表达式所有变量的赋值是同时进行的,没有先后顺序,完全就是我们所希望的效果。
十分感谢
页:
[1]