def q2_a(l): '''Return True if list l does *not* contain adjacent elements with the same value, and False otherwise. For example, no_duplicates([0,1,2,3]) returns True, and no_duplicates([0,1,2,3,3]) returns False.''' print "running q2_a(%s)" % (str(l)) i = 0 while i+1 < len(l): print "top: i=%d \tl=%s" % (i,l) if l[i] == l[i+1]: return False else: return True i += 1 def q2_b(l): print "running q2_b(%s)" % (str(l)) i = 0 while i+1 < len(l) and l[i] == l[i+1]: print "1st: i=%d \tl=%s" % (i,l) return False while i+1 < len(l) and l[i] != l[i+1]: print "2nd: i=%d \tl=%s" % (i,l) i += 1 return True def q2_c(l): print "running q2_c(%s)" % (str(l)) if len(l) < 2: return True for i in range(0,len(l)-1): if l[i] == l[i+1]: return False elif l[i] != l[i+1]: if i == len(l) - 2: return True def q2_d(l): print "running q2_d(%s)" % (str(l)) x = () for item in l: if item == x: return False else: x = item return True def q2_d_fixed(l): print "running q2_d_fixed(%s)" % (str(l)) if not l: return True else: # we know there is at least one element # so, this won't cause an error x = l[0] for item in l[1:]: if item == x: return False else: x = item return True def q2_e(l): print "running q2_e(%s)" % (str(l)) index = 0 a = l[index] b = l[index+1] while a != b and index < len(l) - 1: index = index + 1 if a == b: return False else: return True def q2_e_almost_fixed(l): print "running q2_e_almost_fixed(%s)" % (str(l)) index = 0 a = l[index] b = l[index+1] while a != b and index < len(l) - 2: index = index + 1 a = l[index] b = l[index+1] if a == b: return False else: return True def q2_e_fixed(l): print "running q2_e_fixed(%s)" % (str(l)) index = 0 while index < len(l) - 2 and l[index] != l[index+1]: index = index + 1 if len(l) < 2: return True else: if l[index] == l[index+1]: return False else: return True if __name__ == '__main__': # q2_a # Which of these will be wrong??? # Index out of range error? # Infinite loop? # Incorrect answer? #For each, how many times will it go through the loop? #x = q2_a([0,1,2,3,4]) #print x, "sb", True #x = q2_a([0,0,2,3,4]) #print x, "sb", False #x = q2_a([0,2,3,3]) #print x, "sb", False #q2_b #x = q2_b([2,2,2,2]) #print x, "sb", False #x = q2_b([0,2,3,3]) #print x, "sb", False # q2_c #x = q2_c([0,1,2,3,4]) #print x, "sb", True #x = q2_c([0,0,2,3,4]) #print x, "sb", False #x = q2_c([0,2,3,3]) #print x, "sb", False #x = q2_c([]) #print x, "sb", True #x = q2_d([10,11,12,13]) #print x, "sb", True #x = q2_d([0,0,2,3,4]) #print x, "sb", False #x = q2_d([0,2,3,3]) #print x, "sb", False #x = q2_d([]) #print x, "sb", True #x = q2_d([(),3,4,5]) #print x, "sb", True # q2_d_fixed #x = q2_d_fixed([10,11,12,13]) #print x, "sb", True #x = q2_d_fixed([0,2,3,3]) #print x, "sb", False #x = q2_d_fixed([33]) #print x, "sb", True # q2_e solves a different task! # #x = q2_e([0,1,2,3,4]) #print x, "sb", True #x = q2_e([0,0,2,3,4]) #print x, "sb", False #x = q2_e([0,2,3,3]) #print x, "sb", False #x = q2_e([]) #print x, "sb", True #x = q2_e_almost_fixed([0,1,2,3,4]) #print x, "sb", True #x = q2_e_almost_fixed([0,0,2,3,4]) #print x, "sb", False #x = q2_e_almost_fixed([0,2,3,3]) #print x, "sb", False #x = q2_e_almost_fixed([]) #print x, "sb", True #x = q2_e_fixed([0,1,2,3,4]) #print x, "sb", True #x = q2_e_fixed([0,0,2,3,4]) #print x, "sb", False #x = q2_e_fixed([0,2,3,3]) #print x, "sb", False #x = q2_e_fixed([]) #print x, "sb", True