调试Python程序LCM

2024-06-06 16:52:50 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个程序:

def gcd(x, y):
    while y % x != 0:
        y = y % x
        x = x % y
    return y
def lcm(x, y):
    (x * y) / gcd(x, y)
a = lcm(1, 2)
b = lcm(3, a)
c = lcm(b, 4)
d = lcm(5, c)
e = lcm(6, d)
f = lcm(e, 7)
g = lcm(f, 8)
h = lcm(9, g)
i = lcm(h, 10)
j = lcm(11, i)
k = lcm(12, j)
l = lcm(k, 13)
m = lcm(l, 14)
n = lcm(15, m)
o = lcm(n, 16)
p = lcm(17, o)
q = lcm(18, p)
r = lcm(q, 19)
print(lcm(r, 20))

好吧,多亏了这篇文章的回答,我现在已经解决了这个问题,但为什么要这样:

^{pr2}$

返回这个:

ZeroDivisonError: float modulo

抱怨第二行,我想我可能需要某种if语句来将这两个数字排序。 有人知道为什么会这样吗?
谢谢。在


Tags: 程序returnifdef数字语句floatprint
2条回答

有个误会在这儿。什么时候如果在lcm()内使用gcd(),则创建的是嵌套环境。gcd()的环境无法访问全局环境。什么它返回的,将由lcm()的环境。你不要将任何内容返回到lcm()中的全局环境,因此python默认情况下返回None。要修复此问题,请尝试:

def lcm(x, y):
    return (x * y) / gcd(x, y)

您还必须将此块添加到lcm()以避免引发ZeroDivision异常:

^{pr2}$

您忘记了return函数中的某个内容。在

def lcm(x, y):
    return (x * y) / gcd(x, y)

{t>在Python函数中显式返回lcm(r, 20)时,这与lcm(None, 20)是一样的,因为在lcm函数中将这两个参数相乘-你不能做None * 20。在

但是这将产生另一个错误-gcd函数也有问题!在

y % x0,然后您直接执行x % y时,就会出现错误。这将是一个可行的解决方案:

^{pr2}$

这是直接取自维基百科文章中的Euclid's algorithm(第2.2节)。在

相关问题 更多 >