Сделайте что-нибудь в зависимости от текущего времени (минут) - PullRequest
0 голосов
/ 12 июля 2020

Я пытаюсь выполнить c мой код в зависимости от текущего времени ... например, если минуты (05, 10, 15, 20, 25,30), сделайте что-нибудь ...

t = time.localtime()
current_time = time.strftime("%M", t)

my_list = [05, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55]

if current_time == my_list:
    print("its time to do something")

Я тоже пытался сделать это с помощью модуля, но он не работал.

t = time.localtime()
current_time = time.strftime("%M", t)

if current_time % 5:
    print("its time to do something")

С уважением!

Ответы [ 3 ]

0 голосов
/ 12 июля 2020

Вы очень близки. Просто используйте существующие методы внутри вашего объекта времени, чтобы получить такие минуты.

import time
now = time.localtime()
current_time = now.tm_min
# or tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, ...

if current_time % 5:
    print("its time to do something")
0 голосов
/ 12 июля 2020

В вашем первом примере есть пара несовпадающих типов данных. Поскольку time.strftime возвращает str (строку), вы не можете сравнивать ее с int (целые числа), которые присутствуют в my_list. Более того, вы пытаетесь сравнить current_time (это строка) с целым list. Итак, первый пример можно исправить следующим образом:

import time
t = time.localtime()
current_time = time.strftime("%M", t)    # here still a string
current_time = int(current_time)         # converted to integer

my_list = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55]    # note these are all integers, so 05 is just 5

if current_time in my_list:    # note operator "in"
    print("its time to do something")

Мне лично больше нравится операция по модулю, так как она более лаконична. Однако вам нужно помнить, что 0 оценивается как False, поэтому ваш оператор не сработает, когда вы захотите. Итак, вы можете отрицать оператор с помощью if not, но для удобства чтения я бы просто явно поставил сравнение с желаемым значением 0:

import time
t = time.localtime()
current_time = time.strftime("%M", t)    # here still a string
current_time = int(current_time)         # converted to integer

if current_time % 5 == 0:                # note the explicit comparison with 0
    print("its time to do something")

И, конечно, вместо того, чтобы делать полное преобразование time.strftime и int, вы можете просто использовать более компактный tm_min:

import time
current_time = time.localtime()

if current_time.tm_min % 5 == 0:                # note the explicit comparison with 0
    print("its time to do something")
0 голосов
/ 12 июля 2020

time.strftime("%M", t) возвращает объект str. Ваш список состоит из целых чисел. Используйте int () для вашего текущего времени, чтобы изменить его на целое число. Теперь он соответствует типу списка, и вы можете выполнять над ними арифметические c выражения.

Я добавил небольшой скрипт, чтобы объяснить это дальше:

import time
t= time.localtime()
current_time=time.strftime("%M",t)

print("current_time is of type",type(current_time))

current_time=int(current_time)

if(current_time % current_time)==0:
    print('It is integer and works now')

Результат:

 current_time is of type <class 'str'> 
 It is integer and works now
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...