# Lab 05
# Q1: List Indexing
简单的数组索引,如果越界直接填 error 即可。
# Q2: Couple
a = []
for i in range(len(lst1)):
a.append([lst1[i], lst2[i]])
return a
1
2
3
4
2
3
4
# City Data Abstraction
# Q3: Distance
x1, y1 = get_lat(city1), get_lon(city1)
x2, y2 = get_lat(city2), get_lon(city2)
return sqrt((x1 - x2)**2 + (y1 - y2)**2)
1
2
3
4
2
3
4
# Q4: Closer city
tmp = make_city('tmp', lat, lon)
dis1 = distance(city1, tmp)
dis2 = distance(city2, tmp)
if dis1 > dis2:
return get_name(city2)
else:
return get_name(city1)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# Q5: Don't violate the abstraction barrier!
修复之前的代码。
# Trees
# Q6: Nut Finder
注意,需要借助 ADT。
if label(t) == 'nut':
return True
for node in branches(t):
if nut_finder(node):
return True
return False
1
2
3
4
5
6
2
3
4
5
6
# Q7: Sprout leaves
if is_leaf(t):
return tree(label(t),[tree(v) for v in values])
return tree(label(t),[sprout_leaves(b, values) for b in branches(t)])
1
2
3
2
3