def binary_search(a, target):
"""Return an index i with a[i] == target, or -1.
Precondition: a is sorted in ascending order.
Postcondition: a is unchanged; if target occurs in a, the
result is an index of target, otherwise -1.
"""
low = 0
high = len(a) - 1
while low <= high:
mid = (low + high) // 2
if a[mid] == target:
return mid
elif a[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1
a = [3, 8, 12, 19, 23, 31, 38, 47, 52, 60, 66, 71, 80, 88, 95]
print(binary_search(a, 66), binary_search(a, 3), binary_search(a, 95), binary_search(a, 20))