- reverse_map = {}
- for i, (key, value) in enumerate(options):
- print "%3d) %s" % (i+1, key)
- reverse_map[i+1] = value
- print " 0) Back"
- while True:
- try:
- values = map(int, raw_input("Choose> ").split())
- if len(values) == 0:
- continue
- if 0 in values:
- return
- values = [reverse_map[value] for value in values]
- if allow_multi:
- return values
- else:
- if len(values) == 1:
- return values[0]
- except (ValueError, IndexError):
- print >>sys.stderr, "Invalid input, please try again"
- pass
+ reverse_map = {}
+ for i, (key, value) in enumerate(options):
+ print("%3d) %s" % (i+1, key))
+ reverse_map[i+1] = value
+ print(" 0) Back")
+ while True:
+ try:
+ str_values = input("Choose> ").split()
+ if len(str_values) == 0:
+ continue
+ if "0" in str_values:
+ return
+ values = []
+ for s in str_values:
+ if s.isdigit():
+ values.append(int(s))
+ else:
+ low, high = s.split("-", 1)
+ values.extend(range(int(low), int(high) + 1))
+ values = [reverse_map[value] for value in values if value in reverse_map]
+ if allow_multi:
+ return values
+ else:
+ if len(values) == 1:
+ return values[0]
+ except (ValueError, IndexError):
+ print("Invalid input, please try again")
+ pass