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
4

3 に答える 3

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

あなたのwhileループは何もしていませんし、あなたのbreakステートメントもありません。あなたがやりたいことを私が理解していると仮定すると、これはあなたが望むことをするかもしれません。

于 2013-07-25T20:37:53.690 に答える
0

Sikuliのドキュメントを少し読んだ後、これもあなたが望むことをするかもしれないと思います.

for impath in ("image/one.png", "image/two.png", "image/three.png"):
    match = exists(impath)
    if match:
        click(match.getTarget())
于 2013-07-25T20:51:12.243 に答える
0

さらに簡単なことに、これは filter(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]

or も論理演算子です。

例えば

a = 5
b = 6
c = 5

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

# c is repeated

or ここでの使用は、操作するオペランドがないため意味がありません。たとえば、これらは 2 つのオブジェクトである場合もあります。

何でもブール値にキャストできるため、1 または 2

あなたが望むことを行うための簡潔な方法は次のとおりです: //imagepaths = imagepaths のリスト

map(lambda x: click(x.getTarget()), filter(exists, imagepaths))
于 2013-07-25T20:45:23.483 に答える