繁体   English   中英

最小公分母,TypeError: 'float' object 不能解释为 integer,

[英]Least Common Denominator, TypeError: 'float' object cannot be interpreted as an integer,

对于给定的分母列表,通过找到它们的 LCM 来找到最小公分母。

例子

对于分母 = [2, 3, 4, 5, 6],output 应该是解(分母) = 60。

这是我的代码:


from math import gcd

def solution(denominators):
    return functools.reduce(lambda x,y: x * y / gcd(x,y), denominators)

但随后它说: TypeError: 'float' object 不能解释为 integer

任何建议,如何解决?

gcd arguments 是整数,因此在 reduce 的第二次迭代中传递的参数是:

gcd(2*3/gcd(2,3)'''<-this is a float''' , 4)

正路

def solution(denominators):
   return functools.reduce(lambda x,y: x * y , denominators) / functools.reduce(lambda x,y: gcd(x,y) , denominators)

首先需要导入functools ,如下:

from math import gcd
import functools
def solution(denominators):
    return functools.reduce(lambda x,y: x * y / gcd(x,y), denominators)

然后让我们尝试 list test_list = [2, 3, 4, 5, 6] ,它返回:

TypeError: 'float' object cannot be interpreted as an integer

问题是在/结果中您正在创建一个浮点数。 /总是返回一个浮点数。 解决方案是使用 int 除法运算符// //返回一个 integer。 例如:

a = 1
b = 2
int_div  = a // b
print(int_div)

返回0

因此解决方案是使用:

functools.reduce(lambda x,y: x * y // gcd(x,y), denominators)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM