减少python中的if语句

减少python中的if语句,python,Python,我正在做一个程序,它在一个列表上迭代,现在它是一个巨大的if语句列表: def next_button(): print('Finding next button...') continue_blue = pyautogui.locateOnScreen( 'continueblue.jpg', confidence=0.9) continue_red = pyautogui.locateOnScreen( 'continuered.jpg

我正在做一个程序,它在一个列表上迭代,现在它是一个巨大的if语句列表:

def next_button():
    print('Finding next button...')
    continue_blue = pyautogui.locateOnScreen(
        'continueblue.jpg', confidence=0.9)
    continue_red = pyautogui.locateOnScreen(
        'continuered.jpg', confidence=0.9)
    next_button4 = pyautogui.locateOnScreen(
        'continue4.jpg', confidence=0.9)
    next_button5 = pyautogui.locateOnScreen(
        'continue5.jpg', confidence=0.9)
    next_button6 = pyautogui.locateOnScreen(
        'continue6.jpg', confidence=0.9)
    next_button7 = pyautogui.locateOnScreen(
        'continue7.jpg', confidence=0.9)
    next_button9 = pyautogui.locateOnScreen(
        'continue9.jpg', confidence=0.9)
    if continue_blue:
        pause()
        pyautogui.click(continue_blue)
    if continue_red:
        pause()
        pyautogui.click(continue_red)
    if next_button4:
        pause()
        pyautogui.click(next_button4)
    if next_button5:
        pause()
        pyautogui.click(next_button5)
    if next_button6:
        pause()
        pyautogui.click(next_button6)
    if next_button7:
        pause()
        pyautogui.click(next_button7)
    if next_button9:
        pause()
        pyautogui.click(next_button9)
    print('Next clicked')

显然,这真的很难看,而且不符合枯燥的代码。如何减少函数中if语句的数量?关于如何改进这一点,还有其他建议吗?谢谢大家!

不要将按钮作为单独的变量,而是将它们排列成一个列表:

buttons = [
    pyautogui.locateOnScreen('continueblue.jpg', confidence=0.9),
    pyautogui.locateOnScreen('continuered.jpg', confidence=0.9),
    ...
]
然后您可以对它们进行迭代:

for button in buttons:
    if button:
        pause()
        pyautogui.click(button)

把它转换成一个循环

buttons = ['continueblue.jpg', 'continuered.jpg', ...]
def next_button():
    for button_img in buttons:
        button_obj = pyautogui.locateOnScreen(
            button_img, confidence=0.9)
        if button_obj:
            pause()
            pyautogui.click(button_obj)

我不知道订单是否重要,但您可以尝试以下解决方案:

def next_button():
    print('Finding next button...')
    images = ['continueblue.jpg','continuered.jpg', 'continue4.jpg', 'continue5.jpg','continue6.jpg', 'continue7.jpg', 'continue9.jpg'
    for im in images:
       continue_var = pyautogui.locateOnScreen(im, confidence=0.9)
       if continue_var:
           pause()
           pyautogui.click(continue_var)

循环浏览所有按钮图像并单击(如果找到)。请注意,如果找到多个按钮,它将单击多个按钮,就像在脚本中一样

def next_按钮():
打印('查找下一步按钮…')
按钮图片=[
“continueblue.jpg”,
“continuered.jpg”,
“continue4.jpg”,
“continue5.jpg”,
“continue6.jpg”,
“continue7.jpg”,
“continue9.jpg”
]
对于按钮图像中的按钮图像:
button=pyautogui.Locate屏幕(按钮图像,置信度=0.9)
如果按钮:
暂停()
pyautogui。单击(按钮)
打印('单击下一步')
导入pyautogui

arr['continueblue.jpg','continuered.jpg','continue4.jpg','continue5.jpg','continue6.jpg','continue7.jpg','continue9.jpg']

对于arr中的i: 如果pyautogui.locateOn屏幕(i,置信度=0.9): pyautogui.click(pyautogui.locateOnScreen(i,置信度=0.9)) 中断


打印(“单击下一步”)

您可以使用部分功能来避免在许多地方重复。最后,将所有操作放在dictionary中,并使用其键和函数调用括号调用该dictionary。 下面是一段伪代码

from functools import partial

def next_button(jpg, conf):
    next_b = pyautogui.locateOnScreen(jpg, confidence=conf)
    pause()
    pyautogui.click(next_b)

action = {
    continue_blue : partial(next_button, 'continueblue.jpg', 0.9)
    continue_red : partial(next_button, 'continuered.jpg', 0.9)
    next_button4 : partial(next_button, 'continue4.jpg', 0.9)
    next_button5 : partial(next_button, 'continue5.jpg', 0.9)
    ------
    ------
}

action['continue_red']()

使用
dict
可能会在某种程度上有所帮助。谢谢!这基本上就是我要找的。循环是一个完美的解决方案!你好,谢谢!我正在寻找一个循环,并使用了你的一些想法,以使程序更好@他们赢了,只有到那时你才能接受吗?干杯完成。再次感谢!