簡體   English   中英

讓 Python 找到兩個滿足條件的整數

[英]Let Python find two integers satisfying condition

設置

我正在尋找 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

我該如何解決這個問題?

由於浮點運算的性質,將浮點計算與 == 進行比較是很困難的。

像這樣比較通常更好:

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舍入錯誤

對於第一個,您使用的是賦值運算符而不是等效運算符,因此它應該是:

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 來自元素數量不等的列表,所以你不能像那樣循環它們

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM