[英]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)}
對於第一個,您使用的是賦值運算符而不是等效運算符,因此它應該是:
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.