# Practical programming

a brief introduction

## Why programming?

• A structured formulation of ideas
• Zero ambiguity!
• Allows you to express your needs in order to GSD
• Large calculations
• Fast
• Abstract thinking
• Symbolic logic
• Lambda calculus
• Why not ?

## Python

• A small, yet powerful programming language
• Interpreted
• Dynamically-typed
• Cross-platform
• Plenty of battle-hardened tools and libraries
• REPL
• IPython
• pip
• virtualenv
• Abundant learning resources
• Large developer community
• Tons of free tutorials
• Open source!

## Fire up the REPL!

jl@jerluc-mws ~ \$ ipython
Python 2.7.7rc1 (2.7:ece24bcd1a6f+, Jun 16 2014, 19:34:26)

IPython 2.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]:

## Make mistakes!

In [1]: i have no idea what i'm doing!
File "<ipython-input-1-5d2af8872bcc>", line 1
i have no idea what i'm doing!
^
SyntaxError: invalid syntax

The REPL is a safe place.

## Seriously, you're fine.

In [2]:  1 / 0
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-2-b710d87c980c> in <module>()
----> 1 1 / 0

ZeroDivisionError: integer division or modulo by zero

Plus it's right, you know—all the time.

## Doing the math

In [1]: 1 + 1
Out[1]: 2

In [2]: 0 - 1
Out[2]: -1

In [3]: 7 * 4
Out[3]: 28

In [4]: 81 / 9
Out[4]: 9

In [5]: 10 ** 2
Out[5]: 100

In [6]: (134 ** 6) * (25 % 5)
Out[6]: 0

## Remembering things

In [1]: a = 1

In [2]: b = 12 / 6

In [3]: c = a + b

In [4]: a
Out[4]: 1

In [5]: b
Out[5]: 2

In [6]: c
Out[6]: 3

These are called variables and are expressed in the form:
variable_name = value_or_expression

## Comparing things

In [1]: hours_of_sleep = 8

In [2]: hours_of_sleep > 7
Out[2]: True

In [3]: hours_of_sleep < 7
Out[3]: False

In [4]: hours_of_sleep >= 7
Out[4]: True

In [5]: hours_of_sleep <= 7
Out[5]: False

In [6]: hours_of_sleep != 7
Out[6]: True

In [7]: hours_of_sleep == 7
Out[7]: False

## Maybe doing something

In [1]: hours_of_sleep = 8

In [2]: if hours_of_sleep > 7:
...:     print('Happy as can be')
...:
Happy as can be

This is called an if statement, of the form:
if some_condition:
then_do_this_stuff

## Maybe doing something else

In [1]: hours_of_sleep = 6

In [2]: if hours_of_sleep > 7:
...:     print('Happy as can be')
...: else:
...:     print('Coffee is imminent')
...:
Coffee is imminent

This is called an if-else statement, of the form:
if some_condition:
then_do_this_stuff
else:

## Lots of things

In [1]: days_of_week = ['S', 'M', 'T', 'W', 'Th', 'F', 'Sa']

In [2]: len(days_of_week)
Out[2]: 7

In [3]: days_of_week[0]
Out[3]: 'S'

In [4]: days_of_week[-1]
Out[4]: 'Sa'

In [5]: days_of_week + ['F']
Out[5]: ['S', 'M', 'T', 'W', 'Th', 'F', 'Sa', 'F']

This is called a list:
my_list = [item1, item2, ..., item_n]
fourth_thing = my_list[3]

## One at a time

In [1]: days_of_week = ['S', 'M', 'T', 'W', 'Th', 'F', 'Sa']

In [2]: for day in days_of_week:
...:     print(day)
...:
S
M
T
W
Th
F
Sa
This is called a for loop, written as:
for thing in some_list_of_things:
do_this_stuff

## One at a time, maybe

In [1]: days_of_week = ['S', 'M', 'T', 'W', 'Th', 'F', 'Sa']

In [2]: for day in days_of_week:
...:     if day == 'M':
...:         print('Why oh why?!')
...:     else:
...:         print('TGINM!')
...:
TGINM!
Why oh why?!
TGINM!
TGINM!
TGINM!
TGINM!
TGINM!

## Remembering what to do

In [1]: def enough_sleep(hours_of_sleep):
...:     if hours_of_sleep > 7:
...:         print('Happy as can be')
...:     else:
...:         print('Coffee is imminent')
...:

In [2]: enough_sleep(8)
Happy as can be

In [3]: enough_sleep(4)
Coffee is imminent
This is called a function, written as:
def function_name(arg1, arg2, ..., arg_n):
do_this_stuff_with_args

## Returning the favor

In [1]: def avg(a, b):
...:     sum = a + b
...:     average = sum / 2.0
...:     return average
...:

In [2]: avg(1, 2)
Out[2]: 1.5

In [3]: avg(1, 2) + avg(0, 1)
Out[3]: 2.0

In [4]: sum_of_averages = avg(1, 2) + avg(0, 1)

In [5]: sum_of_averages
Out[5]: 2.0
This is called a return value, written as:
def function_name(arg1, arg2, ..., arg_n):
do_some_stuff
return this_value

## Shakespearean craft

my_hours_of_sleep = 10

def enough_sleep(hours_of_sleep):
if hours_of_sleep > 7:
return True
else:
return False

if enough_sleep(my_hours_of_sleep):
else:
1 / 0

jl@jerluc-mws ~ \$ python sleepy.py

## HW: Odd couples

Write a program to sum the double of each odd number from 1-1000.

For example, the output for 1-5 would yield:
(1 * 2) + (3 * 2) + (5 * 2) = 18

## HW (Hints)

Python has a special function for creating lists of numbers in a range:

In [1]: range(10)
Out[1]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

For checking if a number is odd or not, you can use the modulo operator:

In [1]: 10 % 2
Out[1]: 0

In [2]: 11 % 2
Out[2]: 1

By Jeremy Lucas

• 491