Overview

  • Hour 1
    • Articulation Work
    • Lists
  • Hour 2
    • Programming Style
    • Review
  • Hour 3
    • Work time

Articulation Work

Assignment 1

  • Done grading
  • Will be returned soon

New Lab Procedure

  • Release the lab in advance
    • In theory, the night before
    • In practice, could be the morning of
  • Graded during third hour of lecture
  • Can be graded any time before the end of the term
  • Grading policy applies retroactively

Lists

  • A list is an object that contains multiple data items
  • Lists are mutable
  • Lists can be indexed and sliced
  • Lists have methods

Syntax

  • Square brackets
  • Commas as separators

In [32]:
number_list = [1, 2, 4, 8, 16, 32]
the_pythons = ["Graham", "Terry",  "Michael", "Eric", "Terry", "John"]
mixed = [1, "Terry", 4]

print (mixed)


[1, 'Terry', 4]

Indexing


In [34]:
my_list = [10, 20, 30, 40]

my_list[2]


Out[34]:
30

Iterating over a List


In [35]:
# Using a while loop

the_pythons = ["Graham", "Terry",  "Michael", "Eric", "Terry", "John"]

index = 0
while index < len(the_pythons):
    print(the_pythons[index])
    index += 1


Graham
Terry
Michael
Eric
Terry
John

In [37]:
# Using a for loop

the_pythons = [54, "Graham", "Terry",  "Michael", "Eric", "Terry", "John"]
for item in the_pythons:
    print(item)


54
Graham
Terry
Michael
Eric
Terry
John

Lists are Mutable

  • They can be changed after creation

In [39]:
my_list = [10, 20, 30, 40]
print(my_list)
my_list[3] = "Graham"
print(my_list)


[10, 20, 30, 40]
[10, 20, 30, 'Graham']

List 'Arithmetic'


In [41]:
range(5, 10)


Out[41]:
[5, 6, 7, 8, 9]

In [18]:
# Plus sign concatenates two lists
list1 = list(range(5))
list2 = list(range(5,10))
list3 = list1 + list2

list3


Out[18]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [43]:
# Asterisk/multiplication repeats
# Example list * n
days = ["Ni!"] * 1024
print(days)


['Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!', 'Ni!']

In [44]:
the_pythons = ["Graham", "Terry", "Terry"]
# Same as the_pythons = the_pythons + ["Michael", "Eric", "John"]
the_pythons +=  ["Michael", "Eric", "John"]

the_pythons


Out[44]:
['Graham', 'Terry', 'Terry', 'Michael', 'Eric', 'John']

List Slicing

  • Slicing selects a range of elements from a sequence

In [22]:
days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
mid_days = days[2:5]

mid_days


Out[22]:
['Tuesday', 'Wednesday', 'Thursday']
  • To get a better sense of how slicing works, play around with it in iPython Notebook or interactive (command line) session

in Operator

  • Tests for presence of item in a list
  • Returns True or False

In [45]:
# This is a global constant (read only)
# This is OK
# Uppercase naming is a convention, not enforced by compiler
THE_PYTHONS = ["Graham", "Terry",  "Michael", "Eric", "Terry", "John"]
# global variables are to be used with care
# use local variables instead
# use a top-level function, e.g. main

def was_a_python(name):
    LOCAL_CONSTANT = 0.13
    
    if name in THE_PYTHONS:
        print(name + " was in Monty Python")
    else:
        print(name + " was not in Monty Python")

def main():
    name = raw_input("Was in the Pythons? ")
    was_a_python(name)

main()


Was in the Pythons? Ringo
Ringo was not in Monty Python

List Methods

  • A method is a function that is attached to an object

Other useful list methods are:

  • min
  • max

For a full list, see the Python documentation.

Adding to a List


In [54]:
# Using indexing
the_pythons = ["Graham", "Terry",  "Michael", "Eric", "Terry", "John"]

try:
    the_pythons[-7] = "Ringo"
except IndexError:
#    raise IndexError
    print("Oops")
else:
    print(the_pythons)


Oops

In [55]:
# Using append
the_pythons = ["Graham", "Terry",  "Michael", "Eric", "Terry", "John"]

the_pythons.append("Ringo")
the_pythons


Out[55]:
['Graham', 'Terry', 'Michael', 'Eric', 'Terry', 'John', 'Ringo']

In [56]:
# Using insert
the_pythons = ["Graham", "Terry",  "Michael", "Eric", "Terry", "John"]

# not the same as the_pythons[2] = "Ringo" !
the_pythons.insert(2, "Ringo")
the_pythons


Out[56]:
['Graham', 'Terry', 'Ringo', 'Michael', 'Eric', 'Terry', 'John']

Deleting


In [60]:
# Removes first occurence of a value
the_pythons = ["Graham", "Terry",  "Michael", "Eric", "Terry", "John"]

the_pythons.remove("Terry")
the_pythons.remove("Terry")
if "Terry" in the_pythons:
    the_pythons.remove("Terry")    
    
the_pythons


Out[60]:
['Graham', 'Michael', 'Eric', 'John']

In [61]:
# Deletes item at index

my_list = list(range(5))
del my_list[2]

my_list


Out[61]:
[0, 1, 3, 4]

Shallow vs Deep Copying

  • To make a copy of a list, the list's elements must be copied

In [62]:
# Shallow copying
the_pythons = ["Graham", "Terry",  "Michael", "Eric", "Terry", "John"]

more_pythons = the_pythons

the_pythons.insert(2, "Ringo")

print(the_pythons)
print(more_pythons)


['Graham', 'Terry', 'Ringo', 'Michael', 'Eric', 'Terry', 'John']
['Graham', 'Terry', 'Ringo', 'Michael', 'Eric', 'Terry', 'John']

In [63]:
# Deep copying 1
the_pythons = ["Graham", "Terry",  "Michael", "Eric", "Terry", "John"]

# Using append
more_pythons = []

for comedian in the_pythons:
    more_pythons.append(comedian)

more_pythons


Out[63]:
['Graham', 'Terry', 'Michael', 'Eric', 'Terry', 'John']

In [65]:
# Deep copying 2
the_pythons = ["Graham", "Terry",  "Michael", "Eric", "Terry", "John"]

# Using arithmetic
more_pythons = [] + the_pythons

more_pythons


Out[65]:
['Graham', 'Terry', 'Michael', 'Eric', 'Terry', 'John']

In [ ]:
# Initializing variables
# Creates a variable AND tells the interpreter the type

variable1 = ""
variable2 = 0 # a bit hacky
variable3 = 0.0 # a bit hacky
variable4 = []

Two Dimensional Lists

  • A list that contains lists
  • Sometimes called an matrix


In [75]:
partners = [["Alyha", "Jeanne-Marie"], 
            ["Billal", "Pranjal"], 
            ["Dusan", "Piaoyao"], 
            ["Isabelle", "Tyler"]]

# long way
pair = partners[0]
pair
pair[0]

# short way
partners[3][1]


Out[75]:
'Tyler'

In [74]:
crazy = [0, [1, [2, 3]]]
crazy[1][1][1]


Out[74]:
3


In [6]:
# Iterating over a two-dimensional list

partners = [["Alyha", "Jeanne-Marie"], 
            ["Billal", "Pranjal"], 
            ["Dusan", "Piaoyao"], 
            ["Isabelle", "Tyler"]]

for team in partners:
    for name in team:
        print(name)


Alyha
Jeanne-Marie
Billal
Pranjal
Dusan
Piaoyao
Isabelle
Tyler

In [83]:
# Iterating over a two-dimensional list

partners = [["Alyha", "Jeanne-Marie"], 
            ["Billal", "Pranjal"], 
            ["Dusan", "Piaoyao"], 
            ["Isabelle", "Tyler"]]

team_number = 1
for team in partners:
    print("Team " + str(team_number))
    name_number = 1
    for name in team:
        print("\tPartner " + str(name_number) +": " + name)
        name_number += 1
    team_number += 1


Team 1
	Partner 1: Alyha
	Partner 2: Jeanne-Marie
Team 2
	Partner 1: Billal
	Partner 2: Pranjal
Team 3
	Partner 1: Dusan
	Partner 2: Piaoyao
Team 4
	Partner 1: Isabelle
	Partner 2: Tyler

In [4]:
# Iterating over a two-dimensional list

partners = [["Alyha", "Jeanne-Marie"], 
            ["Billal", "Pranjal"], 
            ["Dusan", "Piaoyao"], 
            ["Isabelle", "Tyler"]]

partner_index = 0

while partner_index < len(partners):
    print("Team " + str(partner_index + 1))

    person_index = 0
    while person_index < len(partners[partner_index]):
        print("\tPartner: " + str(person_index + 1) + " " + partners[partner_index][person_index])
        person_index += 1
        
    partner_index += 1


Team 1
	Partner: 1 Alyha
	Partner: 2 Jeanne-Marie
Team 2
	Partner: 1 Billal
	Partner: 2 Pranjal
Team 3
	Partner: 1 Dusan
	Partner: 2 Piaoyao
Team 4
	Partner: 1 Isabelle
	Partner: 2 Tyler

Team 1 Partner 1: Alyha Partner 2: Jeanne-Marie

Programming Style

  • PEP-8
  • docstrings
  • Document attributes

What is programming style?

  • A set of guidelines for writing computer code
  • More about what people see than what the interpreter sees
    • Indentation, spacing, identifier names, line length, comments
  • Each programming language has it's own style

Why programming style?

  • Makes code easier to read and understand
  • Increases portability through consistency
  • Aesthetics

PEP-8

  • The Python programming style is called PEP-8
  • PEP is Python Enhanced Proposal
  • There is a PEP-8 checker built in to PyCharm
  • Non-conformance to PEP-8 is indicated with a gray squiggly line

docstrings

  • A special kind of comment
  • Used to generate documentation for the code
  • Returned by help() function
  • Python standard for docstrings is PEP-257
  • A comment delimited by triple double quotation marks (""")
  • Modules, functions, classes, and methods can have docstrings
    • Appears as first line in module (file), function, etc.
  • Describe "what," not "how"

In [5]:
help("print")


The "print" statement
*********************

   print_stmt ::= "print" ([expression ("," expression)* [","]]
                  | ">>" expression [("," expression)+ [","]])

"print" evaluates each expression in turn and writes the resulting
object to standard output (see below).  If an object is not a string,
it is first converted to a string using the rules for string
conversions.  The (resulting or original) string is then written.  A
space is written before each object is (converted and) written, unless
the output system believes it is positioned at the beginning of a
line.  This is the case (1) when no characters have yet been written
to standard output, (2) when the last character written to standard
output is a whitespace character except "' '", or (3) when the last
write operation on standard output was not a "print" statement. (In
some cases it may be functional to write an empty string to standard
output for this reason.)

Note: Objects which act like file objects but which are not the
  built-in file objects often do not properly emulate this aspect of
  the file object's behavior, so it is best not to rely on this.

A "'\n'" character is written at the end, unless the "print" statement
ends with a comma.  This is the only action if the statement contains
just the keyword "print".

Standard output is defined as the file object named "stdout" in the
built-in module "sys".  If no such object exists, or if it does not
have a "write()" method, a "RuntimeError" exception is raised.

"print" also has an extended form, defined by the second portion of
the syntax described above. This form is sometimes referred to as
""print" chevron." In this form, the first expression after the ">>"
must evaluate to a "file-like" object, specifically an object that has
a "write()" method as described above.  With this extended form, the
subsequent expressions are printed to this file object.  If the first
expression evaluates to "None", then "sys.stdout" is used as the file
for output.

What goes in a docstring?

  • Written like normal English, e.g. begin with a capital and end with a period.
  • The first line should be a short description (summary)
  • Don't write the name of the object
  • If there are more lines, use a blank line to visually separate the rest of the description.
  • Subsequent lines should be one or more paragraphs describing the object's calling conventions, side effects, etc.
  • There are some examples in the initial code for Assignment 2

Document Header

  • Provides metadata for the module (file)
  • Authorship information
  • No standard or convention
    • Some consider this old fashioned

Note: identifiers with leading and trailing double underscores are considered "magic" or special


In [ ]:
__author__ = "Susan Sim"
__email__ = "ses@drsusansim.org"
__copyright__ = "2015 Susan Sim"
__license__ = "MIT License"

Other attributes

__credits__
__maintainer__
__status__
__deprecated__
__version__
  • PyCharm can put these in for you
  • Edit document template in Preferences/Settings

Review

  • Interpreters
  • Rules of Programming
  • Variables
  • Data Types
    • Mutability
  • Input, processing, and output
    • Keyboard input
    • Screen output
  • Decision structures (if/elif/else)
  • Boolean expressions and operators
  • Reptition structures
    • Condition controlled (while)
    • Count controlled (for)
      • range function
  • Functions and methods
  • Strings
    • Indexing
    • Slicing
  • Exceptions
    • try/except
    • raise
  • Lists
  • Programming Style
  • Testing

Lab Exercises

Write a function that takes a list of numbers as input and returns the average of those numbers.

Write a py.test for the function above.

Configure File Template in Pycharm


In [ ]: