Writing Solid Code

Download Report

Transcript Writing Solid Code

Writing Solid Code
Introduction to Python
Program 1

python -c "print 'Hello World' “

python -c "import time; print
time.asctime()“

Start an interactive session:
◦ python –v
 help(command/expression)
Unix Executable Scripts

Most portable version:
◦ #!/usr/bin/env python
$ cat first.py
#!/usr/bin/env python
# A comment
print 'Hello World‘
print 2**100
$ chmod a+x first.py
$ ./first.py
Hello World
1267650600228229401496703205376
Basic Elements
Keywords: and assert break class continue
def del elif else except exec finally for
from global if import in is lambda not or
pass print raise return try while with yield
 Operators: + - * / % ** // << >> & | ^ ~ <
<= > >= <> != ==
 Delimiters: ( ) [ ] { } , : . ' = ; += -= *= /=
//= %= &= |= ^= >>= <<= **=

Data Types

All data values are objects
◦ type(obj) returns the type.

Numbers
◦ Integer: 23, 027 (octal), 0xDA5 (hex)
◦ Floating points : 1.00, 1.0e2
◦ Complex numbers: 5+6j
Data Types

Sequences
◦ Iterables: All sequences are iterable. (for)
◦ Strings:
 Can use “” or ‘’ to specify. “abc” ‘abc’ (Same thing.)
Unmatched ones can occur within the string. “matt’s”
 Use triple double-quotes for multi-line strings or strings than
contain both ‘ and “ inside of them: “““a‘b“c”””
 Many Methods built into the string, for example:
“hello”.upper() gives ‘HELLO’
◦ Tuples
 (x,y)
 (100,200,300)
Sequences

Lists
◦ [42, 3.14, ‘hello’]
◦ list(‘wow’) gives [‘w’,’o’,’w’]

Dictionaries ( key:value pairs ) uses Hash.
◦ D = { ‘x’ : 42, ‘y’:3.14, ‘z’:7}
◦ {1:2 , 3:4}
◦ A single dictionary can store values of
different types
◦ D[‘x’] is 42.
◦ del D[‘x’] removes the key from D.
Sequences

Concatenation:
◦ S1 + S2
◦ S1 * n gives n copies of S1 concatenated.

Membership
◦ x in S : tests to check whether x is in S.
◦ x not in S : Guess?
◦ For strings: x in S means if x is a substring of S

Indexing
◦ x = [1,2,3,4] then x[1] is 2 and x[-1] is 4
Sequences

Slicing a sequence:
◦
◦
◦
◦
◦
S[i:j]: from item i (included) to item j (excluded)
x = [1,2,3,4]
x[1:3]
# [2, 3]
x[1:]
# [2, 3, 4]
x[:2]
# [1, 2]
List Methods
Method
Description
Nonmutating methods
L.count(x)
L.index(x)
Returns the number of items of L that
are equal to x.
Returns the index of the first
occurrence of an item in L that is equal
to x, or raises an exception if L has no
such item.
List Methods
Mutating methods
L.append(x)
L.extend(s)
L.insert(i, x)
L.remove(x)
Appends item x to the end of L ; e.g.,
L[len(L):]=[x].
Appends all the items of iterable s to
the end of L; e.g., L[len(L):]=s.
Inserts item x in L before the item at
index i, moving following items of L (if
any) "rightward" to make space
(increases len(L) by one, does not
replace any item, does not raise
exceptions: acts just like L[i:i]=[x]).
Removes from L the first occurrence of
an item in L that is equal to x, or raises
an exception if L has no such item.
List Methods
Method
Description
L.pop([i])
Returns the value of the item at index i
and removes it from L; if i is omitted,
removes and returns the last item;
raises an exception if L is empty or i is
an invalid index in L.
L.reverse( )
Reverses, in place, the items of L.
L.sort([f]) (2.3)
L.sort(cmp=cmp, key=None,
reverse=False)(2.4)
Sorts, in place, the items of L,
comparing items pairwise via function f;
if f is omitted, comparison is via the
built-in function cmp.
Sorts, in-place, the items of L,
comparing items pairwise via the
function passed as cmp (by default, the
built-in function cmp). When argument
key is not None, what gets compared
for each item x is key(x), not x itself.
List Methods
 >>> a + [‘whites']
[‘blend','eggs‘,2,234,‘whites']
 >>> a.append('!')
[‘blend','eggs‘,2,234,'!']
 >>> 2*a
[‘blend','eggs',2,234,'!',‘blend','eggs',2,234,'!']
Dictionary Methods
Nonmutating Methods
D.copy( )
D.has_key(k)
D.items( )
Returns a shallow copy of the
dictionary (a copy whose items are the
same objects as D's, not copies thereof)
Returns TRue if k is a key in D;
otherwise, returns False, just like k in D
Returns a new list with all items
(key/value pairs) in D
D.keys( )
Returns a new list with all keys in D
D.values( )
Returns a new list with all values in D
D.iteritems( )
Returns an iterator on all items
(key/value pairs) in D
D.iterkeys( )
Returns an iterator on all keys in D
D.itervalues( )
Returns an iterator on all values in D
D.get(k[, x])
Returns D[k] if k is a key in D;
otherwise, returns x (or None, if x is
not given)
Dictionary Methods
Mutating Methods
D.clear( )
Removes all items from D, leaving D
empty
D.update(D1)
For each k in D1, sets D[k] equal to D1[k]
D.setdefault(k[, x])
D.pop(k[, x])
D.popitem( )
Returns D[k] if k is a key in D; otherwise,
sets D[k] equal to x and returns x
Removes and returns D[k] if k is a key in
D; otherwise, returns x (or raises an
exception if x is not given)
Removes and returns an arbitrary item
(key/value pair)
Control Flow

if expression:
statement(s)
elif expression:
statement(s)
elif expression:
statement(s)
...
else:
statement(s)
Control Flow

if x < 0:
print "x is negative"
elif x % 2:
print "x is positive and odd"
else:
print "x is even and non-negative"
Control Flow : while
x = 64
count = 0
while x > 0:
x = x // 2
# truncating division
count += 1
print "The approximate log2 is", count
# if count == 6: break
Control Flow : for
for target in iterable:
statement(s)
for letter in "ciao":
if letter == ‘c’: continue
print "give me a", letter, "...“
for key, value in d.items( ):
if not key or not value:
del d[key]
for x in range(1,5):
print x # output: 1 2 3 4
# cannot use iteritems
# keep only true keys and values
Sample Code
#!/usr/bin/env python
import string, sys
# If no arguments were given, print a helpful message
if len(sys.argv)==1:
print 'Usage: celsius temp1 temp2 ...'
sys.exit(0)
# Loop over the arguments
for i in sys.argv[1:]:
fahrenheit=float(string.atoi(i))
celsius=(fahrenheit-32)*5.0/9.0
print '%i\260F = %i\260C' % (int(fahrenheit), int(celsius+.5))
Functions
def function-name(parameters):
statement(s)
def double(x):
return x*2
Calling Functions in python
function-object(arguments)
print double(432)
def f(x, y):
x = 23
y.append(42)
a = 77
b = [99]
f(a, b)
print a, b
Import statement
A Typical python program is made up of
several source files.
 Each source file corresponds to a module.
 “import” keyword allows to include other
modules into a python program.
 Modules

◦
◦
◦
◦
◦
sys: stdin, stderr, argv
os: system, path
string: split
re: match compile
math: exp, sin, sqrt, pow
Calling External programs

import os
◦ subprocess.Popen(["ls", "-la"]).wait()
Sample Program
# average4.py
#
A program to average a set of numbers
#
Illustrates sentinel loop using empty string as sentinel
def main():
sum = 0.0
count = 0
xStr = raw_input("Enter a number (<Enter> to quit) >> ")
while xStr != "":
x = eval(xStr)
sum = sum + x
count = count + 1
xStr = raw_input("Enter a number (<Enter> to quit) >>
")
print "\nThe average of the numbers is", sum / count
Output
Enter
Enter
Enter
Enter
Enter
Enter
Enter
a
a
a
a
a
a
a
number
number
number
number
number
number
number
(<Enter>
(<Enter>
(<Enter>
(<Enter>
(<Enter>
(<Enter>
(<Enter>
to
to
to
to
to
to
to
quit)
quit)
quit)
quit)
quit)
quit)
quit)
The average of the numbers is
3.38333333333
>>
>>
>>
>>
>>
>>
>>
34
23
0
-25
-34.4
22.7
Sample Program
# average5.py
#
Computes the average of numbers listed in
a file.
def main():
fileName = raw_input("What file are the
numbers in? ")
infile = open(fileName,'r')
sum = 0.0
count = 0
for line in infile.readlines():
sum = sum + eval(line)
count = count + 1
print "\nThe average of the numbers is",
sum / count
Sample Program
# average6.py
#
Computes the average of numbers listed in
a file.
def main():
fileName = raw_input("What file are the
numbers in? ")
infile = open(fileName,'r')
sum = 0.0
count = 0
line = infile.readline()
while line != "":
sum = sum + eval(line)
count = count + 1
line = infile.readline()
print "\nThe average of the numbers is",
sum / count
Assignment for today

Implement:
closest_pair([(0,0),(7,6),(2,20),(12,5),(16,16)
,(5,8),(19,7),(14,22),(8,19),(7,29),(10,11),(1
,13)])
returns: (7,6),(5,8)
Should run in O(nlogn)
Pointers

Learn Python in 10 minutes:
◦ http://www.poromenos.org/tutorials/python

Dive into Python
◦ http://www.diveintopython.org/