从多个变量中选择

2024-09-28 01:34:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在屏幕上找到对象,看看它们是否存在,如果存在,请选择它们。使用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 RPARENa我做了一个快速搜索,但没有看到任何与我的特定问题相关的内容。在

我甚至试过了

^{pr2}$

结果是同样的错误。在

@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

Tags: or对象imageif屏幕png错误one
3条回答
for imageFile in imageFiles:
  if exists(imageFile):
    click(imageFile)

你的while循环没有做任何事情,你的break语句也没有做任何事情。如果我知道你想做什么,这可能会做你想做的。在

更简单的是,这是过滤器(ifexist,imageFiles)的完美使用。然后您就知道可以使用filter返回中的所有>;=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]

or也是逻辑运算符:

例如

^{pr2}$

在这里使用or是没有意义的,因为它没有操作数,甚至可以是两个对象,例如

1或2,因为anything可以转换为布尔值

做你想做的事情的简洁方法是: //imagepaths=您的imagepaths列表

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

在读了一点西库里的文献之后,我认为这篇文章也能达到你想要的效果。在

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

相关问题 更多 >

    热门问题