Hi all,

>I like your alarm clock a lot,
><http://www.rafb.net/paste/results/ctOH1T36.html>. I first tried to run
>it with IDLE, then remembered that mscvrt won't catch keypresses if run
>with IDLE. Works fine in the console!

>Instead of your beeps in the second while loop, I think I'd need

>winsound.PlaySound('SystemAsterisk', winsound.SND_ALIAS)
>winsound.PlaySound('SystemHand', winsound.SND_ALIAS)

>and turn my speakers way up!


Heh, I use headphones,  but speakers would be better. I'm sure you
could play an mp3 also.

But, I actually made a mistake in my alarm clock in that 

desiredTime.datetime.time(6,00,00)
is now desiredTime=datetime.datetime(2004,12,8,6, 00, 00)

while nowTime.time < desiredTime:

is now

while nowTime < desiredTime:

because, I wrote the alarm clock after midnight! If I had run it
before 11:59pm my while condition would've been True immediately, so I
changed desiredTime to a datetime object.

Alternatively, I could have just changed

checkPeriod=5 #minutes
nowTime=datetime.datetime.now()
startTime=nowTime

while nowTime.time() < desiredTime or nowTime.time() > startTime.time():

But Occam's Razor works better.

>Brian, where did you learn about the ".seconds". And the .year, .month,
>.day of

What's funny, is that after I'd gone to bed that night, I suddenly
woke up and thought "Hang on, what about the attribute .seconds of a
datetime object? I better check that out."

Which I promptly forgot about until your last reply.

Heh.

Liam Clarke

On Tue, 07 Dec 2004 09:04:46 -0800, Dick Moores <[EMAIL PROTECTED]> wrote:
> Brian van den Broek wrote at 07:50 12/7/2004:
> 
> 
> >Dick Moores said unto the world upon 2004-12-07 07:04:
> >>To Liam and Brian,
> >
> ><SNIP>
> >
> >>Here's Brian's script in it's bare bones, without the input error
> >>checking and his extensive and helpful comments:
> >>===============begin code====================
> >>import datetime
> >>import time
> >>alarm_time = raw_input("Enter alarm time as hh:mm ")
> >>alarm_time_list = alarm_time.split(':')
> >>alarm_hour, alarm_minute = (int(alarm_time_list[0]),
> >>                             int(alarm_time_list[1]))
> >>now = datetime.datetime.now()
> >>alarm_datetime = datetime.datetime(now.year+4, now.month, now.day,
> >>                                    alarm_hour, alarm_minute)
> >>print alarm_datetime
> >>alarm_in_seconds = (alarm_datetime - now).seconds
> >>print "I should wake up in %d seconds" % alarm_in_seconds
> >>time.sleep(alarm_in_seconds)
> >>print "I'm awake!"
> >>================end code=====================
> >
> ><SNIP>
> >
> >>Brian, where did you learn about the ".seconds". And the .year, .month,
> >>.day of
> >>"alarm_datetime = datetime.datetime(now.year + 4, now.month, now.day,
> >>                                    alarm_hour, alarm_minute)"?
> >>Does this come from a general knowledge of OOP, or is it somewhere in
> >>the Python docs? The only thing I've seen, and it's not an explanation,
> >>is in note (1) on http://docs.python.org/lib/datetime-date.html
> >
> >Oh Sir, you flatter me! My general knowledge of OOP is about the same as
> >my general knowledge of the migration patterns of Siberian water-fowl. ;-)
> >
> >After Anna, Gonçalo, and Liam encouraged me to explore the datetime
> >module, I read (OK, skimmed) the docs. For my original purpose, I just
> >needed to test two times with '>', but I recalled something about
> >timedelta objects being returned by subtracting one datetime from
> >another. I hadn't used them before I wrote my script in reply to you. I
> >learned about the handy for your purposes .seconds attribute in the
> >Library Reference -- 6.10.2 timedelta Objects. (That's the section name
> >in the 2.4 installed docs; I'm typing off line so can't [OK, won't] get
> >a link.)
> >
> >>It seems I've missed out on something important
> >>BTW I'm not sure you need the +4 of "now.year + 4". I've run this
> >>without the +4 and it doesn't seem to be needed. And notes (1) and (4)
> >>on that page seem to say this, as far as I understand them.
> >
> >I'm not sure I do either :-)
> >
> >Here's why I did it:
> >
> >I discovered that in order to get the right "seconds until alarm" value
> >from the datetime for now and the alarm datetime by subtracting one
> >datetime object from another, I needed the alarm datetime to be in the
> >future. But, since you can set an alarm for 09:00 tomorrow at 22:00
> >today, I needed the alarm datetime to not use today's date. (If you use
> >today's, you end up with seconds *since* 09:00 this morning, not the
> >desired seconds *until* 09:00 tomorrow morning.) Since
> >timedelta_object.seconds discards all difference save the seconds save
> >those from the hours, minutes, and seconds difference in the two
> >datetime objects, it doesn't matter what date the alarm datetime is set
> >to. (The day information is in timedelta_object.days.)
> >
> >Or, so I thought. I'd first tried getting the alarm datetime by simply
> >taking the date component of datetime.datetime.now() and adding to the
> >day value. That works fine, provided you are not on the last day of the
> >month. But, when checking boundary cases before posting the code I sent,
> >I discovered this sort of thing:
> >
> > >>> last_day_of_june = datetime.datetime(2004, 6, 30) # long for clarity
> > >>> ldj = last_day_of_june                            # short for typing
> > >>> new_day = datetime.datetime(ldj.year, ldj.month, ldj.day + 1)
> >
> >Traceback (most recent call last):
> >   File "<pyshell#8>", line 1, in -toplevel-
> >     new_day = datetime.datetime(ldj.year, ldj.month, ldj.day + 1)
> >ValueError: day is out of range for month
> > >>>
> >
> >So, adding to the day or the month was out, unless I wanted elaborate
> >code to determine which to add to under what circumstances. So then I
> >thought, "Well, just change from now.day + 1 to now.year + 1, and all
> >problems go away". And then I thought "Ah, but what if I try to run the
> >script on Feb. 29?
> >
> >So, that's why I used now.year + 4. It still leaves open the possibility
> >of getting bit by the every so often further correction to the calender,
> >but, I *believe* the next one is due in 2100, so I think I can live with
> >it. ;-)
> >
> >I'm not saying it isn't hackish, though. Better ways surely exist.
> 
> Brian,
> 
> I just can't succeed in reproducing the problems with the boundary
> cases  with the +4 removed. I've tried setting my computer's clock to Nov
> 30, Feb 29, 2004, and Dec 31, 2004 (without changing the time). It's now
> about 9 am where I am, and setting the alarm time to 0700 (i.e., on the
> next day) works fine in all 3 cases. And of course no problem at today's
> date with setting the alarm time to 07:00.
> 
> Isn't that what that note (1) on
> <http://docs.python.org/lib/datetime-date.html> implies?
> 
> I did the testing with <http://www.rcblue.com/Python/timer4-ForWeb.py>,
> by remarking out the time.sleep() line and noting what the
> print_hms(sleepSeconds) function prints.
> 
> Dick 
> 
> 
> 
> _______________________________________________
> Tutor maillist  -  [EMAIL PROTECTED]
> http://mail.python.org/mailman/listinfo/tutor
> 


-- 
'There is only one basic human right, and that is to do as you damn well please.
And with it comes the only ba.>sic human duty, to take the consequences.
_______________________________________________
Tutor maillist  -  [EMAIL PROTECTED]
http://mail.python.org/mailman/listinfo/tutor

Reply via email to