Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Chương trình thực hiện phép toán trên spreadsheet Excel trong Python


Cho ma trận 2D đại diện spreadsheet Excel. Mỗi ô chứa giá trị, tham chiếu ô khác, hoặc công thức (ví dụ: =A1+A2, =2+5). Tính toán tất cả ô và công thức, trả về ma trận kết quả.

Ví dụ: Input [["B1","7","0"],["3","5","=A1+A2"]] → Output [["7","7","0"],["3","5","10"]].

Giải pháp: Đệ quy với memoization. Hàm resolve(s) xử lý chuỗi: nếu là số → trả về int; nếu là tham chiếu (VD: "B1") → chuyển tọa độ và gọi solve; nếu là công thức (bắt đầu "=") → tách toán hạng và toán tử, đệ quy tính toán.

Ví dụ triển khai

class Solution:
    def solve(self, matrix):
        def resolve(s):
            try:
                return int(s)
            except:
                return solve(*getIdx(s))
        def getIdx(s):
            return [int(s[1:]) - 1, ord(s[0]) - ord("A")]
        def do(a, b, op):
            if op == "+": return a + b
            if op == "-": return a - b
            if op == "*": return a * b
            if op == "/": return a / b
        def solve(i, j):
            try:
                return int(matrix[i][j])
            except:
                s = matrix[i][j]
                if s[0] == "=":
                    for c in s[2:]:
                        if c in "+-/*":
                            op = c
                            break
                    a, b = s[1:].split(op)
                    aRes, bRes = resolve(a), resolve(b)
                    return do(aRes, bRes, op)
                else:
                    return solve(*getIdx(s))
        for i in range(len(matrix)):
            for j in range(len(matrix[0])):
                matrix[i][j] = str(solve(i, j))
        return matrix

ob = Solution()
matrix = [["B1","7","0"],["3","5","=A1+A2"]]
print(ob.solve(matrix))

Đầu vào

[["B1","7","0"],["3","5","=A1+A2"]]

Đầu ra

[['7','7','0'],['3','5','10']]