所以我有一个程序:
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
语句来将这两个数字排序。
有人知道为什么会这样吗?
谢谢。在
有个误会在这儿。什么时候如果在
lcm()
内使用gcd()
,则创建的是嵌套环境。gcd()
的环境无法访问全局环境。什么它返回的,将由lcm()
的环境。你不要将任何内容返回到lcm()
中的全局环境,因此python默认情况下返回None
。要修复此问题,请尝试:您还必须将此块添加到
^{pr2}$lcm()
以避免引发ZeroDivision
异常:您忘记了
return
函数中的某个内容。在{t>在Python函数中显式返回lcm(r, 20)时,这与
lcm(None, 20)
是一样的,因为在lcm
函数中将这两个参数相乘-你不能做None * 20
。在但是这将产生另一个错误-
gcd
函数也有问题!在当
^{pr2}$y % x
是0
,然后您直接执行x % y
时,就会出现错误。这将是一个可行的解决方案:这是直接取自维基百科文章中的Euclid's algorithm(第2.2节)。在
相关问题 更多 >
编程相关推荐