You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 12:02:38