# Below are my solutions. # After that is code that I used to grade your assignment. # If you had an import statement or the code would not run due to error, you get a 0. # Otherwise, I ran 4 test cases per problem. # You get 2 points per successful case. # test7() runs the 4 cases for #7, test8() for #8 and so on. # To try it yourself, copy the test7, test8, etc code to your own homework file. # Then run test7(), test8(), etc. def str_to_num(P): """Replace letters in string P with numbers 0-25. P assumed uppercase letters only. Returns list of numbers. A=0,B=1, etc.""" Pnum = [] for i in range(0,len(P)): # last value is len(P)-1 Pnum = Pnum + [ord(P[i]) - 65] # Append puts the return Pnum def num_to_str(N): """Replace list of numbers 0-25 with string. 0=A,1=B etc.""" Ntext = "" for i in range(0,len(N)): Ntext = Ntext + chr(N[i]+65) return Ntext def num_shift(l,k): """Shift each number in the list l by k mod 26.""" lout = [] for i in range(len(l)): lout = lout + [(l[i]+k)%26] return lout def caesar(m,k): return num_to_str(num_shift(str_to_num(m),k)) def primetest(n): d = 2 while d < n: if n%d == 0: return False d += 1 return True def test7(): test = ['ABC', 'ZAP', 'MATHEMATICS', 'QUICKBROWNFOXJUMPEDOVERLAZYDOG'] answers = [[0, 1, 2], [25, 0, 15], [12, 0, 19, 7, 4, 12, 0, 19, 8, 2, 18], [16, 20, 8, 2, 10, 1, 17, 14, 22, 13, 5, 14, 23, 9, 20, 12, 15, 4, 3, 14, 21, 4, 17, 11, 0, 25, 24, 3, 14, 6]] c = 0 for i in range(4): if str_to_num(test[i]) == answers[i]: c += 2 return c def test8(): test = [[0,1,2], [25, 0, 15], [7,7,17,17,9,9,12,12], [0,23,3,20,6,17,9,14,12,11,15]] answers = ['ABC', 'ZAP', 'HHRRJJMM', 'AXDUGRJOMLP'] c = 0 for i in range(4): if num_to_str(test[i]) == answers[i]: c += 2 return c def test9(): test = [[[0,1,25],3], [[0,1,25], -49], [[7,7,17,17,9,9,12,12],30], [[0,23,3,20,6,17,9,14,12,11,15], 66]] answers = [[3, 4, 2], [3, 4, 2], [11, 11, 21, 21, 13, 13, 16, 16], [14, 11, 17, 8, 20, 5, 23, 2, 0, 25, 3]] c = 0 for i in range(4): if num_shift(test[i][0],test[i][1]) == answers[i]: c += 2 return c def test10(): test = [['HI',1], ['ZAP',2], ['MATHEMATICS',30], ['QUICKBROWNFOXJUMPEDOVERLAZYDOG',-13]] answers = ['IJ', 'BCR', 'QEXLIQEXMGW', 'DHVPXOEBJASBKWHZCRQBIREYNMLQBT'] c = 0 for i in range(4): if caesar(test[i][0],test[i][1]) == answers[i]: c += 2 return c def test11(): test = [2, 11, 88185949, 9999863] answers = [True, True, False, True] c = 0 for i in range(4): if primetest(test[i]) == answers[i]: c += 2 return c