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
|
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]
|
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")),
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue