所以我有这个程序:
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语句来整理这两个数字。有谁知道为什么会发生这种事吗?
谢谢。
发布于 2013-03-03 17:54:25
您忘记了在lcm函数中return一些东西。
def lcm(x, y):
return (x * y) / gcd(x, y)当您在函数中没有显式返回任何内容时,Python会自动返回None。当您尝试lcm(r, 20)时,这与lcm(None, 20)相同,后者不起作用,因为您将lcm函数中的两个参数相乘-您不能执行None * 20。
然而,这会产生另一个错误--您的gcd函数也有问题!
当y % x为0时,错误就出现了,然后紧接着执行x % y。这将是一个可行的解决方案:
def gcd(x, y):
while y != 0:
x, y = y, x % y
return x这直接取自维基百科文章中的Euclid's algorithm (第2.2节)。
发布于 2013-03-03 18:02:15
在lcm()中使用gcd()有一个误解,你是在创建嵌套环境。gcd()的环境没有访问它返回的全局environment.anything的权限,它将被lcm()的environment.you访问。在lcm()中不向全局环境返回任何内容,所以默认情况下,python会返回None.to修复这个尝试:
def lcm(x, y):
return (x * y) / gcd(x, y)此外,您必须将此块添加到lcm()中,以避免抛出ZeroDivision异常:
def lcm(x, y):
try:
return (x * y) / gcd(x, y)
except ZeroDivisionError:
do whatever you want and return a value https://stackoverflow.com/questions/15184462
复制相似问题