2013-07-25 58 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