Post on 16-Dec-2015
transcript
Introduction to Computing Using Python
Text Data, File I/O, and Exceptions
Strings, revisited Formatted output File Input/Output Errors and Exceptions
Introduction to Computing Using Python
String representations
>>> excuse = 'I am sick'>>> excuse = "I am sick">>>
>>> excuse = 'I am sick'>>> excuse = "I am sick">>>
>>> excuse = 'I am sick'>>> excuse = "I am sick">>> excuse = 'I'm sick'SyntaxError: invalid syntax>>>
>>> excuse = 'I am sick'>>> excuse = "I am sick">>> excuse = 'I'm sick'SyntaxError: invalid syntax>>>
>>> excuse = 'I am sick'>>> excuse = "I am sick">>> excuse = 'I'm sick'SyntaxError: invalid syntax>>> excuse = "I'm sick">>>
>>> excuse = 'I am sick'>>> excuse = "I am sick">>> excuse = 'I'm sick'SyntaxError: invalid syntax>>> excuse = "I'm sick">>>
>>> excuse = 'I am sick'>>> excuse = "I am sick">>> excuse = 'I'm sick'SyntaxError: invalid syntax>>> excuse = "I'm sick">>> excuse = "I'm "sick""SyntaxError: invalid syntax>>> excuse = 'I'm "sick"'SyntaxError: invalid syntax>>>
>>> excuse = 'I am sick'>>> excuse = "I am sick">>> excuse = 'I'm sick'SyntaxError: invalid syntax>>> excuse = "I'm sick">>> excuse = "I'm "sick""SyntaxError: invalid syntax>>> excuse = 'I'm "sick"'SyntaxError: invalid syntax>>>
>>> excuse = 'I am sick'>>> excuse = "I am sick">>> excuse = 'I'm sick'SyntaxError: invalid syntax>>> excuse = "I'm sick">>> excuse = "I'm "sick""SyntaxError: invalid syntax>>> excuse = 'I'm "sick"'SyntaxError: invalid syntax>>> excuse = 'I\'m "sick"'>>>
>>> excuse = 'I am sick'>>> excuse = "I am sick">>> excuse = 'I'm sick'SyntaxError: invalid syntax>>> excuse = "I'm sick">>> excuse = "I'm "sick""SyntaxError: invalid syntax>>> excuse = 'I'm "sick"'SyntaxError: invalid syntax>>> excuse = 'I\'m "sick"'>>>
>>> excuse = 'I am sick'>>> excuse = "I am sick">>> excuse = 'I'm sick'SyntaxError: invalid syntax>>> excuse = "I'm sick">>> excuse = "I'm "sick""SyntaxError: invalid syntax>>> excuse = 'I'm "sick"'SyntaxError: invalid syntax>>> excuse = 'I\'m "sick"'>>> excuse'I\'m "sick"'>>>
>>> excuse = 'I am sick'>>> excuse = "I am sick">>> excuse = 'I'm sick'SyntaxError: invalid syntax>>> excuse = "I'm sick">>> excuse = "I'm "sick""SyntaxError: invalid syntax>>> excuse = 'I'm "sick"'SyntaxError: invalid syntax>>> excuse = 'I\'m "sick"'>>> excuse'I\'m "sick"'>>>
>>> excuse = 'I am sick'>>> excuse = "I am sick">>> excuse = 'I'm sick'SyntaxError: invalid syntax>>> excuse = "I'm sick">>> excuse = "I'm "sick""SyntaxError: invalid syntax>>> excuse = 'I'm "sick"'SyntaxError: invalid syntax>>> excuse = 'I\'m "sick"'>>> excuse'I\'m "sick"'>>> print(excuse)I'm "sick">>>
>>> excuse = 'I am sick'>>> excuse = "I am sick">>> excuse = 'I'm sick'SyntaxError: invalid syntax>>> excuse = "I'm sick">>> excuse = "I'm "sick""SyntaxError: invalid syntax>>> excuse = 'I'm "sick"'SyntaxError: invalid syntax>>> excuse = 'I\'m "sick"'>>> excuse'I\'m "sick"'>>> print(excuse)I'm "sick">>>
>>> excuse = 'I am sick'>>> excuse = "I am sick">>> excuse = 'I'm sick'SyntaxError: invalid syntax>>> excuse = "I'm sick">>> excuse = "I'm "sick""SyntaxError: invalid syntax>>> excuse = 'I'm "sick"'SyntaxError: invalid syntax>>> excuse = 'I\'m "sick"'>>> excuse'I\'m "sick"'>>> print(excuse)I'm "sick”>>> excuse = 'I\'m ...\n... "sick"'>>>
>>> excuse = 'I am sick'>>> excuse = "I am sick">>> excuse = 'I'm sick'SyntaxError: invalid syntax>>> excuse = "I'm sick">>> excuse = "I'm "sick""SyntaxError: invalid syntax>>> excuse = 'I'm "sick"'SyntaxError: invalid syntax>>> excuse = 'I\'m "sick"'>>> excuse'I\'m "sick"'>>> print(excuse)I'm "sick”>>> excuse = 'I\'m ...\n... "sick"'>>>
>>> excuse = 'I am sick'>>> excuse = "I am sick">>> excuse = 'I'm sick'SyntaxError: invalid syntax>>> excuse = "I'm sick”>>> excuse = "I'm "sick""SyntaxError: invalid syntax>>> excuse = 'I'm "sick"'SyntaxError: invalid syntax>>> excuse = 'I\'m "sick"'>>> excuse'I\'m "sick"'>>> print(excuse)I'm "sick”>>> excuse = 'I\'m ...\n... "sick"'>>> excuse'I\'m ...\n... "sick"'>>>
>>> excuse = 'I am sick'>>> excuse = "I am sick">>> excuse = 'I'm sick'SyntaxError: invalid syntax>>> excuse = "I'm sick”>>> excuse = "I'm "sick""SyntaxError: invalid syntax>>> excuse = 'I'm "sick"'SyntaxError: invalid syntax>>> excuse = 'I\'m "sick"'>>> excuse'I\'m "sick"'>>> print(excuse)I'm "sick”>>> excuse = 'I\'m ...\n... "sick"'>>> excuse'I\'m ...\n... "sick"'>>>
>>> excuse = 'I am sick'>>> excuse = "I am sick">>> excuse = 'I'm sick'SyntaxError: invalid syntax>>> excuse = "I'm sick">>> excuse = "I'm "sick""SyntaxError: invalid syntax>>> excuse = 'I'm "sick"'SyntaxError: invalid syntax>>> excuse = 'I\'m "sick"'>>> excuse'I\'m "sick"'>>> print(excuse)I'm "sick”>>> excuse = 'I\'m ...\n... "sick"'>>> excuse'I\'m ...\n... "sick"'>>> print(excuse)I'm ...... "sick"
>>> excuse = 'I am sick'>>> excuse = "I am sick">>> excuse = 'I'm sick'SyntaxError: invalid syntax>>> excuse = "I'm sick">>> excuse = "I'm "sick""SyntaxError: invalid syntax>>> excuse = 'I'm "sick"'SyntaxError: invalid syntax>>> excuse = 'I\'m "sick"'>>> excuse'I\'m "sick"'>>> print(excuse)I'm "sick”>>> excuse = 'I\'m ...\n... "sick"'>>> excuse'I\'m ...\n... "sick"'>>> print(excuse)I'm ...... "sick"
A string value is represented as a sequence of characters delimited by quotes
Quotes can be single (') or double (")
What if ' or " is one of the string characters? What if the string includes both ' and "?
Escape sequence \' or \" is used to indicate that a quote is not the string delimiter but is part of the string value
Function print() interprets the escape sequence
Another example:• \n is an escape sequence that
represents a new line
The indexing operator returns the character at index i (as a single character string).
Introduction to Computing Using Python
Indexing operator, revisited
'A''A'
'p''p''p''p'
'l''l'
'e''e'
s[0] =
s[1] =
s[2] =
s[3] =
s[4] =
s =0 1 3 42
>>> s = 'Apple'>>> s[0]'A'>>> s[1]'p'>>> s[4]'e'
>>> s = 'Apple'>>> s[0]'A'>>> s[1]'p'>>> s[4]'e'
'A p p l e''A p p l e'-5 -4 -2 -1-3
s[0:2] = 'A p''A p's[1:4] = 'p p l''p p l's[2:5] = 'p l e''p l e's[2:] = 'p l e''p l e'
s[-3:-1] = 'p l''p l's[:2] = 'A p''A p'
>>> s = 'Apple'>>> s[0:2]'Ap'>>> s[1:4]'ppl'>>> s[2:5]'ple'>>> s[2:]'ple'>>> s[:2]'Ap'>>> s[-3:-1]'pl'
>>> s = 'Apple'>>> s[0:2]'Ap'>>> s[1:4]'ppl'>>> s[2:5]'ple'>>> s[2:]'ple'>>> s[:2]'Ap'>>> s[-3:-1]'pl'
The indexing operator can also be used to obtain a slice of a string
s[i:j] : the slice of s starting at index i and ending before index js[i:] : the slice of s starting at index i
s[:j] : the slice of s ending before index j
Introduction to Computing Using Python
Exercise
The indexing operator can also be used to obtain slices of a list as well. Let list lst refer to list
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h’]
Write Python expressions using list lst and the indexing operator that evaluate to:
a) ['a', 'b', 'c', 'd']b) ['d', 'e', 'f']c) ['d']d) ['f', 'g']e) ['d', 'e', 'f', 'g’, 'h']f) ['f', 'g', 'h']
>>> lst[:4]['a', 'b', 'c', 'd']>>> lst[3:6]['d', 'e', 'f']>>> lst[3:4]['d']>>> lst[-3:-1]['f', 'g']>>> lst[3:]['d', 'e', 'f', 'g’, 'h']>>> lst[-3:]['f', 'g', 'h']
>>> lst[:4]['a', 'b', 'c', 'd']>>> lst[3:6]['d', 'e', 'f']>>> lst[3:4]['d']>>> lst[-3:-1]['f', 'g']>>> lst[3:]['d', 'e', 'f', 'g’, 'h']>>> lst[-3:]['f', 'g', 'h']
Usage Explanations.capitalize() returns a copy of s with first character
capitalizeds.count(target) returns the number of occurences of
target in ss.find(target) returns the index of the first
occurrence of target in ss.lower() returns lowercase copy of s s.replace(old, new) returns copy of s with every
occurrence of old replaced with news.split(sep) returns list of substrings of s,
delimited by seps.strip() returns copy of s without leading and
trailing whitespaces.upper() returns lowercase copy of s
Introduction to Computing Using Python
String methods
>>> link = 'http://www.main.com/smith/index.html'>>> link[:4]'http'>>> link[:4].upper()'HTTP'>>> link.find('smith')20>>> link[20:25]'smith'>>> link[20:25].capitalize()'Smith'>>> link.replace('smith', 'ferreira')'http://www.main.com/ferreira/index.html'>>> link'http://www.main.com/smith/index.html'>>> new = link.replace('smith', 'ferreira')>>> new'http://www.main.com/ferreira/index.html'>>> link.count('/')4>>> link.split('/')['http:', '', 'www.main.com', 'smith', 'index.html']
>>> link = 'http://www.main.com/smith/index.html'>>> link[:4]'http'>>> link[:4].upper()'HTTP'>>> link.find('smith')20>>> link[20:25]'smith'>>> link[20:25].capitalize()'Smith'>>> link.replace('smith', 'ferreira')'http://www.main.com/ferreira/index.html'>>> link'http://www.main.com/smith/index.html'>>> new = link.replace('smith', 'ferreira')>>> new'http://www.main.com/ferreira/index.html'>>> link.count('/')4>>> link.split('/')['http:', '', 'www.main.com', 'smith', 'index.html']
Strings are immutable; none of the string methods modify string link
Strings are immutable; none of the string methods modify string s
Introduction to Computing Using Python
Exercise
>>> events = '9/13 2:30 PM\n9/14 11:15 AM\n9/14 1:00 PM\n9/15 9:00 AM'>>> print(events)9/13 2:30 PM9/14 11:15 AM9/14 1:00 PM9/15 9:00 AM
>>> events = '9/13 2:30 PM\n9/14 11:15 AM\n9/14 1:00 PM\n9/15 9:00 AM'>>> print(events)9/13 2:30 PM9/14 11:15 AM9/14 1:00 PM9/15 9:00 AM
>>> events.count('9/14')2>>> events.find('9/14')13>>> events.find('9/15')40>>> events[13:40]'9/14 11:15 AM\n9/14 1:00 PM\n’>>> lst = events[13:40].strip().split('\n')>>> lst['9/14 11:15 AM', '9/14 1:00 PM']>>>
>>> events.count('9/14')2>>> events.find('9/14')13>>> events.find('9/15')40>>> events[13:40]'9/14 11:15 AM\n9/14 1:00 PM\n’>>> lst = events[13:40].strip().split('\n')>>> lst['9/14 11:15 AM', '9/14 1:00 PM']>>>
Write expressions that compute:a) the number of events on 9/14b) the index of the substring
describing the 1st event on 9/14c) the index just past the substring
describing the last event on 9/14d) the list of substrings describing
the events on 9/14
String events describes the schedule of 4 events spread across 3 days
Usage Explanationstr.maketrans(old, new) returns a table mapping characters in
string old to characters in string news.translate(table) returns a copy of s in which the original
characters are replaced using the mapping described by table
Introduction to Computing Using Python
String methods
>>> event = "Tuesday, Feb 29, 2012 -- 3:35 PM">>> >>> event = "Tuesday, Feb 29, 2012 -- 3:35 PM">>>
Suppose we need to pick up the date and time components of string event
>>> event = "Tuesday, Feb 29, 2012 -- 3:35 PM">>> table = str.maketrans(':,-', 3*' ')>>> event.translate(table)'Tuesday Feb 29 2012 3 35 PM'>>>
>>> event = "Tuesday, Feb 29, 2012 -- 3:35 PM">>> table = str.maketrans(':,-', 3*' ')>>> event.translate(table)'Tuesday Feb 29 2012 3 35 PM'>>>
>>> event = "Tuesday, Feb 29, 2012 -- 3:35 PM">>> table = str.maketrans(':,-', 3*' ')>>> event.translate(table)'Tuesday Feb 29 2012 3 35 PM'>>> event.translate(table).split()['Tuesday', 'Feb', '29', '2012', '3', '35', 'PM']>>>
>>> event = "Tuesday, Feb 29, 2012 -- 3:35 PM">>> table = str.maketrans(':,-', 3*' ')>>> event.translate(table)'Tuesday Feb 29 2012 3 35 PM'>>> event.translate(table).split()['Tuesday', 'Feb', '29', '2012', '3', '35', 'PM']>>>
Puntuation makes it difficult to use method split()
Solution: replace punctuation with blank spaces
>>> prod = 'morels'>>> cost = 139>>> wght = 1/2>>> total = cost * wght>>>
>>> prod = 'morels'>>> cost = 139>>> wght = 1/2>>> total = cost * wght>>>
>>> prod = 'morels'>>> cost = 139>>> wght = 1/2>>> total = cost * wght>>> print(prod, cost, wght, total)morels 139 0.5 69.5>>>
>>> prod = 'morels'>>> cost = 139>>> wght = 1/2>>> total = cost * wght>>> print(prod, cost, wght, total)morels 139 0.5 69.5>>>
>>> prod = 'morels'>>> cost = 139>>> wght = 1/2>>> total = cost * wght>>> print(prod, cost, wght, total)morels 139 0.5 69.5>>> print(prod, cost, wght, total, sep='; ')morels; 139; 0.5; 69.5>>>
>>> prod = 'morels'>>> cost = 139>>> wght = 1/2>>> total = cost * wght>>> print(prod, cost, wght, total)morels 139 0.5 69.5>>> print(prod, cost, wght, total, sep='; ')morels; 139; 0.5; 69.5>>>
>>> prod = 'morels'>>> cost = 139>>> wght = 1/2>>> total = cost * wght>>> print(prod, cost, wght, total)morels 139 0.5 69.5>>> print(prod, cost, wght, total, sep='; ')morels; 139; 0.5; 69.5>>> print(prod, cost, wght, total, sep=':::')morels:::139:::0.5:::69.5>>>
>>> prod = 'morels'>>> cost = 139>>> wght = 1/2>>> total = cost * wght>>> print(prod, cost, wght, total)morels 139 0.5 69.5>>> print(prod, cost, wght, total, sep='; ')morels; 139; 0.5; 69.5>>> print(prod, cost, wght, total, sep=':::')morels:::139:::0.5:::69.5>>>
Introduction to Computing Using Python
Built-in function print(), revisited
Function print() takes 0 or more arguments and prints them in the shell
A blank space separator is printed between the arguments
The sep argument allows for customized separators
their string representation
>>> pets = ['boa', 'cat', 'dog']>>> for pet in pets:
print(pet)
boacatdog>>>
>>> pets = ['boa', 'cat', 'dog']>>> for pet in pets:
print(pet)
boacatdog>>>
Introduction to Computing Using Python
Built-in function print(), revisited
Function print() prints, by default, a newline character after printing its arguments
The end argument allows for customized end characters
>>> pets = ['boa', 'cat', 'dog']>>> for pet in pets:
print(pet)
boa\n cat\ndog\n>>>
>>> pets = ['boa', 'cat', 'dog']>>> for pet in pets:
print(pet)
boa\n cat\ndog\n>>>
>>> pets = ['boa', 'cat', 'dog']>>> for pet in pets:
print(pet)
boacatdog>>> for pet in pets:
print(pet, end=', ')
boa, cat, dog, >>>
>>> pets = ['boa', 'cat', 'dog']>>> for pet in pets:
print(pet)
boacatdog>>> for pet in pets:
print(pet, end=', ')
boa, cat, dog, >>>
>>> pets = ['boa', 'cat', 'dog']>>> for pet in pets:
print(pet)
boacatdog>>> for pet in pets:
print(pet, end=', ')
boa, cat, dog, >>> for pet in pets:
print(pet, end='!!! ')
boa!!! cat!!! dog!!! >>>
>>> pets = ['boa', 'cat', 'dog']>>> for pet in pets:
print(pet)
boacatdog>>> for pet in pets:
print(pet, end=', ')
boa, cat, dog, >>> for pet in pets:
print(pet, end='!!! ')
boa!!! cat!!! dog!!! >>>
Introduction to Computing Using Python
General output formatting
>>> day = 'Wednesday'>>> month = 'March'>>> weekday = 'Wednesday'>>> month = 'March'>>> day = 10>>> year = 2010>>> year = 2012>>> hour = 11>>> minute = 45>>> second = 33>>>
>>> day = 'Wednesday'>>> month = 'March'>>> weekday = 'Wednesday'>>> month = 'March'>>> day = 10>>> year = 2010>>> year = 2012>>> hour = 11>>> minute = 45>>> second = 33>>>
Suppose we have
>>> day = 'Wednesday'>>> month = 'March'>>> weekday = 'Wednesday'>>> month = 'March'>>> day = 10>>> year = 2010>>> year = 2012>>> hour = 11>>> minute = 45>>> second = 33>>> print(hour+':'+minute+':'+second)Traceback (most recent call last): File "<pyshell#113>", line 1, in <module> print(hour+':'+minute+':'+second)TypeError: unsupported operand type(s) for +: 'int' and 'str'>>>
>>> day = 'Wednesday'>>> month = 'March'>>> weekday = 'Wednesday'>>> month = 'March'>>> day = 10>>> year = 2010>>> year = 2012>>> hour = 11>>> minute = 45>>> second = 33>>> print(hour+':'+minute+':'+second)Traceback (most recent call last): File "<pyshell#113>", line 1, in <module> print(hour+':'+minute+':'+second)TypeError: unsupported operand type(s) for +: 'int' and 'str'>>>
and we want to print Wednesday, March 10, 2010 at 11:45:33
>>> day = 'Wednesday'>>> month = 'March'>>> weekday = 'Wednesday'>>> month = 'March'>>> day = 10>>> year = 2010>>> year = 2012>>> hour = 11>>> minute = 45>>> second = 33>>> print(hour+':'+minute+':'+second)Traceback (most recent call last): File "<pyshell#113>", line 1, in <module> print(hour+':'+minute+':'+second)TypeError: unsupported operand type(s) for +: 'int' and 'str'>>> print(str(hour)+':'+str(minute)+':'+str(second))11:45:33>>>
>>> day = 'Wednesday'>>> month = 'March'>>> weekday = 'Wednesday'>>> month = 'March'>>> day = 10>>> year = 2010>>> year = 2012>>> hour = 11>>> minute = 45>>> second = 33>>> print(hour+':'+minute+':'+second)Traceback (most recent call last): File "<pyshell#113>", line 1, in <module> print(hour+':'+minute+':'+second)TypeError: unsupported operand type(s) for +: 'int' and 'str'>>> print(str(hour)+':'+str(minute)+':'+str(second))11:45:33>>>
>>> day = 'Wednesday'>>> month = 'March'>>> weekday = 'Wednesday'>>> month = 'March'>>> day = 10>>> year = 2010>>> year = 2012>>> hour = 11>>> minute = 45>>> second = 33>>> print(hour+':'+minute+':'+second)Traceback (most recent call last): File "<pyshell#113>", line 1, in <module> print(hour+':'+minute+':'+second)TypeError: unsupported operand type(s) for +: 'int' and 'str'>>> print(str(hour)+':'+str(minute)+':'+str(second))11:45:33>>> print('{}:{}:{}'.format(hour, minute, second))11:45:33
>>> day = 'Wednesday'>>> month = 'March'>>> weekday = 'Wednesday'>>> month = 'March'>>> day = 10>>> year = 2010>>> year = 2012>>> hour = 11>>> minute = 45>>> second = 33>>> print(hour+':'+minute+':'+second)Traceback (most recent call last): File "<pyshell#113>", line 1, in <module> print(hour+':'+minute+':'+second)TypeError: unsupported operand type(s) for +: 'int' and 'str'>>> print(str(hour)+':'+str(minute)+':'+str(second))11:45:33>>> print('{}:{}:{}'.format(hour, minute, second))11:45:33
Introduction to Computing Using Python
Method format() of class str
>>> day = 'Wednesday'>>> month = 'March'>>> weekday = 'Wednesday'>>> month = 'March'>>> day = 10>>> year = 2010>>> year = 2012>>> hour = 11>>> minute = 45>>> second = 33>>> print('{}:{}:{}'.format(hour, minute, second))11:45:33>>>
>>> day = 'Wednesday'>>> month = 'March'>>> weekday = 'Wednesday'>>> month = 'March'>>> day = 10>>> year = 2010>>> year = 2012>>> hour = 11>>> minute = 45>>> second = 33>>> print('{}:{}:{}'.format(hour, minute, second))11:45:33>>>
print('{}:{}:{}'.format(hour, minute, second))
format string
>>> day = 'Wednesday'>>> month = 'March'>>> weekday = 'Wednesday'>>> month = 'March'>>> day = 10>>> year = 2010>>> year = 2012>>> hour = 11>>> minute = 45>>> second = 33>>> print('{}:{}:{}'.format(hour, minute, second))11:45:33>>> print('{}, {} {}, {} at {}:{}:{}'.format(weekday, month, day, year, hour, minute, second))Wednesday, March 10, 2012 at 11:45:33
>>> day = 'Wednesday'>>> month = 'March'>>> weekday = 'Wednesday'>>> month = 'March'>>> day = 10>>> year = 2010>>> year = 2012>>> hour = 11>>> minute = 45>>> second = 33>>> print('{}:{}:{}'.format(hour, minute, second))11:45:33>>> print('{}, {} {}, {} at {}:{}:{}'.format(weekday, month, day, year, hour, minute, second))Wednesday, March 10, 2012 at 11:45:33
placeholders
Introduction to Computing Using Python
Specifying field width
The format() method can be used to line up data in columns
>>> for i in range(1,8):print(i, i**2, 2**i)
1 1 22 4 43 9 84 16 165 25 326 36 647 49 128>>>
>>> for i in range(1,8):print(i, i**2, 2**i)
1 1 22 4 43 9 84 16 165 25 326 36 647 49 128>>>
>>> for i in range(1,8):print(i, i**2, 2**i)
1 1 22 4 43 9 84 16 165 25 326 36 647 49 128>>> for i in range(1, 8):
print('{} {:2} {:3}'.format(i, i**2, 2**i))
1 1 22 4 43 9 84 16 165 25 326 36 647 49 128>>>
>>> for i in range(1,8):print(i, i**2, 2**i)
1 1 22 4 43 9 84 16 165 25 326 36 647 49 128>>> for i in range(1, 8):
print('{} {:2} {:3}'.format(i, i**2, 2**i))
1 1 22 4 43 9 84 16 165 25 326 36 647 49 128>>>
reserves 2 spaces for i**2
reserves 3 spaces for 2**i
plus a blank space between the columns
Numbers are aligned to the right
Numbers are aligned to the right
Introduction to Computing Using Python
Specifying field width
>>> lst = ['Alan Turing', 'Ken Thompson', 'Vint Cerf']>>> for name in lst:
fl = name.split()print(fl[0], fl[1])
Alan TuringKen ThompsonVint Cerf>>>
>>> lst = ['Alan Turing', 'Ken Thompson', 'Vint Cerf']>>> for name in lst:
fl = name.split()print(fl[0], fl[1])
Alan TuringKen ThompsonVint Cerf>>>
>>> lst = ['Alan Turing', 'Ken Thompson', 'Vint Cerf']>>> for name in lst:
fl = name.split()print(fl[0], fl[1])
Alan TuringKen ThompsonVint Cerf>>> for name in lst:
fl = name.split()print('{:5} {:10}'.format(fl[0], fl[1]))
Alan Turing Ken Thompson Vint Cerf >>>
>>> lst = ['Alan Turing', 'Ken Thompson', 'Vint Cerf']>>> for name in lst:
fl = name.split()print(fl[0], fl[1])
Alan TuringKen ThompsonVint Cerf>>> for name in lst:
fl = name.split()print('{:5} {:10}'.format(fl[0], fl[1]))
Alan Turing Ken Thompson Vint Cerf >>>
Strings are aligned to the left
The format() method can be used to line up data in columns
Introduction to Computing Using Python
Output format type
>>> n = 10>>> '{:b}'.format(n)'1010'>>> '{:c}'.format(n)'\n'>>> '{:d}'.format(n)'10'>>> '{:X}'.format(n)'A'>>> '{:e}'.format(n)'1.000000e+01'>>>
>>> n = 10>>> '{:b}'.format(n)'1010'>>> '{:c}'.format(n)'\n'>>> '{:d}'.format(n)'10'>>> '{:X}'.format(n)'A'>>> '{:e}'.format(n)'1.000000e+01'>>>
Inside the curly braces of a placeholder, we can specify the field width
Type Explanation
b binary
c character
d decimal
X hexadecimal
e scientific
f fixed-point
>>> n = 10>>> '{:b}'.format(n)'1010'>>> '{:c}'.format(n)'\n'>>> '{:d}'.format(n)'10'>>> '{:X}'.format(n)'A'>>> '{:e}'.format(n)'1.000000e+01'>>> '{:7.2f}'.format(n)' 10.00'>>>
>>> n = 10>>> '{:b}'.format(n)'1010'>>> '{:c}'.format(n)'\n'>>> '{:d}'.format(n)'10'>>> '{:X}'.format(n)'A'>>> '{:e}'.format(n)'1.000000e+01'>>> '{:7.2f}'.format(n)' 10.00'>>>
'{:7.2f}'
field width
decimal precision
Inside the curly braces of a placeholder, we can specify the field width, the type of the outputInside the curly braces of a placeholder, we can specify the field width, the type of the output, and the decimal precision
Introduction to Computing Using Python
Files and the file system
//
ApplicationsApplications UsersUsersbinbin varvar
Firefox.appFirefox.appMail.appMail.app SharedSharedmessimessi
poem.txtpoem.txtimage.jpgimage.jpgContentsContents
MacOSMacOS
MailMail
CanonCanon
The file system is the OS component that organizes files and provides a way to create, access, and modify files
Files are organized into a tree structure
root folder//
ApplicationsApplications UsersUsersbinbin varvar
Firefox.appFirefox.appMail.appMail.app SharedSharedmessimessi
ContentsContents
MacOSMacOS
CanonCanon• folders (or directories)• folders (or directories)• regular files
text filebinary fileWhile every file and folder has a name, it is the file pathname that identifies the file
poem.txtpoem.txt
Absolute pathnames• /var/poem.txt• /Users/messi/poem.txt• /Applications/Mail.app/
Relative pathnames (relative to current working directory Users)• messi/poem.txt• messi/image.jpg• Shared
Introduction to Computing Using Python
Opening and closing a file
Processing a file consists of:1. Opening the file2. Reading from and/or writing to the file3. Closing the file
>>> infile = open('sample.txt')Traceback (most recent call last): File "<pyshell#50>", line 1, in <module> infile = open('sample.txt')IOError: [Errno 2] No such file or directory: 'sample.txt'>>>
>>> infile = open('sample.txt')Traceback (most recent call last): File "<pyshell#50>", line 1, in <module> infile = open('sample.txt')IOError: [Errno 2] No such file or directory: 'sample.txt'>>>
>>> infile = open('sample.txt')Traceback (most recent call last): File "<pyshell#50>", line 1, in <module> infile = open('sample.txt')IOError: [Errno 2] No such file or directory: 'sample.txt'>>> infile = open('example.txt', 'r')>>>
>>> infile = open('sample.txt')Traceback (most recent call last): File "<pyshell#50>", line 1, in <module> infile = open('sample.txt')IOError: [Errno 2] No such file or directory: 'sample.txt'>>> infile = open('example.txt', 'r')>>>
>>> infile = open('sample.txt')Traceback (most recent call last): File "<pyshell#50>", line 1, in <module> infile = open('sample.txt')IOError: [Errno 2] No such file or directory: 'sample.txt'>>> infile = open('example.txt', 'r')>>> infile.close()>>>
>>> infile = open('sample.txt')Traceback (most recent call last): File "<pyshell#50>", line 1, in <module> infile = open('sample.txt')IOError: [Errno 2] No such file or directory: 'sample.txt'>>> infile = open('example.txt', 'r')>>> infile.close()>>>
Built-in function open() is used to open a file
• The second (optional) argument is the file mode
• The first input argument is the file pathname, whether absolute or relative with respect to the current working directory
File mode 'r' is used toopen a file for reading (rather than, say, writing)
A “file” object is of a type that supports several “file” methods, including method close() that closes the file
• Returns a “file” object
Introduction to Computing Using Python
Open file mode
Mode Description
r Reading (default)
w Writing (if file exists, content is wiped)
a Append (if file exists, writes are appended)
r+ Reading and Writing
t Text (default)
b Binary
The file mode defines how the file will be accessed
>>> infile = open('example.txt', 'rt')>>> infile = open('example.txt', 'r')>>> infile = open('example.txt', 't')>>> infile = open('example.txt')
>>> infile = open('example.txt', 'rt')>>> infile = open('example.txt', 'r')>>> infile = open('example.txt', 't')>>> infile = open('example.txt')
These are all equivalent
Introduction to Computing Using Python
File methods
Usage Description
infile.read(n) Read n characters starting from cursor; if fewer than n characters remain, read until the end of file
infile.read() Read starting from cursor up to the end of the file
infile.readline() Read starting from cursor up to, and including, the end of line character
infile.readlines() Read starting from cursor up to the end of the file and return list of lines
outfile.write(s) Write string s to file outfile starting from cursor
infile.close(n) Close file infile
There are several “file” types; they all support similar “file” methods • Methods read() and readline() return the characters read as a string• Methods readlines() returns the characters read as a list of lines • Method write() returns the number of characters written
Introduction to Computing Using Python
Reading a file
>>> infile = open('example.txt')>>>>>> infile = open('example.txt')>>>
1 The 3 lines in this file end with the new line character.\n2 \n3 There is a blank line above this line.\n
1 The 3 lines in this file end with the new line character.\n2 \n3 There is a blank line above this line.\n
⌃⌃ ⌃⌃
⌃
>>> infile = open('example.txt')>>> infile.read(1)'T'>>>
>>> infile = open('example.txt')>>> infile.read(1)'T'>>>
>>> infile = open('example.txt')>>> infile.read(1)'T'>>> infile.read(5)'he 3 '>>>
>>> infile = open('example.txt')>>> infile.read(1)'T'>>> infile.read(5)'he 3 '>>>
>>> infile = open('example.txt')>>> infile.read(1)'T'>>> infile.read(5)'he 3 '>>> infile.readline()'lines in this file end with the new line character.\n'>>>
>>> infile = open('example.txt')>>> infile.read(1)'T'>>> infile.read(5)'he 3 '>>> infile.readline()'lines in this file end with the new line character.\n'>>>
>>> infile = open('example.txt')>>> infile.read(1)'T'>>> infile.read(5)'he 3 '>>> infile.readline()'lines in this file end with the new line character.\n'>>> infile.read()'\nThere is a blank line above this line.\n'>>>
>>> infile = open('example.txt')>>> infile.read(1)'T'>>> infile.read(5)'he 3 '>>> infile.readline()'lines in this file end with the new line character.\n'>>> infile.read()'\nThere is a blank line above this line.\n'>>>
>>> infile = open('example.txt')>>> infile.read(1)'T'>>> infile.read(5)'he 3 '>>> infile.readline()'lines in this file end with the new line character.\n'>>> infile.read()'\nThere is a blank line above this line.\n'>>> infile.close()>>>
>>> infile = open('example.txt')>>> infile.read(1)'T'>>> infile.read(5)'he 3 '>>> infile.readline()'lines in this file end with the new line character.\n'>>> infile.read()'\nThere is a blank line above this line.\n'>>> infile.close()>>>
example.txt
When the file is opened, a cursor is associated with the opened file
The initial position of the cursor is:
• at the beginning of the file, if file mode is r
• at the end of the file, if file mode is a or w
Introduction to Computing Using Python
Patterns for reading a text file
def numChars(filename): 'returns the number of characters in file filename'
infile = open(filename, 'r') content = infile.read() infile.close()
return len(content)
def numChars(filename): 'returns the number of characters in file filename'
infile = open(filename, 'r') content = infile.read() infile.close()
return len(content)
Common patterns for reading a file:
1. Read the file content into a string2. Read the file content into a list of words3. Read the file content into a list of lines
def numWords(filename): 'returns the number of words in file filename'
infile = open(filename) content = infile.read() infile.close() wordList = content.split()
return len(wordList)
def numWords(filename): 'returns the number of words in file filename'
infile = open(filename) content = infile.read() infile.close() wordList = content.split()
return len(wordList)
def numLines(filename): 'returns the number of lines in file filename'
infile = open(filename, 'r’) lineList = infile.readlines() infile.close()
return len(lineList)
def numLines(filename): 'returns the number of lines in file filename'
infile = open(filename, 'r’) lineList = infile.readlines() infile.close()
return len(lineList)
Example:
1234
1234
1 T234
1 T234
1 This is the first line.234
1 This is the first line.234
1 This is the first line. Still the first line…\n234
1 This is the first line. Still the first line…\n234
1 This is the first line. Still the first line…\n2 Now we are in the second line.\n34
1 This is the first line. Still the first line…\n2 Now we are in the second line.\n34
1 This is the first line. Still the first line…\n2 Now we are in the second line.\n3 Non string value like 5 must be converted first.\n4
1 This is the first line. Still the first line…\n2 Now we are in the second line.\n3 Non string value like 5 must be converted first.\n4
1 This is the first line. Still the first line…\n2 Now we are in the second line.\n3 Non string value like 5 must be converted first.\n4 Non string value like 5 must be converted first.\n
1 This is the first line. Still the first line…\n2 Now we are in the second line.\n3 Non string value like 5 must be converted first.\n4 Non string value like 5 must be converted first.\n
Introduction to Computing Using Python
Writing to a text file
⌃ ⌃⌃⌃
⌃
>>> outfile = open('test.txt', 'w')>>> >>> outfile = open('test.txt', 'w')>>>
test.txt⌃ ⌃
>>> outfile = open('test.txt', 'w')>>> outfile.write('T')1>>>
>>> outfile = open('test.txt', 'w')>>> outfile.write('T')1>>>
>>> outfile = open('test.txt', 'w')>>> outfile.write('T')1>>> outfile.write('his is the first line.')22>>>
>>> outfile = open('test.txt', 'w')>>> outfile.write('T')1>>> outfile.write('his is the first line.')22>>>
>>> outfile = open('test.txt', 'w')>>> outfile.write('T')1>>> outfile.write('his is the first line.')22>>> outfile.write(' Still the first line...\n')25>>>
>>> outfile = open('test.txt', 'w')>>> outfile.write('T')1>>> outfile.write('his is the first line.')22>>> outfile.write(' Still the first line...\n')25>>>
>>> outfile = open('test.txt', 'w')>>> outfile.write('T')1>>> outfile.write('his is the first line.')22>>> outfile.write(' Still the first line...\n')25>>> outfile.write('Now we are in the second line.\n')31>>>
>>> outfile = open('test.txt', 'w')>>> outfile.write('T')1>>> outfile.write('his is the first line.')22>>> outfile.write(' Still the first line...\n')25>>> outfile.write('Now we are in the second line.\n')31>>>
>>> outfile = open('test.txt', 'w')>>> outfile.write('T')1>>> outfile.write('his is the first line.')22>>> outfile.write(' Still the first line...\n')25>>> outfile.write('Now we are in the second line.\n')31>>> outfile.write('Non string value like '+str(5)+' must be converted first.\n')49>>>
>>> outfile = open('test.txt', 'w')>>> outfile.write('T')1>>> outfile.write('his is the first line.')22>>> outfile.write(' Still the first line...\n')25>>> outfile.write('Now we are in the second line.\n')31>>> outfile.write('Non string value like '+str(5)+' must be converted first.\n')49>>>
>>> outfile = open('test.txt', 'w')>>> outfile.write('T')1>>> outfile.write('his is the first line.')22>>> outfile.write(' Still the first line...\n')25>>> outfile.write('Now we are in the second line.\n')31>>> outfile.write('Non string value like '+str(5)+' must be converted first.\n')49>>> outfile.write('Non string value like {} must be converted first.\n'.format(5))49>>> outfile.close()
>>> outfile = open('test.txt', 'w')>>> outfile.write('T')1>>> outfile.write('his is the first line.')22>>> outfile.write(' Still the first line...\n')25>>> outfile.write('Now we are in the second line.\n')31>>> outfile.write('Non string value like '+str(5)+' must be converted first.\n')49>>> outfile.write('Non string value like {} must be converted first.\n'.format(5))49>>> outfile.close()
Introduction to Computing Using Python
Types of errors
>>> excuse = 'I'm sick'SyntaxError: invalid syntax>>> print(hour+':'+minute+':'+second)Traceback (most recent call last): File "<pyshell#113>", line 1, in <module> print(hour+':'+minute+':'+second)TypeError: unsupported operand type(s) for +: 'int' and 'str’>>> infile = open('sample.txt')Traceback (most recent call last): File "<pyshell#50>", line 1, in <module> infile = open('sample.txt')IOError: [Errno 2] No such file or directory: 'sample.txt’
>>> excuse = 'I'm sick'SyntaxError: invalid syntax>>> print(hour+':'+minute+':'+second)Traceback (most recent call last): File "<pyshell#113>", line 1, in <module> print(hour+':'+minute+':'+second)TypeError: unsupported operand type(s) for +: 'int' and 'str’>>> infile = open('sample.txt')Traceback (most recent call last): File "<pyshell#50>", line 1, in <module> infile = open('sample.txt')IOError: [Errno 2] No such file or directory: 'sample.txt’
We saw different types of errors in this chapter
There are basically two types of errors:
• syntax errors• erroneous state
errors
Introduction to Computing Using Python
Syntax errors
>>> (3+4] SyntaxError: invalid syntax>>> if x == 5 SyntaxError: invalid syntax >>> print 'hello' SyntaxError: invalid syntax >>> lst = [4;5;6] SyntaxError: invalid syntax >>> for i in range(10): print(i) SyntaxError: expected an indented block
>>> (3+4] SyntaxError: invalid syntax>>> if x == 5 SyntaxError: invalid syntax >>> print 'hello' SyntaxError: invalid syntax >>> lst = [4;5;6] SyntaxError: invalid syntax >>> for i in range(10): print(i) SyntaxError: expected an indented block
Syntax errors are errors that are due to the incorrect format of a Python statement
• They occur while the statement is being translated to machine language and before it is being executed.
Introduction to Computing Using Python
Erroneous state errors
>>> 3/0Traceback (most recent call last): File "<pyshell#56>", line 1, in <module> 3/0ZeroDivisionError: division by zero
>>> 3/0Traceback (most recent call last): File "<pyshell#56>", line 1, in <module> 3/0ZeroDivisionError: division by zero
The program execution gets into an erroneous state
>>> lstTraceback (most recent call last): File "<pyshell#57>", line 1, in <module> lstNameError: name 'lst' is not defined
>>> lstTraceback (most recent call last): File "<pyshell#57>", line 1, in <module> lstNameError: name 'lst' is not defined>>> lst = [12, 13, 14]>>> lst[3]Traceback (most recent call last): File "<pyshell#59>", line 1, in <module> lst[3]IndexError: list index out of range
>>> lst = [12, 13, 14]>>> lst[3]Traceback (most recent call last): File "<pyshell#59>", line 1, in <module> lst[3]IndexError: list index out of range
>>> lst * lstTraceback (most recent call last): File "<pyshell#60>", line 1, in <module> lst * lstTypeError: can't multiply sequence by non-int of type 'list’
>>> lst * lstTraceback (most recent call last): File "<pyshell#60>", line 1, in <module> lst * lstTypeError: can't multiply sequence by non-int of type 'list’
>>> int('4.5')Traceback (most recent call last): File "<pyshell#61>", line 1, in <module> int('4.5')ValueError: invalid literal for int() with base 10: '4.5'
>>> int('4.5')Traceback (most recent call last): File "<pyshell#61>", line 1, in <module> int('4.5')ValueError: invalid literal for int() with base 10: '4.5'
When an error occurs, an “error” object is created
• This object has a type that is related to the type of error• The object contains information about the error
The “error” object is called an exception; the creation of an exception due to an error is called the raising of an exception
When an error occurs, an “error” object is created
• This object has a type that is related to the type of error• The object contains information about the error• The default behavior is to print this information and interrupt the execution of
the statement.
>>> int('4.5')Traceback (most recent call last): File "<pyshell#61>", line 1, in <module> int('4.5')ValueError: invalid literal for int() with base 10: '4.5'
>>> int('4.5')Traceback (most recent call last): File "<pyshell#61>", line 1, in <module> int('4.5')ValueError: invalid literal for int() with base 10: '4.5'
Introduction to Computing Using Python
Exception types
Some of the built-in exception classes:
Exception Explanation
KeyboardInterrupt Raised when user hits Ctrl-C, the interrupt key
OverflowError Raised when a floating-point expression evaluates to a value that is too large
ZeroDivisionError Raised when attempting to divide by 0
IOError Raised when an I/O operation fails for an I/O-related reason
IndexError Raised when a sequence index is outside the range of valid indexes
NameError Raised when attempting to evaluate an unassigned identifier (name)
TypeError Raised when an operation of function is applied to an object of the wrong type
ValueError Raised when operation or function has an argument of the right type but incorrect value