False, I meant false. Ack, need coffee. >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. On Wed, 8 Dec 2004 06:50:22 +1300, Liam Clarke <[EMAIL PROTECTED]> wrote: > 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. > -- 'There is only one basic human right, and that is to do as you damn well please. And with it comes the only basic human duty, to take the consequences. _______________________________________________ Tutor maillist - [EMAIL PROTECTED] http://mail.python.org/mailman/listinfo/tutor