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

如何在__repr__函数中无循环遍历*args生成多项式系数格式串

解决__repr__中用*args生成多项式格式输出的问题

我明白你的问题了——__repr__必须返回单个字符串,但你想用*args传入的多项式系数生成格式工整的输出,对吧?其实核心思路就是把每个系数对应的多项式项转换成字符串片段,再把这些片段拼接成一个完整的字符串就行。我给你写个具体的实现例子,带你一步步理解:

完整代码实现

class Polynomial:
    def __init__(self, *args):
        # 用*args接收系数,索引对应次数:coefficients[0]是x⁰(常数项),coefficients[1]是x¹,以此类推
        self.coefficients = args
        # 去掉末尾的零系数,避免显示多余的无效项(比如0x³这种)
        while len(self.coefficients) > 1 and self.coefficients[-1] == 0:
            self.coefficients = self.coefficients[:-1]

    def __repr__(self):
        # 处理全零的特殊情况
        if not self.coefficients or all(c == 0 for c in self.coefficients):
            return "0"
        
        terms = []
        # 从最高次项开始遍历(倒序遍历系数列表)
        for idx, coeff in enumerate(reversed(self.coefficients)):
            actual_degree = len(self.coefficients) - 1 - idx
            if coeff == 0:
                continue  # 跳过系数为0的项
            
            # 处理项的符号
            sign = "+" if coeff > 0 else "-"
            abs_coeff = abs(coeff)  # 单独处理绝对值,符号统一放在前面
            
            # 根据次数生成对应的项字符串
            if actual_degree == 0:
                # 常数项直接写系数
                term = f"{abs_coeff}"
            elif actual_degree == 1:
                # 一次项:系数为1时省略数字,只写x
                term = "x" if abs_coeff == 1 else f"{abs_coeff}x"
            else:
                # 高次项:系数为1时省略数字,格式为x^n
                term = f"x^{actual_degree}" if abs_coeff == 1 else f"{abs_coeff}x^{actual_degree}"
            
            # 第一个项不需要加前缀符号(正号直接显示,负号单独加)
            if not terms:
                terms.append(f"{sign}{term}" if sign == "-" else term)
            else:
                # 非第一个项要加符号和空格,保证格式美观
                terms.append(f"{sign} {term}")
        
        # 把所有项拼接成最终字符串返回
        return " ".join(terms)

测试示例

你可以运行下面的代码验证效果:

# 测试不同情况的多项式
p1 = Polynomial(5, 2, 3)  # 对应3x² + 2x + 5
print(p1)  # 输出: 3x² + 2x + 5

p2 = Polynomial(7, -1, 0, 4)  # 对应4x³ - x + 7
print(p2)  # 输出: 4x³ - x + 7

p3 = Polynomial(0, 0, 0)  # 全零多项式
print(p3)  # 输出: 0

p4 = Polynomial(-3, 1)  # 对应x - 3
print(p4)  # 输出: x - 3

p5 = Polynomial(0, -2, 1)  # 对应x² - 2x
print(p5)  # 输出: x² - 2x

关键思路解析

  1. 处理系数列表:初始化时去掉末尾的零系数,避免出现0x³这种多余的项;
  2. 生成单个项:遍历每个系数,根据次数生成对应的字符串片段,同时处理系数为1/-1、一次项、常数项等特殊情况;
  3. 拼接字符串:把所有项的字符串片段按顺序拼接,注意符号的处理(第一个项的正号省略,后续正项要加+);
  4. 返回单个字符串:最终拼接好的字符串就是__repr__需要返回的结果,完全符合函数要求。

这样既利用了*args接收任意数量的系数,又在__repr__里生成了格式规范的多项式输出,完美解决你的问题~

内容的提问来源于stack exchange,提问作者user285372

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:10:39