CompSci Test 2 Section 02 Spring 2017 Problem 1 Part A is 13 points ['S', 'Y', 'C', 'B', 'U', 'E'] ['S', 'J', 'Y', 'C'] ['S', 'J', 'C'] ['S', 'J'] [1, 3, 4, 5, 7] [1, 3, 7] set([2]) # elements in any order set([2, 3, 4, 7, 8]) # elements in any order set([8, 4]) # elements in any order ['D', 'F', 'J', 'M'] ['D', 'F', 'H', 'J', 'M'] [2, 6, 6, 7, 8] [('D', 6), ('F', 8), ('H', 6), ('J', 7), ('M', 2)] Part B is 3 points [50, 60, 70, 30] # elements in any order [4, 1, 1, 2] # elements in any order 4 Problem 2 2A) result is [6, 6, 3, 6] 2B) result is ['aeekmrt', 'aeffgir', 'abbirt', 'act'] 2C) result = "".join([word[i] for i in range(len(word)) if i%2 == 0 ]) 2D) def lastNames(namelist): d = {} for name in namelist: last = name.split()[-1] if last not in d: d[last] = 0 d[last] += 1 return sorted(d.items()) Problem 3 Part A def setupList(filename): f = open(filename) answer = [] for line in f: line = line.strip() line = line.split(":") price = float(line[3]) if line[2] == 'W': price = price*float(line[4]) answer.append([line[0], line[1], price]) return answer Part B def groceryPurchases(data, custid, amount): answer = [] for item in data: if item[0] == custid: if item[2] <= amount: answer.append((item[1], item[2])) amount -= item[2] return answer Problem 4 Part A # given a departure city, give a unique sorted list of arrival cities def arrivalCities(datalist, dcity): answer = [] for item in datalist: if item[1] == dcity: answer.append(item[2]) return sorted(list(set(answer))) Part B # Given an airline, return the sorted unique list of cities # with flights that are longer than time def longFlights(datalist, airline, time): answer = [] for item in datalist: if item[0].split()[0] == airline and int(item[4]) > time: answer.append(item[1]) return sorted(set(answer)) Part C # given list of popular cities, return a unique sorted # list of popular cities our data doesn't fly to def citiesNotFlownTo(datalist,cities): adata = set() bdata = set(cities) for item in datalist: adata.add(item[2]) adata.add(item[1]) return sorted(bdata - adata) ALT SOLN no sets: def citiesNotFlownTo(datalist,cities): adata = [] # note this could also be a set for item in datalist: acity = item[1] rcity = item[2] if acity not in adata, adata.append(acity) if rcity not in adata, adata.append(rcity) answer = [] # note this could also be a set for item in cities: if item not in adata: answer.append(item) return sorted(answer) Part D def cityMostFlights(datalist): d = {} for item in datalist: if item[1] not in d: d[item[1]] = 0 d[item[1]] += 1 if item[2] not in d: d[item[2]] = 0 d[item[2]] += 1 maxnum = max(d.values()) for city in d: if d[city] == maxnum: return city Part E # return a dictionary of airlines to list of tuples: # (flightname/number and minutes) def dictAirlines(datalist): d = {} for item in datalist: airline = item[0].split()[0] if airline not in d: d[airline] = [] d[airline].append((item[0],int(item[4]))) return d Part F # return a list of tuples. The first tuple is the airline with # the most time in the air, and that total time. # The rest of the tuples are the # flight names and minutes for each flight from this airline. def airlineLargestMinutes(datalist): d = dictAirlines(datalist) maxmin = 0 maxairline = "" for airline in d: tuplist = d[airline] sum = 0 for (flight,minutes) in tuplist: sum+= minutes if sum > maxmin: # found new max maxmin = sum maxairline = airline answer = (maxairline,maxmin, d[maxairline]) return answer