parse_ranges: Added support of Bonus3.

This commit is contained in:
Cacahuete 2020-12-21 23:50:20 +01:00
parent 378c9636f4
commit 51ec5db7bc
2 changed files with 27 additions and 2 deletions

View file

@ -28,4 +28,30 @@ def parse_ranges_v3(range_string):
yield number yield number
parse_ranges = parse_ranges_v3 def parse_ranges_v4(range_string):
"""My take at Bonus3."""
# We prepare the data
range_string = range_string.replace("->", "-")
# We extract integer tuples from the data
ranges = []
for subrange in range_string.split(","):
splited = subrange.split("-")
try:
item = tuple(map(int, splited))
except ValueError:
# This item shall then contains text in the 2nd part
item = (int(splited[0]),)
ranges.append(item)
# We procede as before
for limits in ranges:
if len(limits) == 1:
yield limits[0]
else:
start, stop = limits
for number in range(start, stop + 1):
yield number
parse_ranges = parse_ranges_v4

View file

@ -29,7 +29,6 @@ class ParseRangesTests(unittest.TestCase):
list(parse_ranges("0,4-8,20,43-45")), [0, 4, 5, 6, 7, 8, 20, 43, 44, 45] list(parse_ranges("0,4-8,20,43-45")), [0, 4, 5, 6, 7, 8, 20, 43, 44, 45]
) )
@unittest.expectedFailure
def test_ignore_arrows(self): def test_ignore_arrows(self):
self.assertEqual( self.assertEqual(
list(parse_ranges("0, 4-8, 20->exit, 43-45")), list(parse_ranges("0, 4-8, 20->exit, 43-45")),