CompSci 101 Fall 2016 Sec 02 Exam 2 Solutions Problem 1 Part A (13 pts) 1 pt each ['A', 'R', 'S', 'Y'] ['T', 'A', 'H', 'Q', 'A'] ['T', 'A', 'H', 'Q'] ['T', 'H', 'Q'] [1, 2, 3, 4, 6] [1, 2, 4] set([9, 3, 1]) set([1, 3, 4, 7, 9]) set([4, 7]) ['A', 'D', 'L', 'N'] [2, 5] ['A', 'D', 'L', 'N', 'X'] [2, 5, 5, 6, 7] PART B (3 pts) 1 pt each [4, 5, 6] [4, 1, 2] 4 Problem 2 Part A (3 pts) [13, 17, 22] Part B (3 pts) ['blueblueblue', 'greengreen'] Part C (5 pts) temp = [w[-1] + w[1:-1] + w[0] for w in words if len(w)>=4] Part D (6 pts) def namestuff(names): return [(name.split()[0]+" " + name.split()[-1],"".join(name.split()[1:-1])) for name in names if len(name.split()) > 2] OR def namestuff(names): stuff = [name for name in names if len(name.split()) > 2] return [(name.split()[0]+" " + name.split()[-1],"".join(name.split()[1:-1])) for name in stuff] Problem 3 Part A def processinfo(filename): f=open(filename) data = [] for line in f: line = line.strip() line = line.replace(":","-") newline = line.split("-") newline[1] = int(newline[1]) newline[3] = int(newline[3]) data.append(newline) return(data) ALTERNATE SOLUTION: def processinfo(filename): f=open(filename) data = [] for line in f: line = line.strip() line = line.split("-") # splits into list of three strings # Example: ['duke', '78:unc', '76'] mid = line[1].split(":") # splits the middle string newline = [line[0], mid[0], mid[1], line[2]] newline[1] = int(newline[1]) newline[3] = int(newline[3]) data.append(newline) return(data) Part B def schoolsScore(data, team, num): answer = [] for item in data: maxscore = max(item[1],item[3]) if item[0] == team and maxscore >= num: answer.append((item[2], maxscore)) elif item[2] == team and maxscore >= num: answer.append((item[0], maxscore)) return answer Problem 4 Part A (7 pts) def movies(data): result = set([]) for item in data: result.add(item[0]) return list(result) Part B def actorsTimeIn(data,time): result = set([]) for item in data: if int(item[4]) >= time: result.add(item[1]) return sorted(list(result)) Part C def moviesNotIn(data,favorite): result = set(movies(data)) moviefavs = set(favorite) diff = moviefavs - result return list(diff) Part D def popularActors(data): d = {} for item in data: if item[1] not in d: d[item[1]] = 1 else: d[item[1]] += 1 maxval = max(d.values()) return [key for key in d if d[key] == maxval] Part E def dictMovieToActors(data): d = {} for item in data: if item[0] not in d: d[item[0]] = [(item[1],item[4])] else: d[item[0]].append((item[1],item[4])) return d Part F def movieMostActorTime(data): d = dictMovieToActors(data) totaltime = 0 totalmovie = "" for (key, value) in d.items(): time = sum([int(t[1]) for t in value]) if time > totaltime: totaltime = time totalmovie = key return totalmovie