首页 > 解决方案 > 将分数输入 a/b / c/d 分配给 x = a/b, y = c/d sign= /。Python

问题描述

如何让程序检查符号是否为 /,*,-,+ 并将其拆分。当符号为 / 时,问题也会出现。我怎样才能告诉程序只在中间拆分 / 而不是实际的分数?

askfraction = input("Enter a fraction arithmetic operation: ")
askfraction = askfraction.replace(" ", "")
temp = askfraction.split("+")
listToStr = ' '.join(map(str, temp)) 
temp1 = listToStr.split("/")
listToStr2 = ' '.join(map(str, temp1))
temp2 = listToStr2.split(' ')
a,b,c,d = temp2
sign = "+"
x = a+"/"+b
y = c+"/"+d
print("x: "+ x +"sign: " + sign + "y: "+y)

测试输入:

3/4 + 1/2

测试输出:

x: 3/4, sign: +, y: 1/2

我希望这个程序能够检测到任何符号,例如 +、/、*、- 并相应地拆分。我只是不知道程序如何从运算符符号中知道分数。预期输入:

3/4 / 1/2

预期输出:

x: 3/4, sign: /, y: 1/2

先感谢您。

标签: pythonpython-3.x

解决方案


使用正则表达式来挑选各种数字和符号。如果预期输入的格式是固定的,那就更容易了,也就是说,我们期望分数和两边有空格或没有空格的运算符符号。

尝试这个:

import re

REGEX_FRACTION = r'(\d+)\/(\d+) ?([+-/\*]) ?(\d+)\/(\d+)'

test_input = '3/4 + 1/2'

matchObj = re.match(REGEX_FRACTION, test_input)
if matchObj:
    fraction_1_numerator = int(matchObj.group(1))
    fraction_1_denominator = int(matchObj.group(2))
    sign = matchObj.group(3)
    fraction_2_numerator = int(matchObj.group(4))
    fraction_2_denominator = int(matchObj.group(5))

    print("fraction 1: %d/%d, sign: %s, fraction 2: %d/%d"%(fraction_1_numerator, fraction_1_denominator, sign, fraction_2_numerator, fraction_2_denominator))

    #calculate
    fraction_1 = fraction_1_numerator/fraction_1_denominator
    fraction_2 = fraction_2_numerator/fraction_2_denominator

    if sign == '+':
        print(fraction_1+fraction_2)
    elif sign == '-':
        print(fraction_1-fraction_2)
    elif sign == '*':
        print(fraction_1*fraction_2)
    elif sign == '/':
        print(fraction_1/fraction_2)

推荐阅读