I have an input file named 'freq' which contains the following data 123 0
133 3 146 1 200 0 233 10 400 2 Now I've attempted to write a script that would take a number from the standard input and then have the program return the number in the input file that is closest to that input file. #!/usr/local/bin/python import sys def construct_set(data): for line in data: lines = line.splitlines() for curline in lines: if curline.strip(): key = curline.split(' ') value = int(key[0]) yield value def approximate(first, second): midpoint = (first + second) / 2 return midpoint def format(input): prev = 0 value = int(input) with open("/home/cdalten/oakland/freq") as f: for next in construct_set(f): if value > prev: current = prev prev = next middle = approximate(current, prev) if middle < prev and value > middle: return prev elif value > current and current < middle: return current if __name__ == "__main__": if len(sys.argv) != 2: print >> sys.stderr, "You need to enter a number\n" sys.exit(1) nearest = format(sys.argv[1]) print "The closest value to", sys.argv[1], "is", nearest When I run it, I get the following... [cdal...@localhost oakland]$ ./android4.py 123 The closest value to 123 is 123 [cdal...@localhost oakland]$ ./android4.py 130 The closest value to 130 is 133 [cdal...@localhost oakland]$ ./android4.py 140 The closest value to 140 is 146 [cdal...@localhost oakland]$ ./android4.py 146 The closest value to 146 is 146 [cdal...@localhost oakland]$ ./android4.py 190 The closest value to 190 is 200 [cdal...@localhost oakland]$ ./android4.py 200 The closest value to 200 is 200 [cdal...@localhost oakland]$ ./android4.py 205 The closest value to 205 is 200 [cdal...@localhost oakland]$ ./android4.py 210 The closest value to 210 is 200 [cdal...@localhost oakland]$ ./android4.py 300 The closest value to 300 is 233 [cdal...@localhost oakland]$ ./android4.py 500 The closest value to 500 is 400 [cdal...@localhost oakland]$ ./android4.py 1000000 The closest value to 1000000 is 400 [cdal...@localhost oakland]$ The question is about the construct_set() function. def construct_set(data): for line in data: lines = line.splitlines() for curline in lines: if curline.strip(): key = curline.split(' ') value = int(key[0]) yield value I have it yield on 'value' instead of 'curline'. Will the program still read the input file named freq line by line even though I don't have it yielding on 'curline'? Or since I have it yield on 'value', will it read the entire input file into memory at once? Chad -- http://mail.python.org/mailman/listinfo/python-list