用Python编写的一元二次方程求根程序,含注释

内容分享2小时前发布
0 0 0

程序运行后,会根据计算结果直接给出三种情况的输出:要么显示两个不同的实数根,要么提示一个重根,要么列出一对共轭复根。同时,对输入和运行时的几类错误都有明确的异常处理和提示信息,程序以可读的中文提示与用户交互。

输出部分比较直观。实根的情况用小数点后两位格式化展示,打印样式像这样:“方程有两个不同实根:x₁=…, x₂=…”;重根同样以两位小数显示;复数根则直接以复数形式输出。实现上,实数平方根用math.sqrt计算,复数情况借助cmath.sqrt处理,复数结果不再格式化成两位小数,而是按复数类型默认打印。这种做法能保证数学上的准确性,但用户界面上的一致性略显粗糙,我个人觉得可以再细化一下复数的显示格式。

往前看是判别式的计算。程序把判别式写成 delta = b**2 – 4*a*c,根据它的正负性决定走哪条分支:大于零按公式求出两个不同实根;等于零按重根公式求出单个根;小于零则改用cmath求根并返回共轭复数对。三条分支里对根的计算都写得清楚,公式没有模糊之处,分支内的变量命名也直观,便于阅读与维护。

更早一些,是对输入的处理。程序通过三次输入提示分别读取系数a、b、c,并把输入转换为浮点数。提示语是中文的,列如“请输入二次项系数a(a≠0):”,“请输入一次项系数b:”,“请输入常数项c:”,用户在交互式终端里会看到这些信息。读取之后第一时间检查a是否为0,如果是就主动抛出一个ValueError,错误信息写成“错误:a不能为0,这不是二次方程!”,这么做可以在逻辑层面提前截断不必要的计算。

整个函数主体被包在一个try/except结构里,针对不同异常给出不同提示。ValueError会被捕捉,并以“输入错误:{详细信息}”的形式回显;存在除零情况时会捕捉ZeroDivisionError并打印“错误:除数不能为零!”;其他未预见的异常会进入通用的except分支,打印“发生未知错误:{异常信息}”。这种错误分层处理方式能把常见的操作失误和代码故障分开展示,便于用户理解出错缘由,也方便后续调试。

起始处有两个模块导入:import math 和 import cmath。math用来处理实数的平方根等基础数学运算,cmath专门用于处理负判别式下的复数开方。代码开头还带有一个多行注释,简单说明了函数要完成的步骤:获取输入、验证、计算判别式、根据判别式求根并格式化输出。注释把流程列出来,方便后来者把握整体逻辑,这点挺实用。

函数命名和结构安排上,主要逻辑写在一个名为solve_quadratic的函数里,外面用if __name__ == “__main__”: 来做脚本入口调用。也就是说,把求解器封装成函数,既能作为脚本直接运行,也方便被其他模块导入调用。这种设计比较常见,利于测试和复用。

代码里还有一些行尾注释和引用标记(列如类似 [1,4,5] 的注释),看起来像是从某个文档里复制过来的参考编号,运行时并不影响逻辑,但留在源码里会让人疑惑出处。这里如果整理一下注释来源,会更干净一些。

细节上注意到:在实根情况输出时用了格式化字符串,保留两位小数,打印提示都是中文句子,面向普通用户友善。复数输出使用了cmath计算,结果是复数类型,直接打印会包含j符号。如果要给非专业用户看,复数的展示可能需要更友善的说明或格式化。

从流程上倒着看,程序先是被调用,然后按顺序要求用户输入a、b、c;接着验证a不为零;计算判别式并按三种情况计算根;最后把结果以中文提示打印出来并在遇到异常时给出对应的错误信息。中间每一步都写得比较具体,关键判断和计算公式都没有省略。

整个脚本看起来像是一个教学或工具型的小程序,目的明确,交互朴实,异常处理到位,但也有提升空间,列如统一输出格式、整理注释标记,以及在交互提示中增加对复数结果的解释。代码最后以调用solve_quadratic()结束,用户在终端执行这个脚本就能按提示完成一次方程求解。

© 版权声明

相关文章

暂无评论

none
暂无评论...