1. a. def isAlmostEqual(a, b): return abs(a-b) < 0.001 b. def isCapitalized(string): return string[0].isUpper() c. def isNotCapitalized(string): return not string[0].isUpper() 2. Remember that return does two things: 1) wherever the function was called, whatever value is returned will be used there and 2) it immediately exits the function. a. The problem is that this function always returns after only looking at the first item in the list. In fact, because the first item in the list is always equal to itself this function will always return True. b. If the list does not have all elements equal, this function will return False. However, if the list is all equal, then the for loop will finish and the function won't return a value (i.e., it will return None). The correct version is: def allEqual(somelist): first = somelist[0] for val in somelist: if val != first: return False return True