if <boolean> :
# do this
boolean has to be either True or False.
then why
if "poi":
print "yes"
output: yes
i didn't get why yes is printing , since "poi" is nether True or False.
if <boolean> :
# do this
boolean has to be either True or False.
then why
if "poi":
print "yes"
output: yes
i didn't get why yes is printing , since "poi" is nether True or False.
Python will do its best to evaluate the "truthiness" of an expression when a boolean value is needed from that expression.
The rule for strings is that an empty string is considered False
, a non-empty string is considered True
. The same rule is imposed on other containers, so an empty dictionary or list is considered False
, a dictionary or list with one or more entries is considered True
.
The None
object is also considered false.
A numerical value of 0
is considered false (although a string value of '0'
is considered true).
All other expressions are considered True
.
Details (including how user-defined types can specify truthiness) can be found here: http://docs.python.org/release/2.5.2/lib/truth.html.
In python, any string except an empty string defaults to True
ie,
if "MyString":
# this will print foo
print("foo")
if "":
# this will NOT print foo
print("foo")
What is happening here is Python' supplement of implicit bool()
constructor after the if
, Because anything followed by if
should be resolved to be boolean. In this context your code is equivalent to
if bool("hello"):
print "yes"
According to Python bool(x)
constructor accepts anything and decides the truthiness based on below cases
0
is False
everything else is True
0.0
is False
everything else is True`[]
is False
everything else is True
{}
is False
everything else is True
()
is False
everything else is True
“"
is False
everything else is True
. Be aware that bool(“False”)
will return to True
Here is the log for the cases I listed above
Python 3.4.3 (default, Feb 25 2015, 21:28:45)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> bool(0)
False
>>> bool(1)
True
>>> bool(-1)
True
>>> bool(0.0)
False
>>> bool(0.02)
True
>>> bool(-0.10)
True
>>> bool([])
False
>>> bool([1,2])
True
>>> bool(())
False
>>> bool(("Hello","World"))
True
>>> bool({})
False
>>> bool({1,2,3})
True
>>> bool({1:"One", 2:"Two"})
True
>>> bool("")
False
>>> bool("Hello")
True
>>> bool("False")
True
In most programming languages, a non-empty string is considered "truthy," which means it is treated as equivalent to True in a boolean context. This is why in your example:
if "poi":
print("yes")
In this code the poi is considered as true and hence, the output is 'yes'
In Boolean contexts, values like 0, False, None, and empty strings "" are considered "falsy," meaning they are treated as equivalent to False.
Even if 'poi' is different from 'true' it's still considered as a true in the Boolean context.
If you really want to do real coding, then you will need to replace the poi by true.
if True:
print("yes")
This will also give you the result as 'yes'.