мне нужно для разбора ввода от пользователя, так что имеет один из следующих форматов:Синтаксический пользовательский ввод в Python
1321 .. 123123
или
-21323 , 1312321
число (может быть отрицательным), запятой ,
или две точки ..
, а затем другое число (может быть отрицательным).
Кроме того, первое число должно быть меньше или равно <=
ко второму номеру.
Если вход не имеет такого формата, попросите пользователя ввести его.
У меня есть
def ask_range():
raw = raw_input()
raw = raw.strip(' \t\n\r')
raw = map((lambda x: x.split("..")), raw.split(","))
raw = list(item for wrd in raw for item in wrd)
if len(raw) != 2:
print "\nexpecting a range value, try again."
return ask_range()
я не уверен, как получить номера правильно.
EDIT
Решение, которое я придумал с помощью из ответов:
def ask_range():
raw = raw_input()
raw = raw.strip(' \t\n\r')
raw = re.split(r"\.\.|,", raw)
if len(raw) != 2:
print "\nexpecting a range value, try again."
return ask_range()
left = re.match(r'^\s*-?\s*\d+\s*$', raw[0])
right = re.match(r'^\s*-?\s*\d+\s*$', raw[1])
if not (left and right):
print "\nexpecting a range value, try again."
return ask_range()
left, right = int(left.group()), int(right.group())
if left > right:
print "\nexpecting a range value, try again."
return ask_range()
return left, right
проверить это [соответствующий] нить (http://stackoverflow.com/questions/4289331/Python-экстракт-число в своем строке). Большинство людей скажут использование регулярного выражения, но если числа всегда целые, есть более простые способы. – wflynny