import random # divide and conquer to count negative values in list def count_neg(list, first, last): #print 'count_neg(', first, ',', last, ')' ans = 0 if first == last: if list[first] < 0: ans = 1 elif first < last: mid = (first+last)/2 left_ans = count_neg(list, first, mid) right_ans = count_neg(list, mid+1, last) ans = left_ans + right_ans else: print "uh oh, didn't expect first > last: ", first, last return ans # divide and conquer to count both neg and pos values in list # shows how a pair of vals (x,y) can be returned def count_pos_neg(list, first, last): #print 'countmin(', first, ',', last, ')' pos = neg = 0 if first == last: if list[first] < 0: neg = 1 elif list[first] > 0: pos = 1 elif first < last: mid = (first+last)/2 (neg_left,pos_left) = count_pos_neg(list, first, mid) (neg_right,pos_right) = count_pos_neg(list, mid+1, last) neg = neg_left + neg_right pos = pos_left + pos_right else: print "uh oh, didn't expect first > last: ", first, last return (neg,pos) # creates a random list def random_list(n, min=0, max=9): list = [] # empty list for i in range(n): list.append( random.randint(min, max) ) return list def main(): # list = input('Enter the list: ') list = random_list(8, -9, 9) print list num_neg = count_neg(list, 0, len(list)-1) print num_neg # variable pairs can be assigned values (num_neg, num_pos) = count_pos_neg(list, 0, len(list)-1) print num_neg, num_pos return main()