Issue 9961: Identity Crisis! variable assignment using strftime fails comparison test. (original) (raw)

Issue9961

Created on 2010-09-27 15:30 by BillHawkes, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Messages (3)
msg117449 - (view) Author: Bill Hawkes (BillHawkes) Date: 2010-09-27 15:30
See below. When variable assignment is used with strftime for the day of the week, it fails comparison checks for the days of the week. Even when using the str() function it still fails. Manual entry of variable assignment is required for a successful comparison. This pretty well defeats the purpose of computer programming (automation). There seems to be a real identity crisis here! $ python3 Python 3.0rc1+ (py3k, Oct 28 2008, 09:23:29) [GCC 4.3.2] on linux2 >>> import time >>> from datetime import date >>> today = date.today() >>> print("This line will always print") This line will always print >>> myday = today.fromordinal(today.toordinal() - 31) >>> printthis = myday.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.") >>> print("%s" % printthis) 08-27-10. 27 Aug 2010 is a Friday on the 27 day of August. >>> # dow is Day Of Week variable ... dow = myday.strftime("%A") >>> chkval = dow >>> dow is chkval True >>> print("dow is %s" % dow) dow is Friday >>> print("chkval is %s" % chkval) chkval is Friday >>> print("%s" % dow) Friday >>> print("%s" % chkval) Friday >>> dow is chkval True >>> if dow is 'Sunday': ... cntbck = 0 ... elif dow is 'Monday': ... cntbck = 1 ... elif dow is 'Tuesday': ... cntbck = 2 ... elif dow is 'Wednesday': ... cntbck = 3 ... elif dow is 'Thursday': ... cntbck = 4 ... elif dow is 'Friday': ... cntbck = 5 ... elif dow is 'Saturday': ... cntbck = 6 ... else: ... cntbck = 'undefined' ... print("What day is it? It is %s" % dow) ... What day is it? It is Friday >>> print('finished with script') finished with script >>> dow is 'Friday' False >>> dow = 'Friday' >>> dow is 'Friday' True >>> chkval 'Friday' >>> dow 'Friday' >>> chkval is dow False >>> chkval is 'Friday' False >>> chkval 'Friday' >>> chkval = str(chkval) >>> chkval 'Friday' >>> chkval is 'Friday' False >>> cntbck 'undefined' >>>
msg117450 - (view) Author: Jean-Paul Calderone (exarkun) * (Python committer) Date: 2010-09-27 15:31
You mistakenly used "is" for these comparisons, rather than "==". The strftime involvement is a red herring. The real problem is the use of an /identity/ comparison rather than an /equality/ comparison.
msg117509 - (view) Author: Bill Hawkes (BillHawkes) Date: 2010-09-28 08:18
Yes, it is working now. Thanks for the timely response. In looking at the tutorial, the only "strings" used with boolean operators ("<" | ">" "==" ">=" "<=" "!=") were strings of the numeric variety. I saw no examples using words. I know the datetime module has a function for enumerating the days of the week, but it starts with Monday and ends with Sunday. I needed to start with Sunday and end with Saturday. The first thing I found for checking letter-filled strings was the "is" operator. Perhaps a brief example of word comparisons in the tutorial would be useful. I know it would have helped me. I can't say I have a clear understanding of the difference between the "is" and "==" operators, but I can accept that there apparently is some difference and there are situations where that difference matters. Again, thanks for the quick response.
History
Date User Action Args
2022-04-11 14:57:06 admin set github: 54170
2010-09-28 08🔞26 BillHawkes set messages: +
2010-09-27 15:31:52 exarkun set status: open -> closednosy: + exarkunmessages: + resolution: not a bug
2010-09-27 15:30:22 BillHawkes create