Python 进
查看原帖
Python 进
346155
Thijs_DUTNLP楼主2022/2/14 11:26

求解,在测试点1处,solution1和solution2的输出完全相同,但solution1过不了,solution2可以。报错显示line-1 col-4 read 6,expect 1.可是明明就是 1 啊,哪来的 6 ???这两个solution都是我写的,就莫名其妙。

def solution1(equal):
    left, right = equal.split("=")

    if left[0] != "-":
        left = "+" + left
    if right[0] != "-":
        right = "+" + right

    def getNode(a):
        start = 0
        nodes = []
        for i in range(1, len(a)):
            if a[i] in "+-":
                nodes += [a[start:i]]
                start = i
        nodes += [a[start:]]
        return nodes


    def getAns(left, right):
        global equal
        for i in equal:
            if i.isalpha():
                unknown = i
                break
        
        nleft, nright = 0, 0
        for i in left:
            if i[-1].isalpha():
                if len(i) == 2:
                    nleft += int(i[0]+"1")
                else:
                    nleft += int(i[:-1])
            elif i[-1].isdigit():
                nright += -int(i)
        for i in right:
            if i[-1].isalpha():
                if len(i) == 2:
                    nleft += -int(i[0]+"1")
                else:
                    nleft += -int(i[:-1])
            elif i[-1].isdigit():
                nright += int(i)
        return "%s=%.3f" % (unknown, abs(nright/nleft) if nright/nleft == 0 else nright/nleft)
                
    left_nodes, right_nodes = getNode(left), getNode(right)
    return getAns(left_nodes, right_nodes)


def solution2(equal):
    left, right = equal.split("=")
    if left[0] != "-":
        left = "+" + left
    if right[0] != "-":
        right = "+" + right

    sign = "+-"


    def getNode(equal):
        nodes = []
        start = 0
        flag = True
        for i in range(1, len(equal)):
            if equal[i] in sign:
                nodes += [equal[start:i]]
                start = i
                flag = False
        if start <= len(equal) - 1:
            nodes += [equal[start:]]
            flag = False
        if flag:
            nodes += [equal]
        return nodes

    def changeNodes(left, right):
        i = 0
        while i < len(right):
            for j in right[i]:
                if j.isalpha():
                    if right[i][0] == "+":
                        left += ["-" + right[i][1:]]
                    elif right[i][0] == "-":
                        left += ["+" + right[i][1:]]
                    right.pop(i)
                    i -= 1
                    break
            i += 1
        i = 0
        while i < len(left):
            for j in left[i]:
                if j.isalpha():
                    break
            else:
                if left[i][0] == "+":
                    right += ["-" + left[i][1:]]
                elif left[i][0] == "-":
                    right += ["+" + left[i][1:]]
                left.pop(i)
                i -= 1
            i += 1

        return left, right


    leftNodes = getNode(left)
    rightNodes = getNode(right)
    changeNodes(leftNodes, rightNodes)

    unKnown = leftNodes[0][-1]
    ratio = 0
    num = 0

    for i in leftNodes:
        if i[0] == "+":
            if i[1:-1]:
                ratio += int(i[1:-1])
            else:
                ratio += 1
        else:
            if i[1:-1]:
                ratio -= int(i[1:-1])
            else:
                ratio -= 1
    for i in rightNodes:
        if i[0] == "+":
            num += int(i[1:])
        else:
            num -= int(i[1:])
    return "%s=%.3f" % (unKnown, abs(num/ratio) if num/ratio == 0 else num/ratio)



equal = input()
a = solution1(equal)
b = solution2(equal)
print(a, b, a==b)

2022/2/14 11:26
加载中...