On 29/04/15 04:58, Jim Mooney Py3winXP wrote:

numbers = []

Note that you chose to make this global.

def parse_string(math_string):
     """Input: A math string with a verbal or mathematical operation
     and two valid numbers to operate on. Extra numbers and operations
     are ignored. Output: A tuple containing a function corresponding
     to the operation and the two numbers. Returns None on failure.
     """

General comment. returning a mixture of None and valid data
is a recipe for confusion later. Its better to fail by
raising an exception, say a ValueError for example,
or even create a bespoke error.

     operation = None
     tokens = math_string.split()
     for token in tokens:
         if token in operations:
             operation = operations[token]
         elif test_number(token) != None:
             numbers.append(test_number(token))
         if len(numbers) > 1:
             break
     if operation is None or len(numbers) < 2:
         return None
     else:
         return operation, numbers[0], numbers[1]

REPL
result = parse_string('1 minus 15')
func, number1, number2 = result
func(number1, number2)
-14
result = parse_string('1 minus 15')
print(result)
None

You never empty numbers so it already contains >1 numbers.
Your loop breaks. And operation is None.
So you return None.

That's why raising an error with suitable text would be clearer.

--
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
http://www.amazon.com/author/alan_gauld
Follow my photo-blog on Flickr at:
http://www.flickr.com/photos/alangauldphotos


_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to