parse_ranges: Added support of Bonus3.
This commit is contained in:
parent
378c9636f4
commit
51ec5db7bc
|
|
@ -28,4 +28,30 @@ def parse_ranges_v3(range_string):
|
|||
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
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
)
|
||||
|
||||
@unittest.expectedFailure
|
||||
def test_ignore_arrows(self):
|
||||
self.assertEqual(
|
||||
list(parse_ranges("0, 4-8, 20->exit, 43-45")),
|
||||
|
|
|
|||
Loading…
Reference in a new issue