Question: ```
# Given three ints, a b c, print True if b is greater than a,  
# and c is greater than b. However, with the exception that if 
# "bOk" is True, b does not need to be greater than a. 

a = int(input())
b = int(input())
c = int(input())
bOk = bool(input())

print(((bOk and c > b) or (b > a and c > b)))

```

My program works for all combinations besides "3 2 4 False"

I don't understand why it prints True for this combination. The first closed set should return False since bOk = False, and the second closed set should return False as well since b > a is False. 

Explanation would be much appreciated.

Answer: 
Boolean values are the two constant objects False and True. 

For Boolean Strings

```
   bool('')
=> False

   bool('false')
=> True

```

The bool checks whether the list has an object or not. If it is empty it will return False, if anything but empty, it will return True.

In your case, bOk = bool(input()), has a value, therefore **bOk** returns True, regardless of what object it has. And thus the output you have.
Your codes works on Python 2.x, because in Python 2.x, input() equals eval(raw\_input(prompt)).

```
>>> a=int(input())
3
>>> b=int(input())
2
>>> c=int(input())
4
>>> bOk=bool(input())
False
>>> print(bOk and c > b)
False
>>> bOk
False
>>> print(((bOk and c > b) or (b > a and c > b)))
False

```

But in Python 3.x, input() equals raw\_input(), so bOk equals bool("False"), equals True.

```
>>> bOk=bool(input())
False
>>> print(bOk and c > b)
True
>>> bOk
True

```

You can change input() to eval(input()).

"The Python 2 to 3 conversion tool will replace calls to input() with eval(input()) and raw\_input() with input()."

Refer to <https://www.python.org/dev/peps/pep-3111/>