Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 'convert string of bracketed coordinate pairs to list of coordinate tuple integer pairs'
- 'format (x1, y1) (x2, y2) ... (xn, yn)'
- def next_coords(slice):
- 'extract next coordinate pair and return that and remaining text'
- slice = slice.strip() # just in case
- if not slice.startswith('('):
- raise ValueError("Expecting '(' token next")
- pos_close = slice.find(')') # find position of next )
- if pos_close == -1: # a -1 indicates a ) was not found
- raise ValueError("Expecting ')' token next")
- x, _ , y = slice[1:pos_close].partition(',')
- if not x or not y:
- raise ValueError("Expecting coordinates between '()'")
- try:
- coords = int(x), int(y)
- except ValueError:
- raise ValueError("Non-integer(s) found between '()'")
- return coords, slice[pos_close+1:]
- def parse_buffer(buffer):
- 'build & return list of coord integer pair tuples'
- stack = []
- err_message = ''
- while buffer:
- try:
- coords, buffer = next_coords(buffer)
- except ValueError as e:
- err_message = e
- break
- else:
- stack.append(coords)
- return stack, err_message, buffer
- tests = [' (123, 456) (67,12) (54,67) ',
- '()', '(test)', '(test, test)',
- '(23,4),(45,67)', '(23,34)(34.5, 67)']
- for test in tests:
- stack, err_message, buffer = parse_buffer(test)
- print(f'\ntest: {test}\nstack: {stack}')
- if err_message:
- print(f'Remaining buffer: {buffer}\n{err_message}')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement