Boolean Functions ================= .. _boolean-function: .. index:: pair: function; boolean A function that returns a boolean value (``True`` or ``False``) is known as a **boolean function**. One simple example tests if an integer is even or odd. .. admonition:: Example .. sourcecode:: python :linenos: def is_int_even(integer): if integer % 2 == 0: return True else: return False print(is_int_even(4)) print(is_int_even(7)) **Console Output** :: True False .. admonition:: Tip Start the names of boolean functions with either ``is`` or ``has``, which helps make their purpose more clear. For example, reading ``is_int_even(4)`` tells us that the function should answer the question: "Is the integer 4 even?" This convention is so widely used by programmers that it extends to nearly every language. Let's look at ``is_int_even`` again to see how we can use the power of ``return`` statements to make it even stronger. Since ``return`` ends the function, we can leave out the ``else`` clause and have the same effect. If ``integer`` is even, the return statement in line 3 runs, and the function ends. If ``integer`` is odd, the ``if`` block gets skipped and the second return statement executes. .. sourcecode:: python :linenos: def is_int_even(integer): if integer % 2 == 0: return True return False print(is_int_even(4)) print(is_int_even(7)) The updated version returns the same results as the original and contains less code. The function returns ``True`` when the expression ``integer % 2 == 0`` is ``True``, and the function returns ``False`` when ``integer % 2 == 0`` is ``False``. In this case, the return value is *exactly the same* as the value of ``integer % 2 == 0``. This means that we can simplify the function even more by returning the result of the expression! .. sourcecode:: python :linenos: def is_int_even(integer): return integer % 2 == 0 print(is_int_even(4)) print(is_int_even(7)) This version of ``is_int_even`` is better than the first two, not because it is shorter (shorter isn't always better), but because it is simpler to read. We don't have to break down the conditional logic to see what is being returned. Most boolean functions can be written so that they return the result of a boolean expression, rather than directly returning ``True`` or ``False``. Try It! ------- .. admonition:: Example Complete the ``is_capitalized`` function to return ``True`` if a string begins with a capital letter and ``False`` otherwise. .. raw:: html *Hints*: #. How do you access the *first* character in a string? #. The ``in`` operator will be useful, or you can try the ``.isupper()`` method. .. admonition:: Example Complete the ``is_answer_correct`` function to return ``True`` if a user's answer matches the correct response. The check should be *case-insensitive*. .. raw:: html With the given answer pairs, the program should count 2 correct responses.