Как написать цикл while, который будет работать за несколько часов - PullRequest
0 голосов
/ 11 июля 2019

Я создаю тест для Google Assistant на основе цикла while. Код будет воспроизводить длинный mp3-файл, и я пытаюсь определить, будет ли помощник выполнять ложный триггер и сколько раз считать.

Я работаю на pycharm / pytest и получаю статус триггера с помощью UIAutomator, предоставленного Google.

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 ]

1 голос
/ 11 июля 2019

Вы используете оператор or, когда вы должны использовать оператор and:

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

С вашим текущим кодом цикл while завершается только тогда, когда ОБА условия False, когда вы действительно хотите, чтобы он завершился, когда один или другой False.

1 голос
/ 11 июля 2019

Вам нужно поменять or в вашем коде на and, как показано ниже:

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 триггеров, поэтому цикл все еще работает)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...