Проблема с циклом While или, возможно, что-то еще?

#python #time #while-loop #timer #psutil

Вопрос:

Су, я ученик, и я совсем новичок в кодировании. Я хочу создать приложение, которое запускает таймер при запуске игры (в частности, игры Valorant), которую я получаю, выполняя поиск, запущен ли процесс игры. Затем я получаю уведомления от приложения каждые 30 минут. Наконец, когда я закрываю игру, приложение должно приостановить таймер и сообщить мне, как долго я играл. Однако, когда я закрываю игру, таймер не останавливается, и я обнаружил, что приложение никогда не понимает, что процесс прекратился, даже если я использую цикл while. Это код: Заранее благодарю вас!

из win10toast импорт ToastNotifier импорт блока питания время импорта расписание импорта

значение show_name(): игра = «VALORANT-Win64-Shipping.exe» в (i.name() для i в файле psutil.process_iter())

 if game == True:

    def timer():
        game = "VALORANT-Win64-Shipping.exe" in (i.name() for i in psutil.process_iter())
        m = 0
        s = 0

        while game == True:

            time.sleep(1)
            s  = 1
            print(m , s)

            if s == 59:

                m  =1
                s = 0

                if m == 30:
                    toast = ToastNotifier()
                    toast.show_toast("Hello!", "You have been playing for 30 minutes", duration=20)
                elif m == 60:
                    toast = ToastNotifier()
                    toast.show_toast("Hello!", "You have been playing for an hour", duration=20)
                elif m == 90:
                    toast = ToastNotifier()
                    toast.show_toast("Hello!", "You have been playing for 1 hour and 30 minutes", duration=20)
                elif m == 120:
                    toast = ToastNotifier()
                    toast.show_toast("Hello!", "You have been playing for 2 hours", duration=20)
        else:
            toast = ToastNotifier()
            toast.show_toast("Hello!", "You have played for "   str(m)   " minutes and "   str(s)   " seconds!", duration=20)

    schedule.every(4).seconds.do(timer)
 

расписание.каждые(4).seconds.do(показать имя)

в то время как 1: schedule.run_pending() время.сна(1)

Комментарии:

1. В вашем коде есть некоторое дублирование, и первая и последняя части неправильно отформатированы. Не могли бы вы это убрать?

Ответ №1:

Причина, по которой цикл while не прерывается, заключается в том, что вы не изменяете переменную игры в цикле while. Это означает, что, если игра верна в начале, while game == True это то же while True самое, что и цикл. Вам нужно повторно проверять игру на каждой итерации.

пробовать While"VALORANT-Win64-Shipping.exe" in (i.name() for i in psutil.process_iter()):

Кстати, вы можете напрямую писать While game: вместо While game == True

Комментарии:

1. Спасибо тебе большое, ха-ха!! В этом-то и была проблема! Хорошего дня!! =)