2015-11-26 4 views
1

Я совершенно не знаком с программированием. Хотел написать этот основной будильник с Python, но веб-браузер просто не открывается. Я думаю, что это, вероятно, мое утверждение if, которое не работает. Это верно?Очень простой будильник не открывает веб-браузер

from datetime import datetime 
import webbrowser 

name = raw_input("What's your name?") 
print ("Hello %s! Let me set an alarm for you. Please answer the following questions about when you want to wake up.")%(name) 
alarm_h = raw_input("--> Please enter the hour when I should wake you up:") 
alarm_m = raw_input("--> Please enter the exact minute of the hour:") 
alarm_sound = raw_input("--> Please enter the Youtube-URL of your favorite song:") 

now = datetime.today() 

print ("It's now %s h : %s m. We'll wake you up at %s h : %s m." %(now.hour, now.minute, alarm_h, alarm_m)) 

if now.hour == alarm_h and now.minute == alarm_m: 
    webbrowser.open(alarm_sound, new=2) 
+0

Вам нужно выполнить цикл для тестов, я предлагаю вам использовать 'threads'. – Zety

+0

Вы должны подумать о разных типах данных 'now', которые типа' datetime.datetime', 'now.hour', который является' int' и 'alarm_x', так как это строки. Я предполагаю, что из-за разных типов данных утверждение if не станет истинным, так как 'now.hour == '14'' возвращает' False' (местное время в Берлине сейчас 14:04). – albert

+0

Помимо этого, вы должны использовать '.format()', чтобы конкатрировать строку с вашими переменными, и вам нужно реализовать что-то вроде фонового процесса, чтобы проверить время, чтобы поднять тревогу. Как отметил @zetysz, «потоки» были бы подходящими. – albert

ответ

0

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

Линия веб-браузера действительно работает. Он не выполняется, поскольку текущее время никогда не достигает времени будильника (поскольку вы не постоянно сравниваете текущее время с установленным временем будильника).

Try:

from datetime import datetime 
import webbrowser 

name = raw_input("What's your name?") 
print ("Hello %s! Let me set an alarm for you. Please answer the following questions about when you want to wake up.")%(name) 
alarm_h = raw_input("--> Please enter the hour when I should wake you up:") 
alarm_m = raw_input("--> Please enter the exact minute of the hour:") 
alarm_sound = raw_input("--> Please enter the Youtube-URL of your favorite song:") 

now = datetime.today() 

print ("It's now %s h : %s m. We'll wake you up at %s h : %s m." %(now.hour, now.minute, alarm_h, alarm_m)) 

webbrowser.open(alarm_sound, new=2) #Added temporarily to test webbrowser functionality 

if str(now.hour) == alarm_h and str(now.minute) == alarm_m: #Converted integer type to string type to match datatype of alarm_h and alarm_m 
    webbrowser.open(alarm_sound, new=2) 

Это должно открыть WebBrowser, так что вы можете проверить его функциональность.

Я также конвертируется now.hour и now.minute набрать строку, чтобы соответствовать типам данных alarm_h и alarm_m. Они были целыми числами и не могут быть напрямую сопоставлены со строковым типом данных.

Определенно загляните в цикл или потоки для постоянного обновления текущего времени и проверки, соответствует ли он текущей теме.

+0

Помимо того, что, как я уже упоминал выше, для потоковой передачи могут быть некоторые несовместимые типы данных, которые не позволяют утверждению if стать истинным. – albert

+1

Спасибо за вход, помогли мне много! В конце я использовал цикл while с разрывом в конце: while True: if str (now.hour) == alarm_h и str (now.minute) == alarm_m: print («Вот вам любимая песня. Счастливый просыпаться! ») webbrowser.open (alarm_sound, new = 2) break – RipFive

+0

Рад, что я мог помочь. Это определенно вариант - вы также можете запустить этот цикл с помощью потока, чтобы вы не блокировали ваш скрипт только в этом цикле. – tabchas

1

Вы можете попробовать этот простой пример.

from datetime import datetime 
import webbrowser 
import threading 


name = raw_input("What's your name?") 
print ("Hello %s! Let me set an alarm for you. Please answer the following questions about when you want to wake up.")%(name) 
alarm_h = raw_input("--> Please enter the hour when I should wake you up:") 
alarm_m = raw_input("--> Please enter the exact minute of the hour:") 
alarm_sound = raw_input("--> Please enter the Youtube-URL of your favorite song:") 
print alarm_sound 
now = datetime.today() 

def test(): 
    webbrowser.open(alarm_sound) 

s1 = '%s:%s' 
FMT = '%H:%M' 
tdelta = datetime.strptime(s1% (alarm_h, alarm_m), FMT) - datetime.strptime(s1%(now.hour, now.minute), FMT) 

l = str(tdelta).split(':') 
ecar = int(l[0]) * 3600 + int(l[1]) * 60 + int(l[2]) 
print ecar 

threading.Timer(ecar, test).start() 

Мы используем threading, чтобы открыть webbrowser после n seconds. в вашем примере вы спрашиваете пользователя в течение часа и минуты, таким образом мы вычисляем разницу между двумя моментами, используя только hours and minutes.

Если вам нужно больше объяснений, просто комментарий.

Смежные вопросы