所以我有这个程序:
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))
好的,所以我现在已经解决了这个问题,感谢这篇文章的答案,但为什么会这样:
def gcd(x, y):
while y % x != 0:
y = y % x
x = x % y
return y
def lcm(x, y):
return (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))
返回:
ZeroDivisonError: float modulo
抱怨第二行,我收集我可能需要某种if
语句来将这两个数字按顺序排列。
任何人都知道为什么会发生这种情况?
感谢。
答案 0 :(得分:2)
您忘记了return
函数中的lcm
内容。
def lcm(x, y):
return (x * y) / gcd(x, y)
如果没有在函数中显式返回任何内容,Python会自动返回None
。当您尝试lcm(r, 20)
时,lcm(None, 20)
与lcm
相同,由于您在None * 20
函数中将两个参数相乘,因此无法正常工作 - 您无法gcd
。< / p>
然而,这会产生另一个错误 - 您的y % x
功能也存在问题!
当0
为x % y
时出现错误,然后您就会def gcd(x, y):
while y != 0:
x, y = y, x % y
return x
。这将是一个有效的解决方案:
{{1}}
这是直接来自维基百科文章(第2.2节)中的Euclid's algorithm。
答案 1 :(得分:0)
这里存在误解。当您在gcd()
内使用lcm()
时,您正在创建嵌套环境。 gcd()
的环境无法访问全局环境。它返回的任何内容都可以被lcm()
的环境访问。您不会在{{1}中向全局环境返回任何内容。因此,python默认返回lcm()
。来修复此尝试:
None
您还必须将此块添加到def lcm(x, y):
return (x * y) / gcd(x, y)
以避免抛出lcm()
例外:
ZeroDivision