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

如何在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())

关键修改说明

  1. 输入处理调整:原代码在输入阶段直接转int()限制了输入类型,现在改为保留用户输入的原始字符串,传入类中由quadraticFormula()统一处理类型转换
  2. 校验逻辑整合:在方法开头添加浮点数转换的异常捕获,非法输入(如字母、特殊字符)会直接返回错误提示
  3. 代码优化:将判别式计算提取为单独变量,避免重复计算相同表达式,提升代码可读性和效率
  4. 错误提示细化:针对不同错误场景(非法输入、a为0)给出明确易懂的提示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 03:03:16