Я хотел бы, чтобы моя программа ссылалась на текущее время в 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
1
mventers 24 Сен 2018 в 15:41

2 ответа

Лучший ответ

Это может также сработать. Если вы ссылаетесь на время как часть даты, которая может быть представлена как 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))
3
Sergii 24 Сен 2018 в 14:13

Я думаю, вам просто нужно переместить 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)
3
sniperd 24 Сен 2018 в 12:51