import re import numpy as np def parse_equation(equation): pattern = r'([+-]?\d*)\s*([a-zA-Z]?)' lhs, rhs = equation.split('=') rhs = int(rhs.strip()) terms = re.findall(pattern, lhs) print(terms) coefficients = {} for coeff, var in terms: if not (coeff or var): continue print(coeff,var,sep=',',end='!') if coeff in {'','+'}: coefficients[var] = 1 elif coeff == '-': coefficients[var] = -1 else: coefficients[var] = int(coeff) print(coeff, coefficients[var],sep=',',end="$") return coefficients, rhs def convert_to_matrix(equations): variables = set() for eq in equations: coefficients, _ = parse_equation(eq) variables.update(coefficients.keys()) variables = sorted(variables) A = [] b = [] for eq in equations: coefficients, rhs = parse_equation(eq) row = [coefficients.get(var, 0) for var in variables] A.append(row) b.append(rhs) return np.array(A), np.array(b), variables equations = [ "-x+y+z=12345", "x-y+z=1234", "x+y-z=123" ] print("\n".join(equations)) print() A, b, v = convert_to_matrix(equations) print(A, b, v, s:=np.linalg.solve(A,b),sep="") print() for var,val in zip(v,s): print(var,'=',val)