Python上两个数字的最大公共除法器

Python上两个数字的最大公共除法器,python,for-loop,ident,Python,For Loop,Ident,我需要帮助来检查一些代码: def mcd(n1,n2): mxcd = 0 for i in range(1,n1): f = n1 % i for j in range(1,n2): g = n2 % j if (f == 0 and g == 0 and f == g): mxcd = f else: mxcd = "No hay comun divisor" return m

我需要帮助来检查一些代码:

def mcd(n1,n2):
  mxcd = 0
  for i in range(1,n1):  
    f = n1 % i  
    for j in range(1,n2):
      g = n2 % j 
      if (f == 0 and g == 0 and f == g): 
        mxcd = f  
      else: 
        mxcd = "No hay comun divisor"
  return mxcd 

我遇到了一些问题,因为它似乎从未输入第一个
if
,它总是输入
else
,我尝试更改缩进顺序,从第二个
中取出
if
,但它不起作用。如果有人能帮忙,那就太好了。

你可以先打印出
f
g
的状态,看看为什么
If
语句中没有发生任何事情

def mcd(n1,n2):
  mxcd = 0
  for i in range(1,n1):
    f = n1 % i
    print('i is {}, f is {}'.format(i, f))
    for j in range(1,n2):
      g = n2 % j
      print('\n  j is {}, g is {}'.format(j, g))
      if (f == 0 and g == 0 and f == g): 
        mxcd = f  
      else: 
        mxcd = "No hay comun divisor"
  return mxcd 
运行类似于
mcd(2,4)
的程序可以让您了解很多:

i is 1, f is 0
  j is 1, g is 0  
  j is 2, g is 0    
  j is 3, g is 1
'No hay comun divisor'
确实可以打开
if
语句,您可以使用类似的技巧看到该语句:

def mcd(n1,n2):
  mxcd = 0
  for i in range(1,n1):  
    f = n1 % i  
    for j in range(1,n2):
      g = n2 % j 
      if (f == 0 and g == 0 and f == g): 
        print('hello')
        mxcd = f  
      else: 
        mxcd = "No hay comun divisor"
  return mxcd 

> mcd(4,8)

hello
hello
hello
hello
hello
hello
'No hay comun divisor'

从这里开始,您需要纠正一些问题以获得正确的答案,但我将把这个练习留给您:)

如果您的
语句逻辑关闭,您的

你想要:

if (f==0 and g==0 and i==j):
    mxcd = i
你明白为什么吗


此函数还有其他一些问题,但这就是为什么
if
不起作用的原因

即使你找到了一个公约数,在循环的下一次迭代中,你只是用字符串“No hay…”覆盖它。这是一个非常简单的逻辑错误。尝试将行
mxcd=f
mxcd=“No hay…”
替换为打印语句,以便使用更具描述性的名称查看问题,这可能有助于使问题更加突出。