# Lab 05

# Q1: List Indexing

简单的数组索引,如果越界直接填 error 即可。

答案:list-indexing.py

# Q2: Couple

    a = []
    for i in range(len(lst1)):
        a.append([lst1[i], lst2[i]])
    return a
1
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

# 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

# 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

# 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