让Python找到满足条件的两个整数

时间:2018-03-10 15:35:33

标签: python integer set conditional-statements

设置向上

我正在寻找2个封闭集合中的所有整数对(x,y)[822,2000][506,1231],以便x/y=1.624

到目前为止

代码

我试过了,

a = [[(x,y)] for x in range(822,2001) and y in range(506,1232) if x/y = 1.624]

但是这会在代码中指向SyntaxError: invalid syntax =

如果我这样做,

a = [[(x,y)] for x in range(822,2001) and y in range(506,1232) if x/y <= 1.624]

我得到NameError: name 'y' is not defined

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

由于浮点算法的性质,将浮点计算与==进行比较是很困难的。

这样比较通常更好:

a = [(x,y) for x in range(822,2001) for y in range(506,1232) if abs(x/y - 1.624) < 0.00001] 
print(set(a)) 

通过从结果中减去所需的值,并将其绝对值与某种小的值进行比较,可以获得更好的结果。

结果(使用一套):

{(1624, 1000), (1637, 1008), (1015, 625), (1611, 992), (1840, 1133), 
 (1814, 1117), (1827, 1125), (1408, 867), (1218, 750), (1434, 883), 
 (1421, 875)}

Python rounding error with float numbers

答案 1 :(得分:2)

对于第一个,您使用赋值运算符而不是等效运算符,因此它应该是:

a = [[(x,y)] for x in range(822,2001) and y in range(506,1232) if x/y == 1.624]

对于第二个你可能最好使用两个for循环

a = [[(x,y)] for x in range(822,2001) for y in range(506,1232) if x/y <= 1.624]

第二个就像你说的那样没有意义,因为x和y来自具有不等数量元素的列表,所以你不能像那样循环它们