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

Python中CramersRule类isSolvable方法无法返回布尔值问题

CramersRule类isSolvable方法修复方案

你的代码存在几个关键问题导致isSolvable方法无法正确返回布尔值,以下是问题分析和修复后的代码:

问题点

  • 类定义阶段就执行input并赋值给类级变量,程序启动时会直接弹出输入请求,且类的实例无法使用自定义参数
  • __init__方法依赖类级变量初始化实例属性,而非通过参数传入,违背面向对象封装原则
  • isSolvable方法接收大量重复参数,而这些参数已存储在实例属性中,冗余且易引发参数不一致问题
  • 若未正确实例化类就调用isSolvable,会因缺少self参数报错,无法正常执行

修复后的代码

class CramersRule:
    def __init__(self, a1, a2, a3, b1, b2, b3, c1, c2, c3, d1, d2, d3):
        self.__a1 = a1
        self.__a2 = a2
        self.__a3 = a3
        self.__b1 = b1
        self.__b2 = b2
        self.__b3 = b3
        self.__c1 = c1
        self.__c2 = c2
        self.__c3 = c3
        self.__d1 = d1
        self.__d2 = d2
        self.__d3 = d3   

    def isSolvable(self):
        # 计算系数矩阵行列式
        determinant = (self.__a1 * self.__b2 * self.__c3 
                      - self.__a1 * self.__b3 * self.__c2 
                      - self.__a2 * self.__b1 * self.__c3 
                      + self.__a2 * self.__b3 * self.__c1 
                      + self.__a3 * self.__b1 * self.__c2 
                      - self.__a3 * self.__b2 * self.__c1)
        return determinant != 0

# 调用示例
if __name__ == "__main__":
    input_values = eval(input("请输入联立方程的a1, a2, a3, b1, b2, b3, c1, c2, c3, d1, d2, d3值:"))
    cramer_instance = CramersRule(*input_values)
    print(cramer_instance.isSolvable())

修改说明

  1. 将输入逻辑移至if __name__ == "__main__"代码块,仅在脚本直接运行时触发输入,提升类的复用性
  2. __init__方法改为通过参数接收初始化值,确保每个实例拥有独立的属性
  3. isSolvable方法移除冗余参数,直接使用实例内部的私有属性计算行列式,返回值简化为行列式 != 0的布尔结果,逻辑更清晰
  4. 调用时先实例化CramersRule对象,再调用isSolvable方法,符合面向对象的正确使用方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:10:15