####################
## EXAMPLE: for loops over strings
####################
#s = "demo loops"
#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")


####################
## EXAMPLE: while loops and strings
## CHALLENGE: rewrite while loop with a for loop
####################
#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, "!!!")


    
####################
## EXAMPLE: perfect cube 
####################
#cube = 27
##cube = 8120601
#for guess in range(cube+1):
#    if guess**3 == cube:
#        print("Cube root of", cube, "is", guess)
#        # loops keeps going even after found the cube root
    

####################
## EXAMPLE: guess and check cube root 
####################
#cube = 27
##cube = 8120601
#for guess in range(abs(cube)+1):
#    # passed all potential cube roots
#    if guess**3 >= abs(cube):
#        # no need to keep searching
#        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))


####################
## EXAMPLE: approximate cube root 
####################
#cube = 27
##cube = 8120601
##cube = 10000
#epsilon = 0.1
#guess = 0.0
#increment = 0.01
#num_guesses = 0
## look for close enough answer and make sure
## didn't accidentally skip the close enough bound
#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, "with these parameters.")
#else:
#    print(guess, 'is close to the cube root of', cube)


####################
## EXAMPLE: bisection cube root (only positive cubes!)
####################
#cube = 27
##cube = 8120601
## won't work with x < 1 because initial upper bound is less than ans
##cube = 0.25
#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:
#        # look only in upper half search space
#        low = guess
#    else:
#        # look only in lower half search space
#        high = guess
#    # next guess is halfway in search space
#    guess = (high + low)/2.0
#    num_guesses += 1
#print('num_guesses =', num_guesses)
#print(guess, 'is close to the cube root of', cube)
   
####################
## EXAMPLE: for loops over strings
####################
#s = "demo loops"
#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")


####################
## EXAMPLE: while loops and strings
## CHALLENGE: rewrite while loop with a for loop
####################
#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, "!!!")


    
####################
## EXAMPLE: perfect cube 
####################
#cube = 27
##cube = 8120601
#for guess in range(cube+1):
#    if guess**3 == cube:
#        print("Cube root of", cube, "is", guess)
#        # loops keeps going even after found the cube root
    

####################
## EXAMPLE: guess and check cube root 
####################
#cube = 27
##cube = 8120601
#for guess in range(abs(cube)+1):
#    # passed all potential cube roots
#    if guess**3 >= abs(cube):
#        # no need to keep searching
#        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))


####################
## EXAMPLE: approximate cube root 
####################
#cube = 27
##cube = 8120601
##cube = 10000
#epsilon = 0.1
#guess = 0.0
#increment = 0.01
#num_guesses = 0
## look for close enough answer and make sure
## didn't accidentally skip the close enough bound
#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, "with these parameters.")
#else:
#    print(guess, 'is close to the cube root of', cube)


####################
## EXAMPLE: bisection cube root (only positive cubes!)
####################
#cube = 27
##cube = 8120601
## won't work with x < 1 because initial upper bound is less than ans
##cube = 0.25
#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:
#        # look only in upper half search space
#        low = guess
#    else:
#        # look only in lower half search space
#        high = guess
#    # next guess is halfway in search space
#    guess = (high + low)/2.0
#    num_guesses += 1
#print('num_guesses =', num_guesses)
#print(guess, 'is close to the cube root of', cube)
   
#################### ## EXAMPLE: for loops over strings #################### #s = "demo loops" #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") #################### ## EXAMPLE: while loops and strings ## CHALLENGE: rewrite while loop with a for loop #################### #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, "!!!") #################### ## EXAMPLE: perfect cube #################### #cube = 27 ##cube = 8120601 #for guess in range(cube+1): #    if guess**3 == cube: #        print("Cube root of", cube, "is", guess) #        # loops keeps going even after found the cube root #################### ## EXAMPLE: guess and check cube root #################### #cube = 27 ##cube = 8120601 #for guess in range(abs(cube)+1): #    # passed all potential cube roots #    if guess**3 >= abs(cube): #        # no need to keep searching #        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)) #################### ## EXAMPLE: approximate cube root #################### #cube = 27 ##cube = 8120601 ##cube = 10000 #epsilon = 0.1 #guess = 0.0 #increment = 0.01 #num_guesses = 0 ## look for close enough answer and make sure ## didn't accidentally skip the close enough bound #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, "with these parameters.") #else: #    print(guess, 'is close to the cube root of', cube) #################### ## EXAMPLE: bisection cube root (only positive cubes!) #################### #cube = 27 ##cube = 8120601 ## won't work with x < 1 because initial upper bound is less than ans ##cube = 0.25 #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: #        # look only in upper half search space #        low = guess #    else: #        # look only in lower half search space #        high = guess #    # next guess is halfway in search space #    guess = (high + low)/2.0 #    num_guesses += 1 #print('num_guesses =', num_guesses) #print(guess, 'is close to the cube root of', cube)