question about True values

Steve Holden steve at holdenweb.com
Fri Oct 27 22:13:42 EDT 2006


J. Clifford Dyer wrote:
> I do see how mapping to Truth/Falsehood is more natural, and I do 
> believe that one of the great things about python is that it feels 
> natural in so many ways, and hence makes it easy to produce code, but 
> the one thing that Ms. Creighton points out that I can't get past is 
> that Python, even with its bool type, *still* evaluates somethingness 
> and nothingness, and True and False are just numbers with hats on.
> 
>  >>> True + 3
> 4
>  >>> bool(True-1)
> False
>  >>> bool(True-2)
> True
>  >>> (10 > 5) + (10 < 5)
> 1
> 
> So when you say
> 
>  >>>if 10 > 5:
> ....	print "Yes!"
> 
Seems pretty clear to me that the situations you discuss above involve 
numeric coercions of a Boolean value.

> Python is not evaluating the truth of the matter, but, as Ms. Creighton 
> would say, the "somethingness" of that which 10 > 5 evaluates to.  (1 
> aka True)
> 
  >>> type(10>5)
<type 'bool'>
  >>>

It does seem that there is a specific type associated with the result of 
a comparison, even though you would really like to to be "a number with 
a hat on".

> Furthermore, how do you explain this bizarreness in terms of "Truth" and 
> "Falsehood?"  You have to go back to the fact that True=1 and that 
> REALLY, Python is dealing with somethingness and nothingness.  It might 
> not be as direct a mental connection as True/False, but it is certainly 
> a more accurate one for understanding how Python works.
> 
>  >>> (1 > 0) < 1
> False
>  >>> 1 > 0 < 1
> True
>  >>> 1 > (0 < 1)
> False
>  >>> 10 > (0 < 1)
> True
> 
I have no idea what you think that you are demonstrating here.

> Finally, while True/False is a good mental mapping for numeric 
> comparisons, take the following:
> 
>  >>> if "Cliff is a pillar of the open source community":
> ....	print "thank you"
> .... else:
> ....	print "bugger off"
> 
> bugger off
> 
> Clearly this is not true.  (Google Cliff/Dyer open source: only 11 
> hits.), but the string is *something* so the if block gets evaluated.
> 
  >>> if "The above example was bollocks":
  ...   print "You don't know what you are talking about"
  ... else:
  ...   print "Sorry: of course you are perfectly correct"
  ...
You don't know what you are talking about
  >>>

regards
  Steve
-- 
Steve Holden       +44 150 684 7255  +1 800 494 3119
Holden Web LLC/Ltd          http://www.holdenweb.com
Skype: holdenweb       http://holdenweb.blogspot.com
Recent Ramblings     http://del.icio.us/steve.holden




More information about the Python-list mailing list