如何编写一个将在数小时内运行的while循环

时间:2019-07-11 17:02:14

标签: python while-loop

我正在基于while循环为Google Assistant创建一个测试。该代码将播放一个很长的mp3文件,我试图确定该助手是否会触发错误并计数多少次。

我正在pycharm / pytest上运行,并通过Google提供的UIAutomator获取触发状态。

import android
import time

play_music(music.mp3)
start_time = time.time()
trigger = 0
hours = 1
command_timeout = hours * 60 * 60
while trigger < 3 or time.time() - start_time < command_timeout:
   if trigger_screen.is_in_screen():
       trigger += 1
       time.sleep(10)
stop_music()

停止循环的条件是3次错误触发或一小时的测试,但是在一小时的测试后循环并没有停止,有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

您需要将代码中的orand交换,如下所示:

import android
import time

play_music(music.mp3)
start_time = time.time()
    trigger = 0
    hours = 1
    command_timeout = hours * 60 * 60
    while trigger < 3 and time.time() - start_time < command_timeout:
        if trigger_screen.is_in_screen():
            trigger += 1
            time.sleep(10)
stop_music()

基本上,只要满足以下条件之一,您编写的代码就会继续循环,这说明了为什么音乐继续播放(少于3个触发器,因此循环仍在运行)

答案 1 :(得分:1)

当您应该使用or语句时,您正在使用and语句:

while trigger < 3 and time.time() - start_time < command_timeout:

使用当前代码,仅当两个条件均满足时,while循环才会终止 False,当您真的希望当其中一个为False时终止它。