Продолжайте ссылаться на текущее время в Python

1

Я бы хотел, чтобы моя программа ссылалась на текущее время в Python. Но моя программа продолжает печатать и ссылаться на метку времени. Я использую Python3.5.3.

import time

timenow = time.strftime("%X")

awake = "06:00:00" # turn on the lights at 6am
sleep = "22:00:00" # turn off the lights at 10pm

while True:
    print (timenow) # print the current time
    if awake <= timenow:
        print ("Lights On")
    elif timenow >= sleep:
        print ("Lights Off")

My current output is...

21:55:46
Lights On
21:55:46
Lights On
21:55:46
Lights On
Теги:
python-3.x
time

2 ответа

3
Лучший ответ

Это может сработать. Если вы указываете время как часть даты, которая может быть представлена int. Я думаю, что лучше сравнить числа в этом случае, а не строки (как в вашем примере).

import datetime


on = 6
off = 22


while True:
    ctime = datetime.datetime.now()
    status = 'Lights On' if on < ctime.hour < off else 'Lights Off'
    print('{}: {}'.format(ctime.strftime('%X'), status))
  • 0
    Я все еще хотел бы сослаться на строку «06:00:00» для текущего времени.
  • 0
    @mventers, Круто, просто имейте в виду, что даже "06:00:00" <"22:00:00" - это правда, "6:00:00" <"22:00:00" - это ложь
Показать ещё 4 комментария
3

Я думаю, вам просто нужно переместить 1 строку в цикл while:

import time

awake = "06:00:00" # turn on the lights at 6am
sleep = "22:00:00" # turn off the lights at 10pm

while True:
    timenow = time.strftime("%X") #moved this line into the while loop
    print (timenow) # print the current time
    if awake <= timenow:
        print ("Lights On")
    elif timenow >= sleep:
        print ("Lights Off")

Результат должен выглядеть следующим образом:

Lights On
08:50:22
Lights On
08:50:23
Lights On
08:50:24

В этом вопросе timenow устанавливается и никогда не обновляется. Так двигаться, что в while поток циклы, так что будет создаваться каждый раз. Так же, как и хорошая практика программирования, вы также можете бросить паузу, чтобы она не забивала процессор в цикле. Вы можете поместить это в конец цикла while, и он будет ждать 1 секунду перед повторением цикла:

....
elif timenow >= sleep:
    print ("Lights Off")
time.sleep(1)
  • 0
    Это именно то, что я искал. currentStatus = stillanoob
  • 0
    @mventers мы все начали где-то :) лучше спросить, чем застрять на несколько дней!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню