Выбор из нескольких переменных
Я пытаюсь найти объекты на экране, посмотреть, существуют ли они, и если да, выберите их. Использование библиотеки 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
3 ответа
for imageFile in imageFiles:
if exists(imageFile):
click(imageFile)
Ваш while
цикл ничего не делает, и ваш break
заявление. Это может делать то, что вы хотите, если я понимаю, что вы хотите сделать.
Прочитав немного документации по Sikuli, я думаю, что это также может сделать то, что вы хотите.
for impath in ("image/one.png", "image/two.png", "image/three.png"):
match = exists(impath)
if match:
click(match.getTarget())
Еще проще, это идеальное использование фильтра (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, так как все может быть приведено к логическому
краткий способ сделать то, что вы хотите, это: //imagepaths = ваш список imagepaths
map(lambda x: click(x.getTarget()), filter(exists, imagepaths))