代码之家  ›  专栏  ›  技术社区  ›  LucSpan

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

  •  -2
  • LucSpan  · 技术社区  · 6 年前

    组织

    我在找所有的整数对 (x,y) 在2个封闭集合中: [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 回复  |  直到 6 年前
        1
  •  4
  •   Patrick Artner    6 年前

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

    这样比较通常更好:

    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

        2
  •  2
  •   quantik JAA    6 年前

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

    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来自元素数量不等的列表,所以不能像那样循环