为了账号安全,请及时绑定邮箱和手机立即绑定

用Python解析用户输入

用Python解析用户输入

阿波罗的战车 2021-03-30 22:18:01
我需要解析用户的输入,因此它具有以下格式之一: 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()我不确定如何正确计算数字。编辑我从答案中得到帮助的解决方案是: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
查看完整描述

2 回答

?
达令说

TA贡献1821条经验 获得超6个赞

正则表达式对我有用,将它们直接应用于所返回的值raw_input()。例如:


import re

s1 = '1321 .. 123123'

s2 = '-21323 , 1312321'

s3 = '- 12312.. - 9'


[int(x) for x in re.findall(r'[^,.]+', ''.join(s1.split()))]

=> [1321, 123123]


[int(x) for x in re.findall(r'[^,.]+', ''.join(s2.split()))]

=> [-21323, 1312321]


[int(x) for x in re.findall(r'[^,.]+', ''.join(s3.split()))]

=> [-12312, -9]


查看完整回答
反对 回复 2021-04-06
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

def ask_range():

        raw = raw_input()

        lis = []

        split1 = raw.split("..")

        for i in split1:

            try:

                lis.append(int(i))

            except:

                for j in i.split(","):

                    list.append(int(j))

        if len(raw) != 2:

            print "\nexpecting a range value, try again."

            return ask_range()

        return lis

首先使用..然后拆分,


我认为这会有所帮助。


查看完整回答
反对 回复 2021-04-06
  • 2 回答
  • 0 关注
  • 181 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信