Как извлечь и сравнить данные из заданного списка кортежей? - PullRequest
0 голосов
/ 08 декабря 2018

КОД:

import datetime


data = [('09', '55', None, 'AC is on', None), ('10', '00',None, 'AC is on', None),('10', '13','fan is on', 'AC is on', 'light is on')]


def calc(data):

    print(data)               #prints the whole table
    while True:
        h=datetime.datetime.today().strftime("%H")              
        mi=datetime.datetime.today().strftime("%M")
        # z=[(i[2],i[3],i[4]) for i in data if i[0] == h and i[1]==mi]
        for i in data: 
            if i[0] == h and i[1]==mi:
                print (i[2],i[3],i[4])
                # sleep(60)
                break

if __name__ == '__main__':
    calc(data)

Первые 2 элемента в «данных» - это часы и минуты, введенные пользователем.Код должен принимать введенные пользователем значения, то есть данные здесь.и должен проверить текущее время и вывести i [2], i [3], i [4], как показано в коде.

1) Я просто хочу, чтобы значения были напечатаны один раз.Но он продолжает проверять и печатает значение в течение 1 минуты.Оператор перерыва не работает.

2) Кроме того, можно ли как-то проверить, а не напечатать none?

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Если я правильно понял, вы хотите, чтобы ваша программа запускалась до тех пор, пока она не найдет совпадение между текущим временем и временем, указанным в одном из кортежей (i) в data: (data[i][0], data[i][1]), а затем напечатайтеостальная часть кортежа: i[2:5]

  1. break находится в области действия цикла for, а не в цикле while.Вы выходите из цикла for, да, а не из своего бесконечного цикла * 1012.
  2. Я бы предпочел сделать while match_not_found:, затем установить match_not_found = True и получить строку match_not_found = False перед вашим breakоператор.
  3. Вы можете использовать нарезку списка, если собираетесь использовать все оставшиеся элементы кортежа.
  4. Я добавил дополнительные if, чтобы исключить None печатных элементов

Вот так:

import datetime


data = [('09', '55', None, 'AC is on', None), ('10', '00',None, 'AC is on', None),('10', '13','fan is on', 'AC is on', 'light is on')]


def calc(data):

    print(data)               #prints the whole table
    match_not_found = True

    while match_not_found:
        h=datetime.datetime.today().strftime("%H")              
        mi=datetime.datetime.today().strftime("%M")
        # z=[(i[2],i[3],i[4]) for i in data if i[0] == h and i[1]==mi]
        for i in data: 
            if i[0] == h and i[1]==mi:
                print ([j for j in i[2:5] if j != None])
                match_not_found = False
                break

if __name__ == '__main__':
    calc(data)
0 голосов
/ 08 декабря 2018

Я сделал несколько изменений в коде.

Я не знаю, почему вы используете While = True.Из-за чего это НЕ выходит из цикла.Поэтому я удалил его

Только что добавил оператор else для проверки, вы можете удалить его

import datetime


data = [('09', '55', None, 'AC is on', None), ('10', '00',None, 'AC is on', None),('10', '13','fan is on', 'AC is on', 'light is on')]


    def calc(data):

        print(data)               #prints the whole table
        # while True:
        h=datetime.datetime.today().strftime("%H")
        print(h)              
        mi=datetime.datetime.today().strftime("%M")
        print(mi)
        # z=[(i[2],i[3],i[4]) for i in data if i[0] == h and i[1]==mi]
        for i in data: 
            if i[0] == h and i[1]==mi:
                print (i[2],i[3],i[4])
            else:
                print ("It does NOT match")
                # sleep(60)
            break

    if __name__ == '__main__':
         calc(data)

EDITED (работает сейчас):

import datetime


data = [('09', '55', None, 'AC is on', None), ('10', '00',None, 'AC is on', None),('10', '52','fan is on', 'AC is on', None)]


def calc(data):

    print(data)               #prints the whole table
    while True:
        h=datetime.datetime.today().strftime("%H")              
        mi=datetime.datetime.today().strftime("%M")
        # z=[(i[2],i[3],i[4]) for i in data if i[0] == h and i[1]==mi]
        for i in data: 
            if i[0] == h and i[1]==mi:
                print (i[2],i[3],i[4])
                # sleep(60)
                exit()

if __name__ == '__main__':
    calc(data)
...