CS 2120: Topic 4
=================
Videos for this week:
^^^^^^^^^^^^^^^^^^^^
.. raw:: html
.. raw:: html
.. raw:: html
Conditionals
^^^^^^^^^^^^
.. image:: ../img/conditionals.png
.. admonition:: Try this..
:class: Note
Using only the Python statements, try to write a program that will divide a number in half *only if* that number is a multiple of 2.
* **Conditionals** (or *conditional execution*) will make these types of tasks easier.
Logic
^^^^^
* To make parts of the program *conditionally* executed, we need a *formal* way to describe conditions.
* We need logic.
* Let's try some comparison:
>>> 19 == 87
False
>>> 5==5
True
* Note that ``==`` is *comparison* while ``=`` is *assignment*. They are not the same.
.. admonition:: Try this..
:class: Note
Figure out what the other comparison operators in Python are. Hint: ``3`` doesn't equal ``5``.
* These operators can be applied to any two expressions (could be simply a value or variable, but can be more complex):
>>> a=15
>>> b=37
>>> (a+b)*9 > (b-a)*3 + 2
True
.. admonition:: Question
:class: Warning
What is the *type* of the result of applying a comparison operator?
Conditional execution
^^^^^^^^^^^^^^^^^^^^^
* Comparison statements can be ``True`` or ``False``, but how do we use this to control our program?
* ``if`` some condition is ``True``, do something::
if grade < 50:
print('Ya I don't think I passed..')
* If the condition following the keyword ``if`` is ``True``, the *block of code* after the ``:`` gets executed.
* If the condition is ``False``, the *block* inside gets skipped over.
* The blocks can be as long as you want (but the minimum size is 1)
.. admonition:: Try this..
:class: Note
Using only the Python features/statements we've seen so far, can you write a program that will divide a number in half *only if* that number is a multiple of 2?
Compound conditions
^^^^^^^^^^^^^^^^^^^
* We can use the logical operators ``and``, ``or`` and ``not`` to combine conditions::
if (Bob_has_cineplex_membership == True and Is_Friday == True) or (Bob_complains):
print('Bob gets to go into the movie for free.')
.. admonition:: For more on logical operators..
:class: Warning
Look at the truth tables for the logical operations **AND**, **OR** and **NOT** for help here.Wikipedia link: `Wikipedia link `_.
Alternative execution
^^^^^^^^^^^^^^^^^^^^^
* ``if`` statements can have a special ``else`` statement to go with them::
if x > 10:
do_something()
else:
do_something_else()
Chaining alternative execution
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* Sometimes just having ``if``/``else`` isn't enough.
* What if I want several, *mutually exclusive*, alternatives?::
if year < 1960:
print('Jazz')
elif year < 1980:
print('Rock')
elif year < 1990:
print('Synthpop')
elif year < 2003:
print('Alternative')
elif year < 2012:
print('Hip Hop')
else:
print("The Lils")
* ``elif`` means ``else if``
* **NOTE**: Once *one* of the ``elifs`` gets executed, that's *it*. The remaining ones are ignored.
* You can have as many elifs as you want
* Always end with a plain ``else`` as a "catch-all".
Nested conditionals
^^^^^^^^^^^^^^^^^^^
.. image:: ../img/russian-doll.jpg
* It's also possible to *nest conditionals* inside other conditionals::
if x > 0:
if y > 0:
print('First Quadrant')
else:
print('Fourth Quadrant')
else:
if y > 0:
print('Second Quadrant')
else
print('Third Quadrant')
* There's no limit to how deep you can nest.
Libraries
^^^^^^^^^
* Python has a *huge* variety of existing **modules** and **libraries**/**packages**.
* *Modules* are just files which contains python code which you can import for use in, for example, a python script. Modules have definitions (i.e. function definitions) and statements
* *Packages* are collections of modules
* *Libraries* are a collection of modules and/or packages.
* The Python docs have more on this (`here `_)
* No matter what you want to do, there's probably a library that can help you. We've already used *pandas* in assignment 1. Let's look at **NumPy**
NumPy
^^^^^
* *Numerical Python* or "NumPy"
* included with Anaconda
* Like pandas, though, it isn't 'built in' to Python, so we have to tell the interpreter that we want to use NumPy::
>>> import numpy
NumPy Types
^^^^^^^^^^^^
* Recall that Python values have types.
* NumPy has `its own types `_.
* We can specify these::
>>> x = numpy.float32(7.3)
>>> print(x)
7.3
>>> type(x)
* You can convert between regular Python types and NumPy types.
For next class
^^^^^^^^^^^^^^^
* Read `chapter 5 of the text `_