2

I have the following python code:

value = 1.9

if value:
    #do something
else:
    #do something else

What happens here? I can't understand this because value is not Boolean.

ragzputin
  • 397
  • 3
  • 5
  • 20
  • You can test how python evaluate boolean using bool(). For example bool(1) = True. bool(0)= False. bool("any string ") =True. bool("") = False. bool(2.2) =true. No-zero numbers are always True. Non-empty strings are always true. Non-empty lists are true, etc – gtalarico Jul 07 '16 at 05:09

4 Answers4

7

Python has a concept of truthy-ness where non-Boolean values are basically "coerced" into Boolean ones, as shown here:

4.1 Truth value testing

Any object can be tested for truth value, for use in an if or while condition or as operand of the Boolean operations below. The following values are considered false:

  • None
  • False
  • zero of any numeric type, for example, 0, 0.0, 0j.
  • any empty sequence, for example, '', (), [].
  • any empty mapping, for example, {}.
  • instances of user-defined classes, if the class defines a __bool__() or __len__() method, when that method returns the integer zero or bool value False.

All other values are considered true - so objects of many types are always true.

Operations and built-in functions that have a Boolean result always return 0 or False for false and 1 or True for true, unless otherwise stated. (Important exception: the Boolean operations or and and always return one of their operands.)

Bottom line is that 1.9 comes under the "All other values are considered true" clause since it matches none of the values that would be considered false. The closest it comes is the third one (numeric type) but, since it's non-zero, it doesn't quite get there.

Community
  • 1
  • 1
paxdiablo
  • 854,327
  • 234
  • 1,573
  • 1,953
1

Any object can be tested for truth value, for use in an if or while condition or as operand of the Boolean operations below. The following values are considered false:

  • None
  • False
  • zero of any numeric type, for example, 0, 0L, 0.0, 0j.
  • any empty sequence, for example, '', (), [].
  • any empty mapping, for example, {}.
  • instances of user-defined classes, if the class defines a nonzero() or len() method, when that method returns the integer zero or bool value False

https://docs.python.org/2.4/lib/truth.html

So since value isn't one of those things, it takes the if, not the else!

Jake
  • 2,515
  • 5
  • 26
  • 41
0

Check this documentation materials. In python as in many programming language. 0, '', [] kind of values gives False while any other value returns True.

sehrob
  • 1,034
  • 12
  • 24
  • Many? Name seven :-) – paxdiablo Jul 07 '16 at 05:01
  • Well `python`, `C`, `C++`, `Perl`, `Lua`, `Ruby`, `JavaScript` for example. – sehrob Jul 07 '16 at 05:11
  • @sehrob As I know in C/C++ an empty string literal `""` means true since it's not the null pointer, and in Javascript an empty list literal `[]` means true, too. But those things are considered as `False` in Python. – neuront Jul 07 '16 at 05:17
  • You are right @neuront, I just wanted to say that a value doesn't need to be a Boolean type to be evaluated as that :) – sehrob Jul 07 '16 at 05:26
0

It is going to be False only if value is equal 0 or ""

Charlie
  • 53
  • 6