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…”
替换为打印语句,以便使用更具描述性的名称查看问题,这可能有助于使问题更加突出。