Introduction to Computing Using Python

25
Introduction to Computing Using Py Text Data, File I/O, and Exceptions Strings, revisited Formatted output File Input/Output Errors and Exceptions

description

Introduction to Computing Using Python. Text Data, File I/O, and Exceptions. Strings, revisited Formatted output File Input/Output Errors and Exceptions. String representations. Introduction to Computing Using Python. - PowerPoint PPT Presentation

Transcript of Introduction to Computing Using Python

Page 1: Introduction to Computing Using Python

Introduction to Computing Using Python

Text Data, File I/O, and Exceptions

Strings, revisited Formatted output File Input/Output Errors and Exceptions

Page 2: Introduction to Computing Using Python

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

Page 3: Introduction to Computing Using Python

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

Page 4: Introduction to Computing Using Python

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']

Page 5: Introduction to Computing Using Python

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

Page 6: Introduction to Computing Using Python

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

Page 7: Introduction to Computing Using Python

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

Page 8: Introduction to Computing Using Python

>>> 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

Page 9: Introduction to Computing Using Python

>>> 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!!! >>>

Page 10: Introduction to Computing Using Python

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

Page 11: Introduction to Computing Using Python

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

Page 12: Introduction to Computing Using Python

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

Page 13: Introduction to Computing Using Python

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

Page 14: Introduction to Computing Using Python

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

Page 15: Introduction to Computing Using Python

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

Page 16: Introduction to Computing Using Python

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

Page 17: Introduction to Computing Using Python

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

Page 18: Introduction to Computing Using Python

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

Page 19: Introduction to Computing Using Python

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

Page 20: Introduction to Computing Using Python

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:

Page 21: Introduction to Computing Using Python

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()

Page 22: Introduction to Computing Using Python

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

Page 23: Introduction to Computing Using Python

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.

Page 24: Introduction to Computing Using Python

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'

Page 25: Introduction to Computing Using Python

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