gpt4 book ai didi

python - 在 Python 中解析用户输入

转载 作者:太空宇宙 更新时间:2023-11-04 01:26:43 25 4
gpt4 key购买 nike

我需要解析来自用户的输入,使其具有以下格式之一:

 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

最佳答案

正则表达式对我有用,将它们直接应用于 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]

关于python - 在 Python 中解析用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17325232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com