Block F

function
    domain (set of allowable inputs)
    codomain (set of all possible outputs
    rule: ties each input to an outt
    ties every element of the domain to some element
    in the range
    (consistent)

len is a mathematical function
    domain : sequences
    codomain:  integers

def f(x):
    return x*x

def greet():
    print("Hello!")

no input
no output
has a side-effect: it puts "hello" to the screen

def add_em(x,y): (domain: two-tuples of numbers)
    return x + y

def foo(x):
    print(x)
    return x + 5

Mathematical functions have no side-effects.
CS people say "pure function" for math functions.

functions ahve
    preconditions:
        something that is true prior to call
        number and types of arguments.
    postcondition:
        returned object
        side-effect

Truthiness
 
    An object is truth if it can be cast to a bool and
    come out True.

    An object is falsy if it can be cast to a bool and
    come out False.

if
elif
else

while: "sticky if"