我试图在屏幕上找到对象,看看它们是否存在,如果存在,请选择它们。使用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
答案 0 :(得分:1)
for imageFile in imageFiles:
if exists(imageFile):
click(imageFile)
您的while
循环没有做任何事情,您的break
声明也没有。假设我明白你想做什么,这可能会做你想要的。
答案 1 :(得分:0)
更简单,这是过滤器的完美使用(ifexist,imageFiles)。然后你知道可以使用过滤器返回中的所有> = 0元素:)。而且它更简洁明了地传达了你的意图 - 更好的阅读然后是一连串的for和if
a = range(10)
# [1,2,3,4,5,6,7,8,9]
print filter(lambda x: x > 5, a)
# [6,7,8,9]
也是逻辑运算符:
e.g。
a = 5
b = 6
c = 5
if( (a==c) or (b==c) ):
print 'c is repeated'
# c is repeated
你对这里的使用毫无意义,因为它没有操作的操作数 - 这些甚至可以是两个对象,例如。
1或2,因为anything可以强制转换为布尔值
一种简洁的方式来做你想要的是: // imagepaths =您的图像路径列表
map(lambda x: click(x.getTarget()), filter(exists, imagepaths))
答案 2 :(得分:0)
在阅读了一些Sikuli文档之后,我认为可能也可以做你想做的事。
for impath in ("image/one.png", "image/two.png", "image/three.png"):
match = exists(impath)
if match:
click(match.getTarget())