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())
修改说明
- 将输入逻辑移至
if __name__ == "__main__"代码块,仅在脚本直接运行时触发输入,提升类的复用性 __init__方法改为通过参数接收初始化值,确保每个实例拥有独立的属性isSolvable方法移除冗余参数,直接使用实例内部的私有属性计算行列式,返回值简化为行列式 != 0的布尔结果,逻辑更清晰- 调用时先实例化
CramersRule对象,再调用isSolvable方法,符合面向对象的正确使用方式
内容的提问来源于stack exchange,提问作者Hazey Grace
相关产品推荐
相关产品推荐

