终于搞懂python中while True和if、else结合使用的逻辑了!

先来个总结提炼:

while True → 目的是为了无限循环

if、else → 是为了条件判断:
本身if、else两个分支,每个都只会执行一次
走了if分支,else分支就拜拜
走了else分支,if分支就拜拜

结合在一起使用:
走if分支,那就无限循环if下面的语句
走else分支,那就无限循环else下面的语句
满足条件 - 跳出循环 - break


看似几句很简单的话,但是写代码逻辑的时候真的让我头大,现在记录下来,防止以后自己会再次忘记


下面是我在学习appium时敲的代码,场景是删除回收站里的内容,内容不重要,主要是看逻辑!!!!


写法一:
(if条件判断,如果条件不满足,执行正常的删除操作)

while True:
    project_rubbish = driver.find_elements_by_xpath(
        '//android.widget.RelativeLayout[@resource-id="com.teambition.teambition:id/root_rl"]') #回收站列表
    if project_rubbish == []:
        print('无项目可删')
        break
    # 这里不要写else,写了else会报错
    time.sleep(1)
    driver.find_element_by_xpath(
        '//android.widget.RelativeLayout[@resource-id="com.teambition.teambition:id/root_rl"]').click()
    # 进入项目中,点击右上角选项
    time.sleep(1)
    driver.find_element_by_accessibility_id('项目动态').click()
    # 点击右上角齿轮
    driver.find_element_by_id('com.teambition.teambition:id/img_setting').click()
    # 做判断,判断彻底删除项目是否存在在当前界面,不存在就滑动
    while True:
        elements = driver.find_elements_by_id('com.teambition.teambition:id/delete_layout')
        if elements == []:
            driver.swipe(600, 1600, 600, 600, 1000)
        else:
            elements[0].click()
            break
    # 点击“确定”
    driver.find_element_by_id('android:id/button1').click()

driver.quit()

写法二:

while True:
    project_rubbish = driver.find_elements_by_xpath(
        '//android.widget.RelativeLayout[@resource-id="com.teambition.teambition:id/root_rl"]')
    if project_rubbish != []:
        time.sleep(1)
        driver.find_element_by_xpath(
            '//android.widget.RelativeLayout[@resource-id="com.teambition.teambition:id/root_rl"]').click()
        # 进入项目中,点击右上角选项
        time.sleep(1)
        driver.find_element_by_accessibility_id('项目动态').click()
        # 点击右上角齿轮
        driver.find_element_by_id('com.teambition.teambition:id/img_setting').click()
        # 做判断,判断彻底删除项目是否存在在当前界面,不存在就滑动
        while True:
            elements = driver.find_elements_by_id('com.teambition.teambition:id/delete_layout')
            if elements == []:
                driver.swipe(600, 1600, 600, 600, 1000)
            else:
                elements[0].click()
                break
        # 点击“确定”
        driver.find_element_by_id('android:id/button1').click()
    else:
        print('无项目可删了')
        break
driver.quit()

写法三—错误的写法,逻辑不对:
(2021年9月1日15点35分:我自己执行的时候偶尔又不会报错,可以正常跑通,但是还是推荐前两种,这种暂不建议)
(2021年9月1日15点04分:while一直循环else里面的语句,如果回收站全部删除完成,while仍然会执行else里面的语句,这个时候就会报错。因为这里没有进入到if分支,就没有做是否是空列表的判断,所以继续执行else里面找元素定位的语句,接下来找不到就报错了)

while True:
    project_rubbish = driver.find_elements_by_xpath(
        '//android.widget.RelativeLayout[@resource-id="com.teambition.teambition:id/root_rl"]') #回收站列表
    if project_rubbish == []:
        print('无项目可删')
        break
# ---------------------这里因为没有进入到if分支,就没有做判断--做是否是空列表的判断-----------------------------------------
    else:
        time.sleep(1)
        driver.find_element_by_xpath(
            '//android.widget.RelativeLayout[@resource-id="com.teambition.teambition:id/root_rl"]').click()
        # 进入项目中,点击右上角选项
        time.sleep(1)
        driver.find_element_by_accessibility_id('项目动态').click()
        # 点击右上角齿轮
        driver.find_element_by_id('com.teambition.teambition:id/img_setting').click()
        # 做判断,判断彻底删除项目是否存在在当前界面,不存在就滑动
        while True:
            elements = driver.find_elements_by_id('com.teambition.teambition:id/delete_layout')
            if elements == []:
                driver.swipe(600, 1600, 600, 600, 1000)
            else:
                elements[0].click()
                break
        # 点击“确定”
        driver.find_element_by_id('android:id/button1').click()

重要的是逻辑,如果有同样兴趣,我们可以一起交流,笔芯~

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值