2013-07-25 57 views
0

我正試圖在屏幕上查找對象,看看它們是否存在,如果有,請選擇它們。使用Sikuli庫運行這個小自動化。從多個變量中選擇

while True: 
    if exist("image/one.png", "image/two.png", "image/three.png"): 
     click ("image/one.png", or "image/two.png", or "image/three.png") 
    break 

我得到一個SyntaxError: mismatched input 'or' expecting RPAREN我做了一個快速的搜索,但沒有什麼,我看到有關我的具體問題。

我甚至試過

while True: 
     if exist("image/one.png", or "image/two.png", or "image/three.png"): 
      click ("image/one.png", or "image/two.png", or "image/three.png") 
     break 

而這導致了同樣的錯誤。

@Stephan:錯誤的新代碼片段。

class gameImages(): 
    imageFiles = ["one.png", "two.png", "three,png"] 

for imageFile in imageFiles: 
    if exists(imageFile): 
     click(imageFile) 

現在的錯誤,:

NameError: name 'imageFiles' is not defined 
+1

你爲什麼把這些'或'放入?你不能在逗號後面加上'或'。你從事什麼樣的工作? –

+0

如果您用'|'替換'或',該怎麼辦? – refi64

+0

@DavidRobinson我看到之前做過的事情,不記得在哪裏。你是說刪除逗號,它應該起作用嗎? – Dave

回答

1
for imageFile in imageFiles: 
    if exists(imageFile): 
    click(imageFile) 

while循環沒有做任何事情,也不是你的break聲明。假設我明白你想要做什麼,這可能做你想做的事。

+0

獲取'SyntaxError:在輸入處沒有可行的替代方案'if'' – Dave

+0

@Dave是否設置了帶有圖像文件列表的imageFiles?你是否也準確地複製了我的代碼?該錯誤意味着語法問題 – Stephan

+0

我做過了,一定有錯。再次複製。我有'NameError:name'imageFiles'沒有定義'我創建了一個列表'imageFiles = [「x」,「x」,「x」]'所以不知道爲什麼我沒有定義。 – Dave

0

更簡單,這是一個完美的過濾器(ifexist,imageFiles)。然後你知道可以使用過濾器返回中的所有> = 0個元素:)。而且它更簡潔,清晰地傳達你的意圖 - 好得多閱讀,然後對的鏈條,如果是

a = range(10) 
# [1,2,3,4,5,6,7,8,9] 

print filter(lambda x: x > 5, a) 
# [6,7,8,9] 

另外,或者是一個邏輯運算符:

例如

a = 5 
b = 6 
c = 5 

if((a==c) or (b==c)): 
    print 'c is repeated' 

# c is repeated 

您的使用或在這裏是沒有意義的,因爲它不具有操作數進行操作 - 這甚至可以是兩個物體,例如

1或2,因爲anything可以轉換爲布爾

一個簡潔的方式做你想要的是: // imagepaths =您的imagepaths

map(lambda x: click(x.getTarget()), filter(exists, imagepaths)) 
0

的列表中讀取一點後Sikuli文件,我認爲這也許也做你想做的。

for impath in ("image/one.png", "image/two.png", "image/three.png"): 
    match = exists(impath) 
    if match: 
     click(match.getTarget()) 
+0

這扔了一個瘋狂的錯誤:見原來的問題上面。 – Dave

+0

這超出了我的意思,但我認爲提到整個lotta Java的錯誤可能是庫本身的一個問題。如果代碼錯了,你應該得到一個熟悉的Python追溯。但另一方面,我可能只是在我自己的辯護中發言:) – RussW

+0

...好吧,所以sikuli使用Jython,這就解釋了這一點。雖然我不能告訴你錯誤是什麼意思,因爲我不知道Java,或者如果這是正常的Jython錯誤消息。 – RussW