text: ####################
  ## 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): "))
  #
  #for char in word:
  #    if char in an_letters:
  #        print("Give me an " + char + "! " + char)
  #    else:
  #        print("Give me a  " + char + "! " + char)
  #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 = 0.5
  ##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
  #if cube>0 and cube<1:
  #    low = 0
  #    high = 1
  #else:
  #    low  = 0
  #    high = abs(cube)       
  #guess = (high + low)/2.0
  #while abs(guess**3 - abs(cube)) >= epsilon:
  #    
  #    if guess**3 < abs(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)
  #if cube<0:
  #    print(-guess, 'is close to the cube root of', cube)
  #else:    
  #    print(guess, 'is close to the cube root of', cube)
  #   