如何在Python二次方程程序中支持小数输入并拦截字符串输入?
二次方程求解程序修改方案
要实现支持小数输入、拦截非法字符串输入,且把校验逻辑放到quadraticFormula()方法里,具体修改如下:
修改要点
- 移除输入阶段的
int()强制转换,直接将用户输入的字符串传入类实例 - 在
quadraticFormula()方法开头添加参数校验逻辑,尝试将参数转为浮点数,捕获非法输入的异常 - 优化判别式计算,避免重复计算相同表达式
修改后的完整代码
class QuadraticFormula: def __init__(self, a, b, c): self.a = a self.b = b self.c = c def quadraticFormula(self): # 输入校验:转换为浮点数,拦截非法输入 try: a = float(self.a) b = float(self.b) c = float(self.c) except ValueError: return "\n输入非法,请输入有效的数字(整数或小数)。" # 检查a是否为0(二次方程要求a≠0) if a == 0: return "\n变量A不能等于0,这不是二次方程。" # 计算判别式,避免重复计算 discriminant = b ** 2 - 4 * a * c try: sqrt_discriminant = discriminant ** 0.5 root1 = (-b + sqrt_discriminant) / (2 * a) root2 = (-b - sqrt_discriminant) / (2 * a) except Exception as e: return f"\n计算时出现错误:{str(e)}" # 根据判别式返回对应结果 if discriminant == 0: return f"\n\n参数为{a}、{b}、{c}的二次方程有一个实根:{root1}。" elif discriminant > 0: return f"\n\n参数为{a}、{b}、{c}的二次方程有两个实根:{round(root1, 2)} 和 {round(root2, 2)}。" else: return f"\n\n参数为{a}、{b}、{c}的二次方程有两个复根:{root1} 和 {root2}。" a_input = input("输入二次方程的变量a(ax² + bx + c = 0):") b_input = input("\n输入二次方程的变量b(ax² + bx + c = 0):") c_input = input("\n输入二次方程的变量c(ax² + bx + c = 0):") qf = QuadraticFormula(a_input, b_input, c_input) print(qf.quadraticFormula())
关键修改说明
- 输入处理调整:原代码在输入阶段直接转
int()限制了输入类型,现在改为保留用户输入的原始字符串,传入类中由quadraticFormula()统一处理类型转换 - 校验逻辑整合:在方法开头添加浮点数转换的异常捕获,非法输入(如字母、特殊字符)会直接返回错误提示
- 代码优化:将判别式计算提取为单独变量,避免重复计算相同表达式,提升代码可读性和效率
- 错误提示细化:针对不同错误场景(非法输入、a为0)给出明确易懂的提示
内容的提问来源于stack exchange,提问作者TaranJS
相关产品推荐
相关产品推荐

