import re
input_strings = [
"123-321",
"92646-278364",
# "12345-123", # error: low > high
# "123.45-98765", # error: not integers
]
def get_num_pair(num_str: str):
m = re.match(r'(\d+)-(\d+)', num_str)
assert m and len(m.groups()) == 2
lo, hi = int(m.group(1)), int(m.group(2))
assert 0 <= lo <= hi
return lo, hi
for input_str in input_strings:
print(get_num_pair(input_str))
def parse_twoval_str(twoval_str):
try:
vals = [int(s) for s in twoval_str.split("-")]
except ValueError:
raise ValueError("Could not parse input - must be of form '123-234'")
if len(vals) != 2:
raise ValueError("Input must contain two values")
a, b = vals
if a > b:
raise ValueError("First value must be less than second value")
return a, b
4条答案
按热度按时间tzxcd3kk1#
我不确定这是否是最****的pythong方法,但是我会拆分
-
字符,并使用列表解析生成lo
和hi
:shyt4zoc2#
你可以试试这样的方法:
只要你的字符串和你告诉我们的完全一样,并且字符串中只有无符号的整型,这个方法就可以工作。
0kjbasz63#
我能想到的最好的方法是使用正则表达式来匹配确切的模式和
assert
,以确保一切都正确。但是请注意,这样做会在出现无效输入时立即使程序崩溃,除非您做一些额外的错误处理。x4shl7ld4#
在Mureinik回答的基础上,我建议你做以下事情:
'-'
上拆分列表,并将每个位转换为int
try
、except
块中,以防列表解析出错#-#
字符串概念的函数中例如: