如何在Python中提取字符串方程里变量的系数?
从字符串方程中提取变量系数的实现方法
针对你已经获取到变量索引的情况,可以通过反向遍历索引左侧字符的方式提取前置数字,同时处理多种边界场景(比如变量前无数字、带正负号等),以下是完整的实现代码:
def extract_coefficients(equation): var = input("What variable are you using?") coefficients = [] # 先找到所有变量的索引 var_indices = [i for i, ch in enumerate(equation) if ch == var] for idx in var_indices: # 从变量位置往左遍历,收集数字和符号 coeff_str = "" current_pos = idx - 1 # 允许的字符:数字、开头的正负号 while current_pos >= 0 and (equation[current_pos].isdigit() or (current_pos == 0 and equation[current_pos] in '+-')): coeff_str = equation[current_pos] + coeff_str current_pos -= 1 # 处理符号后无数字的情况(如+x、-x) if current_pos >=0 and equation[current_pos] in '+-' and coeff_str in '+-': break # 处理系数为空的情况(如单独的x,默认系数1) if not coeff_str: coefficients.append(1) # 处理只有符号的情况(如-x对应-1,+x对应1) elif coeff_str in '+-': coefficients.append(1 if coeff_str == '+' else -1) else: coefficients.append(int(coeff_str)) return coefficients # 测试示例 equation = input("Type in your equation: ") # 输入示例:"5x + 10x + 15x + 30" coeffs = extract_coefficients(equation) print("提取的系数列表:", coeffs)
关键逻辑说明:
- 用列表推导式替代原循环,更简洁地获取变量索引,同时避免使用全局变量(全局变量会降低函数复用性)。
- 对每个变量索引,从左邻位置反向遍历,收集连续数字和开头的正负号,直到遇到非有效字符为止。
- 补充处理特殊场景:
- 变量前无任何字符(如方程开头的
x),默认系数为1。 - 变量前只有正负号(如
-x或+x),对应系数为-1或1。 - 正常带数字的情况(如
5x、-10x),直接转成整数系数。
- 变量前无任何字符(如方程开头的
测试示例输出:
输入方程5x + 10x + 15x + 30,变量输入x,输出为[5, 10, 15],符合预期。
内容的提问来源于stack exchange,提问作者Ifesol
相关产品推荐
相关产品推荐

