Застрял в l oop help - Python - PullRequest
       7

Застрял в l oop help - Python

0 голосов
/ 10 апреля 2020

Второй оператор if в середине этого кода использует 'или' между двумя условиями. Это вызывает проблему, я просто не знаю, как обойти это. Код проходит через файл данных и включает заданный номер реле в определенное время c, мне нужно сделать это только один раз для каждого реле. Если я использую 'и' между условиями, он включит только первое реле, которое соответствует текущему времени, будет ждать следующего часа и включит следующее заданное реле.

Может кто-нибудь предложить что-то, чтобы решить эту проблему, спасибо!

def schedule():
    metadata, sched = dbx.files_download(path=RELAYSCHEDULE)
    if not sched.content:
        pass  # If file is empty then exit routine
    else:
        relaySchedule = str(sched.content)
        commaNum = relaySchedule.count(',')
        data1 = relaySchedule.split(',')

        for i in range(commaNum):
            data2 = data1[i].split('-')
            Time1 = data2[1]
            currentRN = data2[0]
            currentDT = datetime.datetime.now()
            currentHR = currentDT.hour
            global RN
            global T
            if str(currentHR) == str(Time1):
                if T != currentHR or RN != currentRN:
                    relaynum = int(data2[0])
                    relaytime = int(data2[2])
                    T = currentHR
                    RN = currentRN
                    k = threading.Thread(target=SendToRelay(relaynum, relaytime)).start()
            else:
                print("Pass")

Желаемые входные данные:

sched.content = '1-19 -10,3-9-20,4-9-10, '

T =' '

RN =' '

T и RN являются глобальными переменными, поскольку l oop работает бесконечно, они там, чтобы сообщить l oop, были ли уже использованы указанные c Time (T) и номер реле (RN).

Желаемые выходы:

Если время равно 9:00, тогда

T = 9

RN должно быть любым заданным номером реле, поэтому RN = 3, но не уверен, что это правильная вещь.

Извините, если это сбивает с толку. Мне в основном нужно, чтобы программа считала набор запланированного времени для включения определенных реле c, мне нужно, чтобы он прочитал текущее время и, если он соответствует времени в расписании, то проверит, какое реле находится в это время, и включите его на какое-то время. После того, как он завершил это, мне нужно, чтобы он go превысил тот же набор данных в случае, если в это же время есть еще один ретранслятор, который также должен быть включен, проблема в том, что если я не использую переменные T и RN чтобы проверить, было ли установлено предыдущее реле, он будет читать файл и снова и снова включать одно и то же реле.

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

Я исправил это. Для всех, кто интересуется, это новый рабочий код:

def schedule():
metadata, sched = dbx.files_download(path=RELAYSCHEDULE)
if not sched.content:
    pass  # If file is empty then exit routine
else:
    relaySchedule = str(sched.content)
    commaNum = relaySchedule.count(',')
    data1 = relaySchedule.split(',')

    for i in range(commaNum):
        data2 = data1[i].split('-')
        TimeSched = data2[1]
        relaySched = data2[0]
        currentDT = datetime.datetime.now()
        currentHR = currentDT.hour
        global RN
        global T
        if str(currentHR) == str(TimeSched):
            if str(T) != str(currentHR):
                RN = ''
                T = currentHR

            if str(relaySched) not in str(RN):
                relaynum = int(data2[0])
                relaytime = int(data2[2])
                k = threading.Thread(target=SendToRelay(relaynum, relaytime)).start()
                RN = str(RN) + str(relaySched)
0 голосов
/ 10 апреля 2020

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

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