0% found this document useful (0 votes)
8 views

Lec 03

Uploaded by

caggllayan47
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views

Lec 03

Uploaded by

caggllayan47
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 24

STRING MANIPULATION,

GUESS-and-CHECK,
APPROXIMATIONS,
BISECTION
(download slides and follow along on repl.it!)

COMP100 LECTURE 3

COMP100 LECTURE 3 1
LAST TIME
 strings
 branching – if/elif/else
 while loops
 for loops

COMP100 LECTURE 3
2
THIS WEEK
 string manipulation
 guess and check algorithms
 approximate solutions
 bisection method

COMP100 LECTURE 3
3
STRINGS
 think of as a sequence of case sensitive characters
 can compare strings with ==, >, < etc.
 len() is a function used to retrieve the length of
the string in the parentheses

s = "abc"
len(s)  evaluates to 3

COMP100 LECTURE 3
4
STRINGS
 square brackets used to perform indexing into a string to
get the value at a certain index/position
s = "abc"
index: 0 1 2 indexing always starts at 0
index: -3 -2 -1 last element always at index -1
s[0]  evaluates to "a"
s[1]  evaluates to "b"
s[2]  evaluates to "c"
s[3]  trying to index out of bounds, error
s[-1]  evaluates to "c"
s[-2]  evaluates to "b"
s[-3]  evaluates to "a"
COMP100 LECTURE 3
5
STRINGS
 can slice strings using [start:stop:step]
 if give two numbers, [start:stop], step=1 by default
 you can also omit numbers and leave just colons
s = "abcdefgh"
s[3:6]  evaluates to "def", same as s[3:6:1]
s[3:6:2] evaluates to "df"
s[::]  evaluates to "abcdefgh", same as s[0:len(s):1]
s[::-1]  evaluates to "hgfedbca", same as s[-1:-(len(s)+1):-1]
s[4:1:-2]evaluates to "ec"
COMP100 LECTURE 3
6
STRINGS
 can slice strings using [start:stop:step]
 if give two numbers, [start:stop], step=1 by default
 you can also omit numbers and leave just colons
s = "abcdefgh"
s[3:6]  evaluates to "def", same as s[3:6:1]
s[3:6:2] evaluates to "df"
s[::]  evaluates to "abcdefgh", same as s[0:len(s):1]
s[::-1]  evaluates to "hgfedbca", same as s[-1:-(len(s)+1):-1]
s[4:1:-2]evaluates to "ec"
COMP100 LECTURE 3
6
STRINGS
 strings are “immutable” – cannot be modified
s = "hello"
s[0] = 'y'  gives an error

"hello"

COMP100 LECTURE 3
7
STRINGS
 strings are “immutable” – cannot be modified
s = "hello"
s[0] = 'y'  gives an error
s = 'y'+s[1:len(s)]  is allowed,
s bound to new object

"hello"

"yello"

COMP100 LECTURE 3
7
for LOOPS RECAP
 for loops have a loop variable that iterates over a set of
values
for var in range(4):  var iterates over values 0,1,2,3
<expressions>  expressions inside loop executed
with each value for var

for var in range(4,6):  var iterates over values 4,5


<expressions>

 range is a way to iterate over numbers, but a for loop variable


can iterate over any set of values, not just numbers!

COMP100 LECTURE 3
8
STRINGS AND LOOPS
 these two code snippets do the same thing
 bottom one is more “pythonic”
s = "abcdefgh"
for index in range(len(s)):
if s[index] == 'i' or s[index] == 'u':
print("There is an i or u")

for char in s:
if char == 'i' or char == 'u':
print("There is an i or u")

COMP100 LECTURE 3
9
CODE EXAMPLE:
ROBOT CHEERLEADERS
an_letters = "aefhilmnorsxAEFHILMNORSX"

word = input("I will cheer for you! Enter a word: ")


times = int(input("Enthusiasm level (1-10): "))

i = 0
while i < len(word):
char = word[i]
if char in an_letters:
print("Give me an " + char + "! " + char)
else:
print("Give me a " + char + "! " + char)
i += 1
print("What does that spell?")
for i in range(times):
print(word, "!!!")

COMP100 LECTURE 3
10
CODE EXAMPLE:
ROBOT CHEERLEADERS
an_letters = "aefhilmnorsxAEFHILMNORSX"

word = input("I will cheer for you! Enter a word: ")


times = int(input("Enthusiasm level (1-10): "))

i = 0
while i < len(word): for char in word:
char = word[i]
if char in an_letters:
print("Give me an " + char + "! " + char)
else:
print("Give me a " + char + "! " + char)
i += 1
print("What does that spell?")
for i in range(times):
print(word, "!!!")

COMP100 LECTURE 3
10
EXERCISE
s1 = "mit u rock"
s2 = "i rule mit"
if len(s1) == len(s2):
for char1 in s1:
for char2 in s2:
if char1 == char2:
print("common letter")
break

COMP100 LECTURE 3
11
GUESS-AND-CHECK
 the process below also called exhaustive enumeration

 given a problem…
 you are able to guess a value for solution
 you are able to check if the solution is correct
 keep guessing until finding the solution
or guessed all possible values

COMP100 LECTURE 3
12
GUESS-AND-CHECK
– cube root
cube = 8
for guess in range(cube+1):
if guess**3 == cube:
print("Cube root of", cube, "is", guess)

COMP100 LECTURE 3
13
GUESS-AND-CHECK
– cube root
cube = 8
for guess in range(abs(cube)+1):
if guess**3 >= abs(cube):
break
if guess**3 != abs(cube):
print(cube, 'is not a perfect cube')
else:
if cube < 0:
guess = -guess
print('Cube root of '+str(cube)+' is '+str(guess))

COMP100 LECTURE 3 14
APPROXIMATE SOLUTIONS
 good enough solution
 start with a guess and increment by some small value
 keep guessing if |guess3-cube| >= epsilon
for some small epsilon

COMP100 LECTURE 3
15
APPROXIMATE SOLUTIONS
 good enough solution
 start with a guess and increment by some small value
 keep guessing if |guess3-cube| >= epsilon
for some small epsilon

 decreasing increment size slower program


 increasing epsilon  less accurate answer

COMP100 LECTURE 3
15
APPROXIMATE SOLUTION
– cube root
cube = 27
epsilon = 0.01
guess = 0.0
increment = 0.0001
num_guesses = 0
while abs(guess**3 - cube) >= epsilon: and guess <= cube :
guess += increment
num_guesses += 1
print('num_guesses =', num_guesses)
if abs(guess**3 - cube) >= epsilon:
print('Failed on cube root of', cube)
else:
print(guess, 'is close to the cube root of', cube)

COMP100 LECTURE 3
16
BISECTION SEARCH
 half interval each iteration
 new guess is halfway in between
 to illustrate, let’s play a game!

GUESS

GUESS

GUESS
6.0001 LECTURE 3 17
BISECTION SEARCH
– cube root
cube = 27
epsilon = 0.01
num_guesses = 0
low = 0
high = cube
guess = (high + low)/2.0
while abs(guess**3 - cube) >= epsilon:
if guess**3 < cube :
low = guess
else:
high = guess
guess = (high + low)/2.0
num_guesses += 1
print 'num_guesses =', num_guesses
print guess, 'is close to the cube root of', cube
COMP100 LECTURE 3
18
BISECTION SEARCH
CONVERGENCE
 search space
◦ first guess: N/2
◦ second guess: N/4
◦ kth guess: N/2k
 guess converges on the order of log2N steps
 bisection search works when value of function varies
monotonically with input
 code as shown only works for positive cubes > 1 – why?
 challenges modify to work with negative cubes!
 modify to work with x < 1!

COMP100 LECTURE 3
19
x<1
 if x < 1, search space is 0 to x but cube root is
greater than x and less than 1
 modify the code to choose the search space
depending on value of x

COMP100 LECTURE 3
20

You might also like