Python中使用字典实现多项式乘法(无外部库与类)
字典实现多项式乘法的代码修复
要求不借助numpy、类或任何外部库,用字典实现多项式乘法。多项式用字典表示,键为次数,值为系数,例如{0: 7, 2: 5, 4: 3}对应多项式 $3x^4 + 5x^2 + 7$。
原代码问题分析
你的代码存在两个核心错误:
- 内层循环逻辑错误:遍历p2的所有项时,不断累积更新同一个
erg_coeff和erg_exp,最终得到的是p1当前项与p2所有项的累积乘积,而非每个p1项和p2项的单独乘积。 - 重复遍历冗余:先后对p1→p2、p2→p1各做了一次遍历,导致生成多余的项(比如测试案例中的5次项)。
修复后的代码
def mlpt(p1, p2): p1_times_p2 = {} # 遍历p1的每一项 for exp1, coeff1 in p1.items(): # 遍历p2的每一项 for exp2, coeff2 in p2.items(): new_exp = exp1 + exp2 new_coeff = coeff1 * coeff2 # 累加相同次数的系数(合并同类项) if new_exp in p1_times_p2: p1_times_p2[new_exp] += new_coeff else: p1_times_p2[new_exp] = new_coeff return p1_times_p2
代码逻辑说明
- 用
items()直接获取每个项的次数和系数,逻辑更直观。 - 每一对p1项和p2项单独计算乘积的次数与系数,避免累积错误。
- 对相同次数的项做系数累加,完全符合多项式乘法的同类项合并规则。
测试验证
# 测试案例:(x²)(x² + x) = x⁴ + x³ p1 = {2: 1} # x² p2 = {1: 1, 2: 1} # x² + x print(mlpt(p1, p2)) # 输出:{4: 1, 3: 1},与预期一致
内容的提问来源于stack exchange,提问作者Zedssad
相关产品推荐
相关产品推荐

