58
Introduction to computational thinking Module 8 : Strings and Characters Module 8 : Strings and Characters 1 Asst Prof Michael Lees Office: N402c76 email: mhlees[at]ntu.edu.sg

Lecture 8 strings and characters

Embed Size (px)

Citation preview

Page 1: Lecture 8  strings and characters

Introduction to computational thinking

Module 8 : Strings and Characters

Module 8 : Strings and Characters 1

Asst Prof Michael LeesOffice: N4‐02c‐76

email: mhlees[at]ntu.edu.sg

Page 2: Lecture 8  strings and characters

Contents

1. What is a string (defining)2. Accessing strings3. String operations4. Functions and Methods for 

Strings5. Formatting Strings

Module 8 : Strings and Characters 2

Chapter 4

Page 3: Lecture 8  strings and characters

What is a string?

• A string is a sequence of characters• Notionally, a character is a letter or a symbol• But, we’ll find out about characters later.

Module 8 : Strings and Characters 3

Page 4: Lecture 8  strings and characters

Defining a string

• A string is indicated using:– ‘  ‘ or “  “

• The sequence of characters is important, and is maintained.

CharacterSequence

Module 8 : Strings and Characters 4

Page 5: Lecture 8  strings and characters

Defining a string (more)

• Then there is “““ ””” (triple quotes)• Preserves vertical and horizontal formatting• E.g.,

“““ This is

a vertically

and horizontally formatted string. ”””

• Compare with:“This is not verticallyordered’”

Module 8 : Strings and Characters 5

Page 6: Lecture 8  strings and characters

More definitions

• Using single or double is fine:– S = “a string”– S = ‘a string’

• Don’t use both! – S = “a string’ WRONG! 

• How to put in a apostrophe?– S = “Mike’s string” #Use different quotes– S = ‘Mike\’s string’ #Use an escape character

Module 8 : Strings and Characters 6

Page 7: Lecture 8  strings and characters

Index

• Elements (or characters) in a string are in a sequence, we can identify each element with an index ( a position in the sequence )

• Can start index from either end of sequence.– Positive values indicate counting from left, starting at 0

– Negative values indicate counting from right, starting with ‐1

Module 8 : Strings and Characters 7 of 53

Page 8: Lecture 8  strings and characters

Hello World

• String = “Hello World”

• Index 8 and ‐3 point to same location: r

Module 8 : Strings and Characters 8

Page 9: Lecture 8  strings and characters

Accessing one element

• We can use [ ] to access particular characters in a string:myStr = “Hello World”

x = myStr[1]

print x #will print e

print mystr =>?

print myStr[-2] => ?print myStr[11] => ?

Module 8 : Strings and Characters 9

Page 10: Lecture 8  strings and characters

Slicing: parts of a String

• You can also select a part of the string, slice of characters

• Similar syntax, [ start : finish ]– start : index of start of subsequence– finish: index of position after we want the subsequence to end (i.e., the sequence will not contain character myStr[finish])

• If start or finish are not specified they default to the beginning and end of the string respectively.

Module 8 : Strings and Characters 10

Page 11: Lecture 8  strings and characters

Slicing: parts of a String

• Slicing uses half‐open ranges, common in python. (Different from fully closed ranges)

• The first index is included, the last index is the one after what is included.

myStr = “Hello World”

myStr[1:4] => ?

Module 8 : Strings and Characters 11

Page 12: Lecture 8  strings and characters

Slicing: Examples

myStr = “Hello World”

print(myStr[1:6])

print(myStr[1:2])

print(myStr[-7:-1])

print(myStr[-3:-5])

print(myStr[:6])

print(myStr[5:])

ello

e

o Worl

‘ ‘ (empty)

Hello

World

Output

Module 8 : Strings and Characters 12 of 53

Page 13: Lecture 8  strings and characters

One more example

myStr[3:-2]

Module 8 : Strings and Characters 13 of 53

Page 14: Lecture 8  strings and characters

Slicing and skipping

• We can specify a third argument:– [ start : finish : countBy ]

• countBy specifies a ‘skip’• Defaults:

– start = beginning– finish = end– countBy = 1

myStr = “Hello World”

myStr[1:11:2] =>’el ol’

Module 8 : Strings and Characters 14 of 53

Page 15: Lecture 8  strings and characters

Slicing and skipping

myStr[::2] =>’HloWrd’

Module 8 : Strings and Characters 15 of 53

Page 16: Lecture 8  strings and characters

Python Idioms

• Idiom : “A form of expression natural to a language, person, or group of people”

• These are things particularly unusual/unique to python• Copying a string:aString = “String to copy”

newStr = aString[:]

newStr = ‘’.join(aString)

• To reverse a string:aString = “Madam I’m Adam”

revString = aString[::-1] => ?

Module 8 : Strings and Characters 16

Page 17: Lecture 8  strings and characters

STRING OPERATIONSModule 8: Strings and Characters

Module 8 : Strings and Characters 17 of 53

Page 18: Lecture 8  strings and characters

Basic operations

opStr = “Basic”

• length of a string : len()len(opStr) => 4

• Concatenate strings : +opStr + “ operations”

=> “Basic operations”

• Repeat String : *opStr * 3 => “BasicBasicBasic”

Module 8 : Strings and Characters 18 of 53

Page 19: Lecture 8  strings and characters

More operations

• Operations + and * will make new strings, input arguments not changed

• Order? important for +, irrelevant for *• Arguments to operators must be of certain type:– + : two strings– * : string and integer

• Notice the meaning of + depends on argument type (works with integers also)

Module 8 : Strings and Characters 19 of 53

Page 20: Lecture 8  strings and characters

The type function

• Easy to check type of variable:myStr = ‘hello world’

type(myStr) => <type ‘str’>

myStr2 = 245

type(myStr2) => <type ‘int’>

myStr + myStr2 => ?

myStr * myStr2 => ?

Module 8 : Strings and Characters 20

Page 21: Lecture 8  strings and characters

Back to Characters

• There are two common systems for representing characters in machines now (to store a character in memory it must be binary, so we give it a code)

• ASCII (older) and Unicode (more modern, more characters)

• Tables indicate mapping of characters to ASCII or Unicode

Module 8 : Strings and Characters 21

Page 22: Lecture 8  strings and characters

ASCII vs Unicode

• ASCII stores everything in 8 bits, so can only manage 256 different characters.

• Unicode, was an extension of ASCII to include all characters of all languages.

• The Unicode code space is divided into 17 planes. Each plane contains 65,536 code points (16‐bit) and consists of several charts.

• Total of:  1,114,112 possible, uses 96,000.

Module 8 : Strings and Characters 22

Page 23: Lecture 8  strings and characters

Module 8 : Strings and Characters 23

Page 24: Lecture 8  strings and characters

Getting the code

• ord() takes a string of length 1 as input and will return the unicode of the character (for standard symbols this is same as ASCII)

• chr() takes an ASCII code and returns a string on length 1 containing the corresponding character

ord(‘a’) => 97

chr(97) => ‘a’

Encrpyt (see later):code = ord(‘a’)

chr(code+1) => ‘b’Module 8 : Strings and Characters 24 of 53

Page 25: Lecture 8  strings and characters

Comparing characters

• When comparing a single character the code is used to compare.

‘a’ == ‘a’ => true‘a’ < ‘b’ => true‘A’ < ‘B’ => true‘1’ < ‘9’ => true‘a’ < ‘B’ => false!

Module 8 : Strings and Characters 25

Page 26: Lecture 8  strings and characters

Comparing strings

• Checks first element in strings, if equal move to each in turn (left to right)

• If they are not equal, the relationship of the string is the same as those two characters

• If one string is shorter (but equal to a point), the shorter string is smaller.

Module 8 : Strings and Characters 26

Page 27: Lecture 8  strings and characters

Examples

• ‘aa’ < ‘ab’– First element is same, move to second. a < b so ‘aa’ < ‘ab’ => true

• ‘aaab’ > ‘aaac’– First three elements same, b<c so ‘aaab’ > ‘aaac’ => false.

• ‘aa’ < ‘aaz’– The first string is the same but shorter. Thus it is “smaller” => true.

Module 8 : Strings and Characters 27

Page 28: Lecture 8  strings and characters

Membership operations

• Does one string contain another.– a in b: returns true is string b contains string a

myStr = “abcdefg”

‘c’ in myStr => true

‘cde’ in myStr => true

‘cef’ in myStr => false

myStr in myStr => true

Module 8 : Strings and Characters 28

Page 29: Lecture 8  strings and characters

Strings are Immutable

– aStr = ‘spam’

– aStr[1] = ‘l’ ERROR

• However, you can use it to make another string (copy it, slice it, etc).– newStr = aStr[:1] + ‘l’ + aStr[2:]– aStr ‘spam’– newStr => ‘slam’

Module 8 : Strings and Characters

• Strings are immutable, that is you cannot change one once you make it:

29

Page 30: Lecture 8  strings and characters

FUNCTIONS & METHODS FOR STRINGS

Module 8: Strings and Characters

Module 8 : Strings and Characters 30

Page 31: Lecture 8  strings and characters

Functions reminder

• A function is a piece of code that performs some operation. Details are hidden (encapsulated), only it’s interface exposed.

• Way to arrange a program to make it easier to understand.

• Functions have arguments as input and may return some output.

Module 8 : Strings and Characters 31

Page 32: Lecture 8  strings and characters

A string fuction: len()

• We have already seen one string function:–len(‘test string’) => 11(not 10)

• Input: a string• Output : an integer indicating length of string.

Module 8 : Strings and Characters 32

Page 33: Lecture 8  strings and characters

String method

• A method is a variation on a function– like a function, it represents a program– like a function, it has input arguments and an output

• Unlike a function, it is applied in the context of a particular object. 

• This is indicated by the ‘dot notation’ invocation

• Each string is itself and object.

Module 8 : Strings and Characters 33

Page 34: Lecture 8  strings and characters

Example

• upper() is a string method.• It will output a new string which is the same as the string on which it was called, except all letters will now be upper case.

myStr = “shouting!”

mystr.upper() => “SHOUTING!”• object : myStr• method : upper()• method call: myStr.upper()

Module 8 : Strings and Characters 34

Page 35: Lecture 8  strings and characters

Methods in general• We’ll touch on this more later.• But in general the form is:

– object.method() • We say object is calling the method method.• Different objects have different methods available, defined by the type (class).

• How to find out all methods available on strings? Use a reference! : Python online…– http://docs.python.org/lib/string‐methods.html

• Iintegrated Development Environment (IDE) such as IDLE will help.

Module 8 : Strings and Characters 35

Page 36: Lecture 8  strings and characters

Find

myStr = “Find in a string”

myStr.find(‘d’) => 3

• find is another string method, called using same object.method() notation.

• It takes a single character string as input and returns the index of the position where the character is first seen (from left to right).

• ‘d’ is called an argument of the method.

Module 8 : Strings and Characters 36

Page 37: Lecture 8  strings and characters

Chaining methods together

Methods can be chained together. • Perform first operation, yielding an object• Use the resulting object for the next methodmyStr = ‘Python Rules!’

myStr.upper() ‘PYTHON RULES!’

myStr.upper().find(‘H’)

=> 3

Module 8 : Strings and Characters 37

Page 38: Lecture 8  strings and characters

CHALLENGE 8.1 – SECRET MESSAGECreate a simple program to do simple encrypting and decrypting of a string. Nothing too complicated: just so a human cannot read the encrypted message.

Module 8 : Strings and Characters 38

Page 39: Lecture 8  strings and characters

Thought process

• Character replacement.• Replace each character in the string with a different one

• Need to be able to translate back• A lookup table?• Or simple way to shift the ASCII code?

Module 8 : Strings and Characters 39

Page 40: Lecture 8  strings and characters

CHALLENGE 8.2 – REMOVE WHITE SPACERemove all white space characters from a string

Module 8 : Strings and Characters 40

Page 41: Lecture 8  strings and characters

Though process

• Similar solution? iterate and re‐build string without space?

• Think about the task, is it common?• If it seems common, there is probably a built‐in method!

• Look in the python reference (online or book)

Module 8 : Strings and Characters 41

Page 42: Lecture 8  strings and characters

CHALLENGE 8.3 – MESSING WITH VOWELSmake all vowels in the second half of a string capitalized

Module 8 : Strings and Characters 42

Page 43: Lecture 8  strings and characters

Thought process

• Common? No• What do we have available to us?• A method…• Iterate through string, check if its in second half of string (using len()) and re‐build, changing case where necessary

• Alternatively, split the string in half first.

Module 8 : Strings and Characters 43

Page 44: Lecture 8  strings and characters

FORMATTING STRINGSModule 8: Strings and Characters

Module 8 : Strings and Characters 44

Page 45: Lecture 8  strings and characters

Pretty printing

• The default print function is fine.• More is possible• format allows us to perform low‐level type‐setting (prettier strings)

Module 8 : Strings and Characters 45

Page 46: Lecture 8  strings and characters

Basic form

• Look at an example:n = 500

description = “a lot!”

print(“In this class we have {}students, which is {}”.format(n, description))

• This will show:In this class we have 500 students, which is a lot!

Module 8 : Strings and Characters 46

Page 47: Lecture 8  strings and characters

Basic form

• format creates a new string!“In this class we have {} students, which is {}”.format(n, description)

• This outputs a new string where {} will be replaced by the data inside the format method (this case n and description)

Module 8 : Strings and Characters 47

Page 48: Lecture 8  strings and characters

Example

print(“In this class we have {} students, which is {}”.format(n, description))

String in quotesformat

• Objects are matched in order with format descriptors. The substitution is made and resulting string created (then printed)

In this class we have 500 students, which is a lot!Module 8 : Strings and Characters 48

Page 49: Lecture 8  strings and characters

Format String

• We can put ‘stuff’ inside the {} which specifies how the data should be printed (i.e., make it pretty)

• Overall:{:[align] [min_width] [.precision][descriptor]}

[ ] means optional

Module 8 : Strings and Characters 49

Page 50: Lecture 8  strings and characters

Descriptors (codes)

• s string• d decimal• e floating point exponent• f floating point decimal• u unsigned integer

Module 8 : Strings and Characters 50

Page 51: Lecture 8  strings and characters

width and alignment

• < left• > right• ^ center• Integers indicate widthprint(‘{:>10s} is {:<10d} years old.’.format(‘Bill’, 25))

• ‘Bill’ is printed right aligned as a string, with at least 10 spaces.

Module 8 : Strings and Characters 51

Page 52: Lecture 8  strings and characters

Example of space

print(“MIKE, OFFICE: {:3d} TEL: {:<10d} ”.format(76, 67906277))

MIKE, OFFICE: 76 TEL:67906277

3 spaces wide, right justified (by default)

10 spaces wide, left justified

Module 8 : Strings and Characters 52

Page 53: Lecture 8  strings and characters

Precision

• print(math.pi)

3.14159265359 #default is 11• print('{:.4f}'.format(math.pi))

3.1416 (4 decimal places of precision, with rounding)

• print('{:10.2f}'.format(math.pi))

• ‘ 3.14’ (10 spaces for characteristic and the decimal point – not including mantissa)

Module 8 : Strings and Characters 53

Page 54: Lecture 8  strings and characters

CHALLENGE 8.4 – ASCII tableCreate a formatted table of all the ASCII characters and codes.Code should be first item in table (right aligned) and character second item in table (left aligned). Only do printable characters 33 to 127

Module 8 : Strings and Characters 54

Page 55: Lecture 8  strings and characters

Thought process

• Iterate through the characters• Iterate how? Use code from 30 to 127.• Use chr() and ord() functions to display• For each character we should print a formatted string…

Module 8 : Strings and Characters 55

Page 56: Lecture 8  strings and characters

A Solution

for x in range(33, 127):

print('|{:3d}|{:<3s}|'.format(x, chr(x)))

Module 8 : Strings and Characters 56

Page 57: Lecture 8  strings and characters

Take home lessons

• Understand various operations on strings, remember the basic ones.

• Understand slicing and indexing• ASCII and Unicode: what they are and how to use them

• Method vs. function• The use of triple quotes (formatting)• Strings are useful… especially for files.

Module 8 : Strings and Characters 57

Page 58: Lecture 8  strings and characters

Further reading/exercises• http://code.google.com/edu/languages/google‐python‐class/strings.html

• http://diveintopython3.org/strings.html

• http://docs.python.org/tutorial/introduction.html#strings

• (I always assume you will read the book)

Module 8 : Strings and Characters 58