我正在用计算器进行英尺和英寸的计算。我目前有一个程序,但到目前为止,我只能让它工作,如果你输入完整的测量(即4'-0“而不是只有4‘或0'-6”而不是只有6")。我希望能够有它检查几个模式,以便能够输入英尺,英寸,一英寸的分数,或以上的组合。
我曾尝试在一个变量中包含所有不同的模式,但我肯定遗漏了一些东西,以便能够解析该变量以找到正确的模式(此尝试在代码中被注释掉)。我找到了其他使用这种方法的代码,并试图复制它来为我工作,但没有成功。我还尝试让每个模式都有自己的变量,但是我不确定如何检查每个模式,并返回它是否匹配。也许我想太多了,这很容易,但我被难住了。
很抱歉发布了整个代码的链接,但我认为这样更容易让您能够看到和使用我正在处理的内容,而不仅仅是代码片段。提前感谢您的帮助。
代码链接:
发布于 2019-02-19 03:55:03
尝试使用命名组并将每个零件设置为可选(包括破折号):
regex = re.compile(r'(?P<feet>[0-9]+\')?\-?(?P<inches>[0-9]+")?')
并修改以下函数,您将被设置。
def ftbreakdown(*args):
search = regex.search(*args)
print(search)
feetsearch = search.group('feet')
feet = int(feetsearch.split("'")[0]) if feetsearch is not None else 0
return feet
def inbreakdown(*args):
search = regex.search(*args)
print(search)
if search is None:
inches = 0
else:
inchsearch = search.group('inches')
inches = int(inchsearch.split('"')[0]) if inchsearch is not None else 0
# print(inches)
return inches
这是快速和肮脏的方式,但它是有效的。显然,您可以进一步推广这一点。
运行的示例
Python 3.6.1 (default, Dec 2015, 13:05:11)
[GCC 4.8.2] on linux
Enter length: 4'-2"
Choose operation: +
Enter length: 6"
<_sre.SRE_Match object; span=(0, 5), match='4\'-2"'>
<_sre.SRE_Match object; span=(0, 2), match='6"'>
<_sre.SRE_Match object; span=(0, 5), match='4\'-2"'>
<_sre.SRE_Match object; span=(0, 2), match='6"'>
4'-8"
Choose operation:
https://stackoverflow.com/questions/54754229
复制相似问题