0% found this document useful (0 votes)
15 views21 pages

Lec 3

Uploaded by

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

Lec 3

Uploaded by

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

STRING

MANIPULATION,
GUESS-and-CHECK,
APPROXIMATIONS,
BISECTION
(download slides and .py files and
follow along!)
LECTURE 3

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

6.0001 LECTURE 3 2
TOD
AY
string manipulation
 guess and check algorithms
 approximate solutions
 bisection method

6.0001 LECTURE 3 3
STRIN
GS
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

6.0001 LECTURE 3 4
STRIN
GS
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
-3 -2 -1  last element always at index -1
index:
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"
6.0001 LECTURE 3 5
STRIN
GS
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[::] evaluatestoto"abcdefgh",
s[3:6:2] evaluates "df" 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"
6.0001 LECTURE 3 6
STRIN
GS
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"

6.0001 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
<expressions> 0,1,2,3
 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!

6.0001 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")

6.0001 LECTURE 3 9
CODE
ROBOT
EXAMPLE:
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, "!!!")
6.0001 LECTURE 3 10
EXERCI
SE= "mit u rock"
s1
s2 = "i rule
mit"
if len(s1) == len(s2):
for char1 in s1:
for char2 in s2:
if char1 ==
char2:
print("common letter")
break
6.0001 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 find solution or guessed all values

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

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

6.0001 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

 decreasing increment size  slower program


 increasing epsilon  less accurate answer

6.0001 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) 6.0001 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 +=
6.0001 LECTURE 3 18
BISECTION
SEARCH
CONVERGENC
search space
◦ first guess: N/2
E◦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!

6.0001 LECTURE 3 19
x<
1if 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

6.0001 LECTURE 3 20
MIT OpenCourseWare
https://ocw.mit.edu

6.0001 Introduction to Computer Science and Programming in Python


Fall 2016

For information about citing these materials or our Terms of Use, visit: https://ocw.mit.edu/terms.

You might also like